我有一个Flutter应用程序,我正在Flutter上测试Firebase的谷歌分析。
我想看看我们的用户(目前是我)正在访问的路线。我按照firebase_analytics
中的设置步骤进行了操作,并检查了他们的示例应用程序。我启用了Debug View docs中描述的Analytics调试
不幸的是,我在Analytics Debug视图中收到的仅有两种屏幕视图(firebase_screen_class
)是Flutter
和MainActivity
。
我希望在某个地方看到/example-1
、/example-2
和/welcome
,但我没有。
这是我在Flutter中运行的应用程序
class App extends StatelessWidget {
final FirebaseAnalytics analytics = FirebaseAnalytics();
@override
Widget build(BuildContext context) {
return MaterialApp(
routes: <String, WidgetBuilder>{
'/example-1': (_) => Example1(),
'/example-2': (_) => Example2(),
'/welcome': (_) => Welcome(),
},
home: Welcome(),
navigatorObservers: [FirebaseAnalyticsObserver(analytics: analytics)],
);
}
}
4条答案
按热度按时间qkf9rpyu1#
这个确切的用例在Track Screenviews部分下的Firebase Analytics文档中。
如果您的应用没有为您希望跟踪的每个屏幕(例如在游戏中)使用单独的UIViewController或Activity,则手动跟踪屏幕非常有用。
Flutter正是这种情况,因为Flutter负责屏幕更新:大多数简单的Flutter应用运行一个
FlutterActivity
/FlutterAppDelegate
,它会自行渲染不同的屏幕,因此让Firebase Analytics自动跟踪屏幕不会带来预期的效果。就我过去的经验来看,
FirebaseAnalyticsObserver
不是很有帮助,但是,我也推荐你,check their docs again,他们确实暗示事情应该“只是工作”。我最好的猜测是,它对我没有很好地工作,因为我没有在我的任何路线上使用RouteSettings
*
。如果
FirebaseAnalyticsObserver
不工作或不适用于您的应用程序,在过去几个月的开发中,下一种方法对我来说相当有效。如果使用屏幕名称调用
setCurrentScreen
方法,则可以在任何时候使用FirebaseAnalytics
设置当前屏幕:作为第一次尝试,我在小部件构造函数中这样做,但这样做效果不好,并且会错误地计算事件:如果你弹出或推入路径,堆栈中的所有小部件构造函数都将被调用,即使只有顶部的路径才真正有资格作为“当前屏幕”。
为了解决这个问题,我们需要使用
RouteAware
类,并且只在当前屏幕是顶部路线的情况下设置当前屏幕:要么我们的路由被添加到堆栈,要么前一个顶部路由被弹出,我们到达该路由。RouteAware
附带了样板代码,我们不想在所有屏幕上重复这个样板代码。即使是小应用,也有几十个不同的屏幕,所以我创建了RouteAwareAnalytics
mixin:我创建了一个
enum
来跟踪屏幕(以及将枚举转换为屏幕名称的函数)。我使用枚举能够轻松跟踪所有路由,重构路由名称。使用这些枚举和函数,我可以对所有可能的值进行单元测试,并强制一致的命名:没有意外的空格或特殊字符,没有不一致的大写。可能有其他更好的方法来确定屏幕类的值,但我采用了这种方法。初始设置的下一步是将
routeObserver
注册为MaterialApp
的navigatorObserver
:最后,我们可以添加第一个被跟踪的示例路径。将
with RouteAwareAnalytics
添加到您的州并覆盖get route
。每次添加新路线时,都可以轻松完成:首先,添加一个新的枚举值,然后Dart编译器将指导您接下来添加什么:在各自的
switch-case
中添加屏幕名称和类覆盖值。然后,找到构建路由的州,添加with RouteAwareAnalytics
,并添加route
getter。**
*
**我没有使用RouteSettings
的原因是我更喜欢带类型化参数的Simon Lightfoot's approach,而不是设置提供的Object
参数:bf1o4zei2#
添加导航观察器
将Firebase分析navigation observer添加到您的MatetialApp:
**就是这样!**您的分析应该出现在DebugView:
注意!
如果您是第一次在应用中集成分析功能,则需要大约一天的时间,您的分析功能才会显示在 Jmeter 盘中。
立即查看结果
要立即查看调试结果,请在终端上运行上述命令,然后检查它们是否出现在DebugView中:
好好享受吧!
wwtsj6pe3#
我经历了一段时间的问题,只是能够使它的工作
对我来说,问题是我没有在MaterialPageRoute中正确传递设置
我按照FilledStack上的教程学习,在看到示例代码后能够弄清楚我的问题
hxzsmxv24#
如果您在
screen_view
事件的firebase_screen_class
参数中看到“Flutter”,则表示您已正确配置它。您应该在
firebase_screen
参数中找到所需的值,而不是在firebase_screen_class
中。还值得检查
firebase_previous_screen
参数,以查看在此之前打开的屏幕是什么。