是否有必要在每个 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?的主要内容,如果未能解决你的问题,请参考以下文章
Android Activity:四种启动模式,Intent Flags和任务栈(转自他人博客)