禁用Firebase中的自动活动跟踪

Bor*_*sky 17 android firebase-analytics

我想知道,有没有办法禁用分析自动活动跟踪?我有基于片段的视图层次结构,但很少有案例:

  1. 始终具有一个片段的活动.
  2. 可以将不同片段作为root的活动.
  3. 具有根片段的活动,其中包含ViewPager和其他片段.

我在Firebase文档的片段中使用这样的代码来跟踪自定义屏幕:

mFirebaseAnalytics.setCurrentScreen(getActivity(), "some_fragment_1", null);
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,我想只跟踪根片段.在第二种情况下,我想只跟踪成为root的每个片段.在第三种情况下,我想只跟踪在ViewPager中可见的每个片段.

而且,问题是,我根本不想跟踪活动,但不幸的是,Firebase自己做 - 因此,我的统计数据看起来很奇怪,例如:

SomeActivity 50%

some_fragment_1 30%

some_fragment_2 20%

我不需要此统计信息中的活动,因为片段统计信息已包含它.

那么,有没有办法禁用活动追踪?

ior*_*i24 7

现在可以使用新的 API 来手动跟踪屏幕。

可以禁用自动跟踪

在 iOS 上,在 info.plist 中将 FirebaseAutomaticScreenReportingEnabled 设置为 NO。在 Android 上,在清单中将 google_analytics_automatic_screen_reporting_enabled 设置为 false。

手动追踪

iOS系统

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // After enough time has passed to make this screen view significant.
    Analytics.logEvent(AnalyticsEventScreenView, parameters: [
        AnalyticsParameterScreenName: screenName!,
        AnalyticsParameterScreenClass: screenClass!,
        MyAppAnalyticsParameterFitnessCategory: category!
    ])
}
Run Code Online (Sandbox Code Playgroud)

安卓

@Override
public void onResume() {
    super.onResume();

    // After enough time has passed to make this screen view significant.
    Bundle bundle = new Bundle();
    bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, screenName);
    bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, screenClass);
    bundle.putString(MyAppAnalyticsConstants.Param.TOPIC, topic);
    mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle);
}
Run Code Online (Sandbox Code Playgroud)

https://firebase.googleblog.com/2020/08/google-analytics-manual-screen-view.html


Koc*_*cus 0

我知道这是一个黑客攻击,但似乎正在使用最新的 Firebase 分析。这个想法是,Firebase AnalyticsregisterActivityLifecycleCallbacks()在清单中声明的​​每个活动内部使用,因此禁用这种方式会禁用自动活动报告。

将该代码放入Activity您正在使用的每个根中。

@Override
public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) {
    // com.google.android.gms.measurement.internal.zzfl for firebase-core:17.1.0, play-services-measurement-impl:17.1.0
    if (!callback.getClass().getName().startsWith("com.google.android.gms.measurement.")){
            super.registerActivityLifecycleCallbacks(callback);
    }
}
Run Code Online (Sandbox Code Playgroud)

发现这一点的功劳归于https://github.com/firebase/quickstart-android/issues/370上的@liudongmiao 。