不要看!Android统计渠道包注册量

时间:2021-09-13 14:49:41

可以理解为另一个问题,如何知道apk的渠道来源呢?

通过这个方法:

/**
* 获取渠道名
* @param ctx 此处习惯性的设置为activity,实际上context就可以
* @return 如果没有获取成功,那么返回值为空
*/

public static String getChannelName(Activity ctx) {
if (ctx == null) {
return null;
}
String channelName = null;
try {
PackageManager packageManager = ctx.getPackageManager();
if (packageManager != null) {
//注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
//UMENG_CHANNEL要和清单文件的相对应
channelName = applicationInfo.metaData.getString("UMENG_CHANNEL");
}
}

}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return channelName;
}

不过需要和umeng配合使用,注意”UMENG_CHANNEL”这个词的对应:

<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />

在打包的地方(build.gradle)也需要植入这个”UMENG_CHANNEL”,这样才能在打包后修改清单文件的meta-data,注意UMENG_CHANNEL_VALUE要和meta-data里的value值的对应:

android {

productFlavors {

baidu {}//百度
anzhi {}//安智
yingyongbao {}//腾讯应用宝
qihu360 {}//360
wandoujia {}//豌豆荚
mumayi {}//木蚂蚁
appchina {}//应用汇
leshi {}//乐视
huawei {}//华为
xiaomi {}//小米
meizu {}//魅族
oppo {}//oppo
vivo {}//vivo
pp {}//pp助手
gfan {}//机锋市场
nduo {}//n多市场
lenovo {}//乐商店
eoe {}//优亿市场
gionee {}//金立
coolpad {}//酷派
myzte {}//中兴

productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}

}
}

这样在打包后就可以通过getChannelName方法获取到打包的渠道了。如果获取不到的话,返回null

解决完这个问题后,就简单多了。在登陆/注册的时候把渠道名称传给后台,这样就可以统计到不光是注册的数据了。