是否有必要在每个 Activity 中初始化 Firebase Analytics?

Posted

技术标签:

【中文标题】是否有必要在每个 Activity 中初始化 Firebase Analytics?【英文标题】:It is necessary to initialize Firebase Analytics in every Activity? 【发布时间】:2016-11-26 04:44:16 【问题描述】:

我不想向 Firebase Analytics 控制台发送任何特殊日志,只需检查用户在哪些屏幕上花费了更多时间等等。

当我使用AnalyticsTracker 时,必须在任何地方添加它,所以您可以使用Tracker.xml 文件设置每个屏幕的特定名称。

官方文档说:

将 Firebase Analytics 的依赖项添加到您的应用级 build.gradle 文件中:

compile 'com.google.firebase:firebase-core:9.2.1'

在活动顶部声明 FirebaseAnalytics 对象:

private FirebaseAnalytics mFirebaseAnalytics;

然后在onCreate()方法中初始化:

mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

所以我想我必须在我想获取数据的每个页面上都这样做,不是吗?

【问题讨论】:

【参考方案1】:

Firebase 现在会自动跟踪屏幕活动,但您仍然可以手动跟踪它们。

mFirebaseAnalytics.setCurrentScreen(this, screenName, null /* class override */);

来源:

https://firebase.google.com/docs/analytics/screenviews

【讨论】:

【参考方案2】:

对于屏幕报告,您不需要在每个活动中都调用FirebaseAnalytics.setCurrentScreen(),因为这是自动为您完成的。 official docs 状态:

请注意,屏幕报告会自动启用并记录 当前 Activity 的类名,而不需要您 调用这个函数。

据推测,要使其工作,您需要在 Application 子类 onCreate() 方法中调用 FirebaseAnalytics.getInstance()

【讨论】:

【参考方案3】:

现在只需一行即可完成屏幕跟踪

**Your ApplicationClass**
    public FirebaseAnalytics mFirebaseAnalytics;
    @Override
        public void onCreate() 
     mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    

    public FirebaseAnalytics getmFirebaseAnalytics() 
            return mFirebaseAnalytics;
        

之后创建 Base Activity 并从此处调用 FirebaseAnalytics getter。然后如下使用 .setCurrentScreen

**Your BaseActivity**
    @Override
        protected void onResume() 

            FirebaseAnalytics firebaseAnalytics = ((ApplicationClass) getApplication()).getmFirebaseAnalytics();
            firebaseAnalytics.setCurrentScreen(this, getClass().getSimpleName(), null);
            Log.d("FAnalytics", "setCurrentScreen: " + getClass().getSimpleName());
            super.onResume();
        

别忘了!您的所有活动都必须从 BaseActivity 扩展 https://firebase.google.com/docs/analytics/screenviews

【讨论】:

在您链接到的文档中没有提及 BaseActivity。您能解释一下 BaseActivity 的含义吗? 如果您使用 BaseActivity,您只需调用一次 setCurrentScreen()。否则,您必须在每项活动中都这样做。对于只使用一次的另一种解决方案,您可以打开名为 AnalyticsHelper 的新类,并在其中放置诸如 public static void sendScreen(Activity activity, String eventName, String screenName) ... @tobltobs 之类的方法【参考方案4】:

没有。您只需要在扩展应用程序类的类中创建全局变量



    public class MyApplication extends Application 
    public static  FirebaseAnalytics mFirebaseAnalytics;
    @Override
        public void onCreate() 
            super.onCreate();
          mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    
    

之后,在清单中的 Application 标记中添加以下行

<application
  android:name=".MyApplication"
  ...

【讨论】:

那为什么 Steve Ganem 说不支持呢? @H.S.H 并不是说​​支持 Page/ScreenViews。如果需要在每个活动中初始化,他只回答了这个问题。答案是否定的,你可以在Application类中实例化它。 你好,我是 Android 菜鸟,我对这里发生的事情很着迷。我认为真正的魔法发生在 ".MyApplication" 被添加到清单中时。请您花点时间解释一下这里到底发生了什么? @Anuj android:name=".MyApplication" 只是告诉 Android 它应该使用 MyApplication 类作为应用程序类。如果没有这个,您的自定义应用程序类将被忽略。是的,如果你想记录额外的事件,你必须创建一个 getter。 @RonyTesler 因为他认为它不受支持。【参考方案5】:

Firebase Analytics 尚不支持自动屏幕跟踪,但我们目前正在仔细考虑这一点。

【讨论】:

现在是,所以你可能想删除这个答案

以上是关于是否有必要在每个 Activity 中初始化 Firebase Analytics?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在片段类中设置 ViewPager?

activity的四中启动模式

Android Activity:四种启动模式,Intent Flags和任务栈(转自他人博客)

怎么判断是否有网络链接

在 laravel 的迁移中是不是有必要为每个 up() 写下来()?

对于MariaDB,是否有必要在我使用的每个函数上创建和关闭连接?