我有Flutter应用,并且正在Flutter上测试Google Analytics for Firebase。
我想查看我们的用户(现在是我)正在访问的路线。我按照firebase_analytics
中的设置步骤进行操作,并检查了其示例应用程序。如Debug View docs
不幸的是,我在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)],
);
}
}
答案 0 :(得分:1)
确切的用例在Track Screenviews部分下的Firebase Analytics文档中。
如果您的应用未针对您希望跟踪的每个屏幕(例如在游戏中)使用单独的UIViewController或Activity,则手动跟踪屏幕会很有用。
Flutter就是这种情况,因为Flutter负责屏幕更新,因此无法让Firebase Analytics自动跟踪屏幕。
您需要确保路由可以访问FirebaseAnalytics
的实例,然后手动设置屏幕名称(我按照注释中的建议在窗口小部件构造函数中进行了设置,但也可能有更好的方法)。
analytics.setCurrentScreen(screenName: 'Example1');
为简化此操作,我添加了一个抽象类
abstract class AnalyticsScreen {
String get screenName;
// FirebaseAnalytics constructor reuses a single instance, so it's ok to call like this
void setCurrentScreen() =>
FirebaseAnalytics().setCurrentScreen(screenName: screenName);
}
然后我可以在路由中使用该类作为混合类,例如在StatefulWidget
s
class Example extends StatefulWidget with AnalyticsScreen {
@override
get screenName => 'example';
@override
_ExampleState createState() => _ExampleState();
Example() {
setCurrentScreen();
}
}
好处是您可以使用setCurrentScreen()
并且不会忘记屏幕名称,但是缺点是,您仍然必须记住在小部件的构造函数中调用setCurrentScreen
。如果您对此有更惯用的Dart解决方案,请在评论中让我知道。
上面的解决方案可能(无法很好地测试它以致不能肯定地说)不起作用,一种改进是可以在这些类中使用RouteAware
。
答案 1 :(得分:1)
您可以添加Firebase分析navigation observer:
要使用它,请将其添加到导航器的导航器中。如果 您正在使用MaterialApp:
class MyApp extends StatelessWidget {
FirebaseAnalytics analytics = FirebaseAnalytics();
...
MaterialApp(
home: MyAppHome(),
navigatorObservers: [
FirebaseAnalyticsObserver(analytics: analytics),
],
);
注意!
如果您是第一次将分析与应用程序集成,请注意,您的分析将需要大约一天的时间才能出现在仪表板中。
为了立即查看调试结果,您可以在终端上运行以上命令,并在firebase解析debugView上查看分析结果(如顶部图片所示):
adb shell setprop debug.firebase.analytics.app [your_app_package_name]
享受!
答案 2 :(得分:1)
我遇到这个问题有一段时间了,只是能够让它发挥作用
我的问题是我没有正确传递 MaterialPageRoute 中的设置
return MaterialPageRoute(
settings: RouteSettings(
name: routeName,
),
builder: (_) => viewToShow);
}
我按照 FilledStack 上的教程进行操作,并在看到示例代码后发现了我的问题
答案 3 :(得分:0)
如果您在firebase_screen_class
的{{1}}参数中看到“颤动”
事件,表示您已正确配置它。
您应该在screen_view
参数中找到所需的值,而不是firebase_screen
。
还值得检查firebase_screen_class
参数以查看在该参数之前打开的屏幕。