Sag*_*gar 11 testing android firebase firebase-analytics
我确信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();
}
Run Code Online (Sandbox Code Playgroud)
但我发现它并不像我想象的那么独特.显然,我的ID与少数(极少数)用户相同.
这样做有一种万无一失的方法吗?
Bob*_*der 19
您可以控制分析收集利用与被定义的设置清单元数据manifestPlaceholder:
<application
android:name="MyApplication"
//... >
<meta-data
android:name="firebase_analytics_collection_deactivated"
android:value="${analytics_deactivated}" />
//...
</application>
Run Code Online (Sandbox Code Playgroud)
然后在build.gradle
文件的构建变量块中定义占位符值:
buildTypes {
debug {
manifestPlaceholders = [analytics_deactivated: "true"]
//...
}
release {
manifestPlaceholders = [analytics_deactivated: "false"]
//...
}
Run Code Online (Sandbox Code Playgroud)
1) 获取所有测试设备的ANDROID_ID(这是用户第一次设置设备时生成的 64 位唯一 ID。此后保持不变。)
private static String getDeviceID(Context c) {
return Settings.Secure.getString(c.getContentResolver(), Settings.Secure.ANDROID_ID);
}
Run Code Online (Sandbox Code Playgroud)
2) 将这些 ID 添加到数组中:
private static String testingDeviceIDs[] = {"8ab5946d3d65e893", "ada1247bfb6cfa5d", ...};
Run Code Online (Sandbox Code Playgroud)
3) 检查当前设备是否为测试设备之一。
private static boolean isDeviceForTesting(Context c) {
for (String testingID : testingDeviceIDs)
if (getDeviceID(c).equals(testingID))
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
4) 最后,仅当设备不是测试设备时才记录 Firebase 事件。
static void logFirebaseEvent(Context c, String name) {
if (!isDeviceForTesting(c))
FirebaseAnalytics.getInstance(c).logEvent(name, null);
}
Run Code Online (Sandbox Code Playgroud)
UPSIDE:与 Firebase 提供的控制分析收集不同,此方法也适用于发布版本/APK。