【问题标题】:Exclude testing device from Firebase Analytics logging从 Firebase Analytics 日志记录中排除测试设备
【发布时间】:2016-12-04 14:57:22
【问题描述】:

我确信 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 与少数(极少数)用户相同。

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

【问题讨论】:

    标签: android testing firebase firebase-analytics


    【解决方案1】:

    您可以control analytics collection 使用带有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"]
            //...
        }
    

    【讨论】:

    • 就是这样,谢谢。
    • 但是如果我不想记录来自特定设备的事件,即使它是从 Play 商店下载的签名 APK 怎么办?我们的团队经常对实时应用进行测试。
    • @shashwat 您可以在下面查看我的解决方案。我相信它会适用于您的用例。
    【解决方案2】:

    使用 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 提供的控制分析收集不同,此方法也适用于发布版本/APK。

    【讨论】:

      【解决方案3】:

      应该能够做到以下几点:

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

      【讨论】:

      • 但是如果我不想记录来自特定设备的事件,即使它是从 Play 商店下载的签名 APK 怎么办?我们的团队经常对实时应用进行测试。
      【解决方案4】:

      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

      【讨论】:

        【解决方案5】:

        如果您要查找的是为运行 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 事件将继续出现。

        【讨论】:

          【解决方案6】:

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

          adb shell setprop debug.firebase.analytics.app package_name

          要重新启用日志记录运行:

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

          来自Firebase本身:

          为防止您的测试和开发影响您的测量,在调试模式下记录的事件将从您的整体 Analytics 数据中排除,并且不会包含在您的每日 BigQuery 导出中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-01-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-02
            • 1970-01-01
            • 1970-01-01
            • 2018-12-29
            相关资源
            最近更新 更多