友盟推送和阿里云移动推送使用注意事项、不同点比较

友盟推送和阿里云移动推送,都属于阿里系的产品,在使用上很大一部分还是很相似的,阿里云将移动推送、移动热修复、移动测试、移动数据分析和移动用户反馈集成到了一块,所有的远程依赖也都是集成在一起了,然而友盟的数据统计、概况统计、分享和推送是分开的。整体上个人觉得阿里云的接入要比友盟明了简单。

下面我们一起来看看阿里云移动推送和友盟推送的有哪些注意事项吧!

一. 阿里云推送的注意事项

1. appKey, appSecret一定要配置在AndroidManifest文件中,如果你是EMAS统一接入的话,需要在aliyun-emas-services.json文件中统一配置,并将json文件放到应用根目录下。

3. 采用emas统一接入时,请勿开启资源混淆(非代码混淆),若必须采用资源混淆,请按原来传参方式接入。

4. 将aliyun-emas-services.json文件放在根目录下以后,如果提示: “File aliyun-emas-services.json is missing. The Emas Services Plugin cannot function without it”.请确保您将控制台下载的aliyun-emas-services.json文件已经正确放置到app/目录下。

5. 一个App会用到很多第三方,如果遇到以下问题:​ Error:Execution failed for task ‘:app:processDebugManifest’.​ Manifest merger failed with multiple errors, see logs.这样的话就需要在Gradle Console中build run,查看具体错误。

主要由于不同sdk设置的allowBackup属性不同,建议在Manifest.xml中添加:

        <Application
        ....
        android:allowBackup="false"
        tools:replace="android:allowBackup"/>

6. 添加阿里云推送依赖后如果出现一下错误:

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.

请在Project 根目录的gradle.properties文件中添加:

android.useDeprecatedNdk=true

7. 即使是Maven库快速集成,也建议将推送所需要的权限固定权限加上

    <!-- 阿里云推送相关权限 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.REORDER_TASKS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

8. 接入辅助通道和辅助弹窗的话,辅助通道的sdk初始化代码放在你application.onCreate()方法中初始通道。注意:辅助通道注册务必在Application中执行且放在推送SDK初始化代码之后,否则可能导致辅助通道注册失败

9. 辅助通道需要在各个厂商的应用市场配置appKey, appSecret,具体可以参考:移动推送辅助通道配置

10. 针对安卓8.0以上,NotificationChannel需要设置channelId,这样才能收到推送:

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                // 通知渠道的id
                String id = "1";
                // 用户可以看到的通知渠道的名字.
                CharSequence name = "notification channel";
                // 用户可以看到的通知渠道的描述
                String description = "notification description";
                int importance = NotificationManager.IMPORTANCE_HIGH;
                NotificationChannel mChannel = new NotificationChannel(id, name, importance);
                // 配置通知渠道的属性
                mChannel.setDescription(description);
                // 设置通知出现时的闪灯(如果 android 设备支持的话)
                mChannel.enableLights(true);
                mChannel.setLightColor(Color.RED);
                // 设置通知出现时的震动(如果 android 设备支持的话)
                mChannel.enableVibration(true);
                mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
                //最后在notificationmanager中创建该通知渠道
                mNotificationManager.createNotificationChannel(mChannel);
            }

以上就是阿里云移动推送的主要注意事项,接下来我们友盟推送的注意事项。

二. 友盟推送的注意事项

1. 当友盟的依赖都加入并且初始化完成以后,需要在所有的Activity 的onCreate 方法或在应用的BaseActivity的onCreate方法中添加:

PushAgent.getInstance(context).onAppStart();

该方法是【友盟+】Push后台进行日活统计及多维度推送的必调用方法,请务必调用!

2. 在【友盟+】消息推送服务Push后台使用“测试模式”先要先获取到手机的deviceToken, 然后填写获取到的deviceToken,将该设备添加为测试设备,测试模式只能针对填写deviceToken的设配进行测试,如果在测试模式使用全员发送的话,发送结果会报“筛选结果为空”。

3. 在友盟的管理后台一定要填写应用的包名和服务器的IP:

  1. 友盟推送点击回调方法是放在Application里的,如果在Activity中调用,当应用进程关闭情况下,设置无效。UmengNotificationClickHandler是在BroadcastReceiver中被调用,因此若需启动Activity,需为Intent添加Flag:Intent.FLAG_ACTIVITY_NEW_TASK,否则无法启动Activity。

UmengNotificationClickHandler有四个方法:openActivity、launchApp、openUrl和dealWithCustomAction,分别是打开具体的Activity、唤醒App、跳转到url链接和自定义的点击事件。

具体的代码如下:

UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {
      //打开activity
      @Override
      public void openActivity(Context context, UMessage uMessage) {
      }

      //传递链接
      @Override
      public void openUrl(Context context, UMessage uMessage) {
        System.out.println("传递的url:" + uMessage.url);
        Intent intent = new Intent(context, WebViewMineActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("url", uMessage.url);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
      }

      //打开App
      @Override
      public void launchApp(Context context, UMessage uMessage) {
        UMessage uMessage1 = uMessage;
        if (uMessage != null && uMessage.extra != null) {
          String jumpUrl = uMessage.extra.get("url");
          PushJumpUtils.pushJump(jumpUrl, context, isAppRunning());
        }else {
          if (!isAppRunning()){
            Intent intent = new Intent(context, AppStartActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            context.startActivity(intent);
          }
        }
      }

      //自定义点击事件
      @Override
      public void dealWithCustomAction(Context context, UMessage msg) {
      }
    };
    mPushAgent.setNotificationClickHandler(notificationClickHandler);
  }

5. 设置通知栏展示的数量

当多条通知展示在状态栏中,当通知栏显示数目大于设置值,此时再有新通知到达时,会把旧的一条通知隐藏。

public void setDisplayNotificationNumber(int number);

(1)参数number可以设置为0~10之间任意整数。当参数为0时,表示不合并通知;

(2)当该方法存在多次调用时,一最后一次调用时的设置为准。

6. 通过用户的手机号或者userId来进行定向推送的话,可以使用增加、删除、查询别名的方式来绑定用户:

  • 若要使用新的alias,请先调用deleteAlias接口移除掉旧的alias,再调用addAlias添加新的alias;
  • 设置alias时需要指定该alias对应的类型(alias type),例如:自有id、新浪微博、腾讯微博、豆瓣等;
  • alias名称请不要使用URLEncode等变换处理,请使用原生字符串;
  • alias的绑定是需要获取到deviceToken为前提的,最好是在注册即enable的回调接口中进行alias的绑定,此时可以保证获取到deviceToken;
  • alias原有的addExclusiveAlias和removeAlias接口均已废弃,请使用新接口.

详细使用代码如下:

//别名增加,将某一类型的别名ID绑定至某设备,老的绑定设备信息还在,别名ID和device_token是一对多的映射关系
mPushAgent.addAlias("别名ID", "自定义类型", new UTrack.ICallBack() {

    @Override
    public void onMessage(boolean isSuccess, String message) {

    }

});
//别名绑定,将某一类型的别名ID绑定至某设备,老的绑定设备信息被覆盖,别名ID和deviceToken是一对一的映射关系
mPushAgent.setAlias("别名ID", "自定义类型", new UTrack.ICallBack() {

    @Override
    public void onMessage(boolean isSuccess, String message) {

    }

});
//移除别名ID
mPushAgent.deleteAlias("别名ID", "自定义类型", new UTrack.ICallBack() {

    @Override
    public void onMessage(boolean isSuccess, String message) {

    }

});

7. 集成华为厂商通道SDK后,需要在华为应用市场后台配置消息回执才可以正常取到通过华为通道下发消息的收到数等数据,配置成功后,消息回执位置会显示如下信息:


操作方法:

  1. 进入华为Push服务后台,点击“操作-修改”进入设置PUSH服务信息页面
  2. 在“消息回执”区域中,选择开通回执,并分别在“回调地址”和“HTTPS证书”里输入以下内容
  • 回调地址:
https://agoo-ack.m.taobao.com/hw/
  • HTTPS证书:
-----BEGIN CERTIFICATE-----
MIIEaTCCA1GgAwIBAgILBAAAAAABRE7wQkcwDQYJKoZIhvcNAQELBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw
MDBaFw0yNDAyMjAxMDAwMDBaMGYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
YWxTaWduIG52LXNhMTwwOgYDVQQDEzNHbG9iYWxTaWduIE9yZ2FuaXphdGlvbiBW
YWxpZGF0aW9uIENBIC0gU0hBMjU2IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDHDmw/I5N/zHClnSDDDlM/fsBOwphJykfVI+8DNIV0yKMCLkZc
C33JiJ1Pi/D4nGyMVTXbv/Kz6vvjVudKRtkTIso21ZvBqOOWQ5PyDLzm+ebomchj
SHh/VzZpGhkdWtHUfcKc1H/hgBKueuqI6lfYygoKOhJJomIZeg0k9zfrtHOSewUj
mxK1zusp36QUArkBpdSmnENkiN74fv7j9R7l/tyjqORmMdlMJekYuYlZCa7pnRxt
Nw9KHjUgKOKv1CGLAcRFrW4rY6uSa2EKTSDtc7p8zv4WtdufgPDWi2zZCHlKT3hl
2pK8vjX5s8T5J4BO/5ZS5gIg4Qdz6V0rvbLxAgMBAAGjggElMIIBITAOBgNVHQ8B
Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUlt5h8b0cFilT
HMDMfTuDAEDmGnwwRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0
dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCow
KKAmoCSGImh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYB
BQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNv
bS9yb290cjEwHwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZI
hvcNAQELBQADggEBAEYq7l69rgFgNzERhnF0tkZJyBAW/i9iIxerH4f4gu3K3w4s
32R1juUYcqeMOovJrKV3UPfvnqTgoI8UV6MqX+x+bRDmuo2wCId2Dkyy2VG7EQLy
XN0cvfNVlg/UBsD84iOKJHDTu/B5GqdhcIOKrwbFINihY9Bsrk8y1658GEV1BSl3
30JAZGSGvip2CTFvHST0mdCF/vIhCPnG9vHQWe3WVjwIKANnuvD58ZAWR65n5ryA
SOlCdjSXVWkkDoPWoC209fN5ikkodBpBocLTJIg1MGCUF7ThBCIxPTsvFwayuJ2G
K1pp74P1S8SqtCr4fKGxhZSM9AyHDPSsQPhZSZg=
-----END CERTIFICATE-----

点击“测试回执”,提示“测试成功”则表示配置成功

以上的配置一定要配置,否则收不到华为厂商渠道的推送,并且华为厂商渠道推送的消息是有延时的,如果发送十分之后还未收到推送,那就真的收不到了,我这边咨询华为官方,华为厂商渠道推送到达率为91%,我自己实际测试没有这么高。

8. 友盟推送和阿里云系第三方的依赖冲突

关于依赖冲突这个真的很头疼,友盟官方给的解决方案是手动接入,我自己试了一下确实可以解决问题,但是比较麻烦,so文件可能会报重复错误,所以我采用在阿里云第三方过滤重复依赖。我项目中主要是热修复和友盟推送依赖冲突,我是在热修复中过滤依赖冲突的:

compile('com.aliyun.ams:alicloud-android-hotfix:3.2.8') {
        exclude(module: 'alicloud-android-ut')
        exclude(module: 'alicloud-android-utdid')
        exclude(module: 'alicloud-android-utils')
    }

以上就是阿里云移动推送和友盟推送的注意事项,要说到两者的不同点,最直观的就是,阿里云将所有的功能都集中到了一起,使用起来更加方便;友盟是推送界的元老,推送渠道共享,也是它的一大亮点,同时针对安卓8.0的适配做的比阿里的好。后续再有注意点我会继续完善,有指正和添加之处,请留言评论告知我,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容