从 Firebase Analytics 日志记录中排除测试设备

Exclude testing device from Firebase Analytics logging

我确信 Firebase 也在其分析中计算了我所有的开发工作。我每天打开我的应用程序数百次以在几台设备上进行调试和测试,这确实扭曲了我的读数。

我使用了一个函数来获得一个有点独特的 ID 来代表我的设备,并通过代码忽略了它的所有分析。

public static String getPsuedoID() {
    String m_szDevIDShort = "35" + (Build.BOARD.length() % 10)
    + (Build.BRAND.length() % 10) + (Build.VERSION.SDK_INT % 10)
    + (Build.DEVICE.length() % 10) + (Build.DISPLAY.length() % 10)
    + (Build.MODEL.length() % 10) + (Build.PRODUCT.length() % 10);

    String serial;
    try {
        serial = android.os.Build.class.getField("SERIAL").get(null).toString();
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    } catch (Exception exception) {
        serial = "getUniquePsuedoIDfailed";
    }
    return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
}

但我发现它并不像我想象的那么独特。显然,我的ID与一些​​(很少)用户相同。

有没有万无一失的方法来做到这一点?

应该可以执行以下操作:

    if (BuildConfig.DEBUG) {
        FirebaseAnalytics.getInstance(getApplicationContext()).setAnalyticsCollectionEnabled(false);
     }

你可以control analytics collection using manifest metadata with the setting defined by a manifestPlaceholder:

<application
    android:name="MyApplication"
    //... >
    <meta-data
        android:name="firebase_analytics_collection_deactivated"
        android:value="${analytics_deactivated}" />
    //...
 </application>

然后在 build.gradle 文件的构建变体块中定义占位符值:

buildTypes {
    debug {
        manifestPlaceholders = [analytics_deactivated: "true"]
        //...
    }

    release {
        manifestPlaceholders = [analytics_deactivated: "false"]
        //...
    }

使用 ANDROID_ID

的解决方案

1) 获取ANDROID_ID你所有的测试设备(这是用户第一次设置设备时生成的64位唯一ID,保持不变此后。)

private static String getDeviceID(Context c) {
    return Settings.Secure.getString(c.getContentResolver(), Settings.Secure.ANDROID_ID);
}

2) 将这些 ID 添加到数组中:

private static String testingDeviceIDs[] = {"8ab5946d3d65e893", "ada1247bfb6cfa5d", ...};

3) 检查当前设备是否为测试设备之一

private static boolean isDeviceForTesting(Context c) {
    for (String testingID : testingDeviceIDs)
        if (getDeviceID(c).equals(testingID))
            return true;
    return false;
}

4) 最后,仅当设备不是测试设备时才记录 Firebase 事件。

static void logFirebaseEvent(Context c, String name) {
    if (!isDeviceForTesting(c))
        FirebaseAnalytics.getInstance(c).logEvent(name, null);
}

优点:与 Firebase 控制分析收集的规定不同,此方法也适用于版本 builds/APKs。

firebase 文档只描述了可以从 apk 中禁用它。

AndroidManifest.xml

<meta-data android:name="firebase_analytics_collection_enabled" android:value="false" />

Activity.java

setAnalyticsCollectionEnabled(false);

来源:https://firebase.google.com/support/guides/disable-analytics

如果您要查找的是 运行 Firebase 测试或 Play 控制台预发布报告(实际上是 Firebase 测试)的测试设备禁用 Firebase 分析/跟踪,那么您需要根据系统字符串禁用它们:

String testLabSetting = Settings.System.getString(context.getContentResolver(), "firebase.test.lab");
if ("true".equals(testLabSetting)) {
    FirebaseAnalytics.getInstance(context).setAnalyticsCollectionEnabled(false);
}

所以基本上,它是检查您的设备是否为 Firebase 测试设备,然后为它禁用 FirebaseAnalytics 的组合。

但是,它不会完全停止 Firebase Analytics,事件 session_start 将继续出现。

您可以通过运行以下操作禁用测试设备的事件日志记录:

adb shell setprop debug.firebase.analytics.app package_name

重新启用日志记录运行:

adb shell setprop debug.firebase.analytics.app .none.

来自Firebase本身:

To prevent your testing and development from affecting your measurements, events logged while in debug mode will be excluded from your overall Analytics data, and will not be included in your daily BigQuery export.