Google Analytics detects Google Cloud Test Lab tests as Active Users and New Users

774 Views Asked by At

I am using Google Analytics and I have seen that all the devices in the Cloud Test Lab are detected as "active users" and "new users" (which makes sense). Is there any way to detect this and do not count them ?

I see that they are not counted as installs in Google Play, so I would expect the same behaviour for Analytics.

It is possible to avoid this by uploading a different version to Alpha/Beta and Production with different tracking ids, but the Cloud Test Lab feature is much more powerful if the same Apk is promoted from Alpha/Beta to Production.

3

There are 3 best solutions below

3
Catherine Smith On BEST ANSWER

Depends on what you mean by "not count them". If these cloud visits are identifiable by source/medium or another unique parameter, I think best practice would be creating another view in which these visits are filtered out. Otherwise you could apply a segment to your standard view that excludes these visits.

1
aaronvargas On

As mentioned, you can exclude analytics by the IP addresses listed in the page https://firebase.google.com/docs/test-lab/android/get-started#ip-blocks

Here is some code to handle this (requires apache commons-net) This should cover all the current cases.

NOTE: You'll only need to call this once at app start, since a Test Lab device won't change IP addresses and a NON Test Lab Device will not become one. I guess this kinda assumes that the wifi connection is established also...

private static boolean isTestLabIpAddress(Context context) {
    WifiManager wm = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE);
    String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

    // Log.i(TAG, "isTestLabIpAddress: ip: " + ip); for diagnosis, you may want this temporarily to be able to check the TestLab device logcat logs

    // https://firebase.google.com/docs/test-lab/android/overview#and_mobile_advertising
    List<String> cidrAddrs = new ArrayList<>();

    //Physical devices
    cidrAddrs.add("108.177.6.0/23");

    //Virtual devices
    cidrAddrs.add("35.192.160.56/29");
    cidrAddrs.add("35.196.166.80/29");
    cidrAddrs.add("35.196.169.240/29");
    cidrAddrs.add("35.203.128.0/28");
    cidrAddrs.add("35.234.176.160/28");
    cidrAddrs.add("199.192.115.0/30");
    cidrAddrs.add("199.192.115.8/30");
    cidrAddrs.add("199.192.115.16/29");

    for (String cidrRange : cidrAddrs) {
        SubnetUtils utils = new SubnetUtils(cidrRange); // build.gradle - implementation 'commons-net:commons-net:3.6'
        boolean isInRange = utils.getInfo().isInRange(ip);
        if (isInRange) {
            //Log.d(TAG, "isTestLabIpAddress: true: " + ip);
            return true;
        }

    }
    return false;
}
0
guy.gc On

According to this answer, you can check if "firebase.test.lab" system variable is set to "true" which indicates if you're running on a test lab device.