Error:java.io.IOException: Duplicate zip entry [com/ta/utdid2/device/d.class == 131.jar:com/ta/utdid2/device/UTDevice.class]
集成之后,报如上错误,能看出原因是集成中出现了重复的类,导致编译失败,很多文章中都提到这是与 阿里支付 冲突了。
解决:将集成的 thirdparties目录里的utdid4all-..* 该 jar 删除,编译通过。(不知道这个包的作用,不过从名字来看,具体名字,貌似是混淆的库)。
小米|华为|魅族 聚合通道的坑:
集成过程极其简单,不再赘述。不过其中需要注意的是:
小米:
1.通知的标题(title)不允许全是空白字符且长度小于50,通知的内容(text)不允许全是空白字符且长度小于128(通知的标题和内容必填,一个中英文字符均计算为1)。
华为:
- 注册成功后会在tag:HuaWeiReceiver下面打印log: 获取token成功,token= xxxxxxxxxxxxxxxxxxxxxxx接收到华为消息则会打印log: HuaWeiReceiver,content= xxxxxxxxxxxxxxxxxxxxxxx
魅族:
- 注册成功后会在tag:tag:MeizuPushReceiver下面打印log: onRegister, pushId=xxxxxxxxxxxxxxxxxxxxxxx
- 请在drawable目录下添加一个图标,命名为stat_sys_third_app_notify.png,建议尺寸64px * 64px,图标四周留有透明。若不添加此图标,可能在部分魅族手机上无法弹出通知。
另外:
- 当你在后台发送时,需要点选 系统下发 的选项,否则无法完成系统下发。而且,如果发送的通知时,app 活着,那么走的并不是系统下发,只有友盟认定 app 离线了,才会走系统下发通道。
- 如果你想要完成系统下发,那么你的目标 Activity 还必须是 UmengNotifyClickActivity 的子类。
这里面有个坑:UmengNotifyClickActivity 这个类继承自 Activity,而不是 AppCompatActivity,如果已经是一个比较成熟的 app ,那么就很坑了,很多代码都会不兼容。譬如,我的项目…
解决:
public class PushActivity extends UmengNotifyClickActivity {
@Override
public void onMessage(Intent intent) {
super.onMessage(intent); //此方法必须调用,否则无法统计打开数
String body = intent.getStringExtra(AgooConstants.MESSAGE_BODY);
Gson gson = new Gson();
PushVo pushVo = gson.fromJson(body, PushVo.class);//对于javabean直接给出class实例
String noticeType = pushVo.extra.noticeType;
String activity = pushVo.body.activity;
switch (noticeType) {
case PushType.PIN:
FeedDetailActivity.launch(this, Integer.parseInt(pushVo.extra.pinId));
break;
case PushType.FOLDER:
FolderDetailActivity.launch(this, false, Integer.parseInt(pushVo.extra.folderId));
break;
case PushType.LINK:
KtWebEntity ktWebEntity = new KtWebEntity();
ktWebEntity.setUrl(pushVo.extra.url);
KtWebAct.Companion.launch(this, ktWebEntity);
break;
case PushType.PRODUCT:
ProductDetailActivity.launch(this, Integer.parseInt(pushVo.extra.productId));
break;
case PushType.COURSE:
CourseDetailActivity.launch(this, Integer.parseInt(pushVo.extra.courseId));
break;
case PushType.COURSELESSON:
CourseLessonDetailActivity.launch(this, pushVo.extra.courseLessonId);
break;
default:
try {
Intent intentN = new Intent(this, Class.forName(activity));
startActivity(intentN);
} catch (Exception e) {
e.printStackTrace();
}
break;
}
finish();
}
}
如上代码,我是与运营协商,以后所有系统下发的通知都指向 PushActivity 这个类,由这个类来分解具体的通知,唯一麻烦的点就在于,正常通知指向的 Activity 和 系统下发指向的 Activity,就需要注意了,这两个是不一样的。另外,在 1 中也已经说过了,如果 app 处于活着的状态,是不会走到 PushActivity 的。
sha1, sha256, md5 的命令: keytool -list -v -keystore android_key_store.jks [谈谈消息推送服务的"送达率"](http://bbs.umeng.com/thread-8933-1-1.html) [【Android平台】消息收到数变少的原因](http://bbs.umeng.com/forum.php?mod=viewthread&tid=25479&extra=page=1&filter=lastpost&orderby=lastpost)(这一篇文章里也提到了聚合SDK导致的一些数据的变化)