Исключить тестовое устройство из журнала Firebase Analytics

Я уверен, что Firebase считает всю мою работу над разработкой своей аналитикой. Я открываю свое приложение, как сто раз в день, для отладки и тестирования на нескольких устройствах, это действительно искажает мои показания.

Я использовал функцию, чтобы получить несколько уникальный идентификатор для представления моих устройств и игнорировать все его аналитики с помощью кода.

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();
}

Но я просто понял, что это не так однозначно, как я предполагал. По-видимому, мой идентификатор был таким же, как и у нескольких (очень немногих) пользователей.

Есть ли надежный способ сделать это?

Ответ 1

Решение с использованием ANDROID_ID

В Android есть уникальный идентификатор устройства, называемый ANDROID_ID, 64-разрядное число, которое генерируется случайным образом, когда пользователь впервые настраивает устройство, и остается постоянным после этого. Используя этот ANDROID_ID, мы можем однозначно идентифицировать тестирующие устройства.

Примечание. В отличие от Firebase, обеспечивающего управление сбором аналитики, этот метод также будет работать с выпусками сборки /APK.

1) Начните с поиска вашего устройства ANDROID_ID с помощью следующей функции:

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

2) После этого добавьте этот идентификатор в следующий массив:

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);
}

Ответ 2

Вы можете контролировать коллекцию аналитики с использованием метаданных манифеста с настройкой, определяемой manifestPlaceholder:

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

Затем определите значение placeholder в блоках вариантов сборки вашего файла build.gradle:

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

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

Ответ 3

Должен иметь возможность сделать что-то вроде следующего:

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

Ответ 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 Analytics/tracking для тестовых устройств, на которых выполняются тесты Firebase или отчеты перед запуском Play Console (которые на самом деле являются тестами Firebase), то вам необходимо отключить их на основе системной строки:

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

В общем, это комбинация проверки, является ли ваше устройство устройством Firebase Test, и затем вы отключаете FirebaseAnalytics для него.