Umeng 多渠道集成坑点记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cjh_android/article/details/80403503

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)。
华为:

  1. 注册成功后会在tag:HuaWeiReceiver下面打印log: 获取token成功,token= xxxxxxxxxxxxxxxxxxxxxxx接收到华为消息则会打印log: HuaWeiReceiver,content= xxxxxxxxxxxxxxxxxxxxxxx

魅族:

  1. 注册成功后会在tag:tag:MeizuPushReceiver下面打印log: onRegister, pushId=xxxxxxxxxxxxxxxxxxxxxxx
  2. 请在drawable目录下添加一个图标,命名为stat_sys_third_app_notify.png,建议尺寸64px * 64px,图标四周留有透明。若不添加此图标,可能在部分魅族手机上无法弹出通知。

另外:

  1. 当你在后台发送时,需要点选 系统下发 的选项,否则无法完成系统下发。而且,如果发送的通知时,app 活着,那么走的并不是系统下发,只有友盟认定 app 离线了,才会走系统下发通道。
  2. 如果你想要完成系统下发,那么你的目标 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导致的一些数据的变化)

没有更多推荐了,返回首页