多渠道打包的用途
- 用途一:统计不同渠道的数据,方便在推广运营过程中进行有效的渠道比较。来评估渠道的质量。
- 用途二:对于APP内部有分享邀请好友送奖励的活动,需要进行渠道标识,免除用户手动输入邀请码的流程。
简化用户注册步骤,减少因注册步骤太繁琐而导致的用户流失。 - 用途三:部分游戏要进行分渠道的推广,需要进行分包统计。
- 分包的方式:
- 客户端打多个渠道包:以下方式都使用
- 服务器根据需要动态生成渠道包:使用较多的为美团和360的方式
第一步:在清单文件中定义渠道
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
第二步:在build.gradle中动态替换渠道值
productFlavors {
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
}
uc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}
}
第二步可替换为如下方式:
productFlavors {
wandoujia {...}//支持在{}定义属性
baidu {...}
c360 {...}
uc {...}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
<!--1、添加channels.properties渠道信息配置文件-->
#默认渠道
channel.default=paojiao
#全部渠道列表
channel.list=baidu,c360,uc12345
apply from: "../channels.gradle"1
productFlavors {
for (int i = 0 ; i < channelArray.size(); i++) {
def channel = channelArray[i]
"${channel}"{
manifestPlaceholders = [CHANNEL_VALUE: channel]
}
}
}
渠道读取
private String getChannel(Context context) {
try {
PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
return appInfo.metaData.getString("channel");
} catch (PackageManager.NameNotFoundException ignored) {
}
return "";
}