2016-12-04 4 views
9

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

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

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

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

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

ответ

0

Это то, что я мог понять, на что можно положиться. У Android есть уникальный идентификатор устройства, называемый ANDROID_ID, который является 64-разрядным номером и генерируется случайным образом, когда пользователь сначала устанавливает устройство и должен оставаться постоянным в течение всего срока службы устройства пользователя.

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

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


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

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

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

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

должны быть в состоянии сделать что-то вроде следующего:

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

но что делать, если я не хочу регистрировать события с определенных устройств, даже если он подписан APK, загруженный из Play Маркета? Наша команда часто проводит тесты в реальном времени. – shashwat

12

Вы можете 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"] 
     //... 
    } 
+0

Вот и все, спасибо. – Taher

+1

, но что делать, если я не хочу регистрировать события с определенных устройств, даже если он подписан APK, загруженный из Play Маркета? Наша команда часто проводит тесты в реальном времени. – shashwat

Смежные вопросы