写在前面
因app的业务需求,需要针对不同的渠道,提示不同的app升级弹窗提示,和不用的推送提示。
那么就需要在和服务器交互之前,获取我们的渠道标识,再进一步的完成后续的交互。
友情提示
方法一:适用范围–友盟统计+gradle配置多渠道打包的方式。
方法二:没有范围,使用友盟自己的API方法。
方法一
在app中的使用方法,搞成工具类就ok
/**
* 获取渠道名
* @param context 此处习惯性的设置为activity,实际上context就可以
* @return 如果没有获取成功,那么返回值为空
*/
public static String getChannelName(Context context) {
if (context == null) {
return null;
}
String channelName = null;
try {
PackageManager packageManager = context.getPackageManager();
if (packageManager != null) {
//注意此处为ApplicationInfo,因为友盟设置的meta-data是在application标签中
ApplicationInfo applicationInfo = packageManager.
getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
//这里的UMENG_CHANNEL要与manifest中的配置文件标识一致
channelName = String.valueOf(applicationInfo.metaData.get("UMENG_CHANNEL"));
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return channelName;
}
再附上我的manifest文件中,友盟的配置信息,以供参考。
<meta-data
<--这里的UMENG_CHANNEL的标识一定和上面的保持一致-->
android:name="UMENG_CHANNEL"
android:value="${channelName}" />
方法二
使用友盟的api中的方法获取渠道标识,这种方法也是最简单的。
String channel_name= AnalyticsConfig.getChannel(this);
最后,这两种方法都可以获取到渠道标识。对比一、二方法,方法二固然简单,但是局限性还是有的;相对而言,方法一,先获取packageMananger,再去获取Application中的信息,进而获取mate-data中的数据,这样我们能拿到的信息就不仅仅渠道标识了,还可以做更多的事情。