2016-12-04 77 views
9

我相信Firebase在其分析中也计算了我所有的开发工作。我每天打开我的应用程序数百次,以在几个设备上进行调试和测试,这实际上使我的读数偏差。从Firebase Analytics日志记录中排除测试设备

我已经使用了一个函数来为我提供一个有点独特的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(); 
} 

但我刚才发现它并不像我想象的那样独特。显然,我的身份证和几个(很少)用户的身份证相同。

有没有一个简单的方法来做到这一点?

回答

0

这是我所能想到的,可以依赖的。 Android提供了一个唯一的设备ID,名称为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; 
} 

最后,这里,将触发事件,以火力地堡之前检查测试设备的主要功能。

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

但是如果我不想从特定设备记录事件,即使它是从Play商店下载的APK APK上下载的?我们的团队经常对现场应用程序进行测试 – shashwat