如何在Firebase分析中跟踪Flutter屏幕?

时间:2019-04-24 12:56:03

标签: firebase flutter firebase-analytics

我有Flutter应用,并且正在Flutter上测试Google Analytics for Firebase。

我想查看我们的用户(现在是我)正在访问的路线。我按照firebase_analytics中的设置步骤进行操作,并检查了其示例应用程序。如Debug View docs

中所述,我启用了Google Analytics(分析)调试功能

不幸的是,我在Analytics Debug视图中收到的仅有两种屏幕视图(firebase_screen_class)是FlutterMainActivity

我希望在某个地方看到/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 个答案:

答案 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),
  ],
);

enter image description here

注意!

如果您是第一次将分析与应用程序集成,请注意,您的分析将需要大约一天的时间才能出现在仪表板中。

为了立即查看调试结果,您可以在终端上运行以上命令,并在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参数以查看在该参数之前打开的屏幕。