可以理解为另一个问题,如何知道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
解决完这个问题后,就简单多了。在登陆/注册的时候把渠道名称传给后台,这样就可以统计到不光是注册的数据了。