赞
踩
友盟推送和阿里云移动推送,都属于阿里系的产品,在使用上很大一部分还是很相似的,阿里云将移动推送、移动热修复、移动测试、移动数据分析和移动用户反馈集成到了一块,所有的远程依赖也都是集成在一起了,然而友盟的数据统计、概况统计、分享和推送是分开的。整体上个人觉得阿里云的接入要比友盟明了简单。
下面我们一起来看看阿里云移动推送和友盟推送的有哪些注意事项吧!
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:
4. 友盟推送点击回调方法是放在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来进行定向推送的话,可以使用增加、删除、查询别名的方式来绑定用户:
详细使用代码如下:
- //别名增加,将某一类型的别名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后,需要在华为应用市场后台配置消息回执才可以正常取到通过华为通道下发消息的收到数等数据,配置成功后,消息回执位置会显示如下信息:操作方法:
https://agoo-ack.m.taobao.com/hw/
- -----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的适配做的比阿里的好。后续再有注意点我会继续完善,有指正和添加之处,请留言评论告知我,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。