寫在前面
因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中的數據,這樣我們能拿到的信息就不僅僅渠道標識了,還可以做更多的事情。