开发者社区> 问答> 正文

初始化成功 能获取到token和deviceID就是收不到通知

已解决

展开
收起
2018-05-31 20:49:04 1623 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    首次接入推送不成功

    • 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。
    • 2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。
    • 3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。
    • 4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。
    • 5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。
    • 6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范:
      • 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。
      修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。
    • 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。
    • 8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题:

      1.正常情况下的日志:

      正常日志

      第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。

      2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下:

      1. Intent intent = new Intent();
      2. intent.setAction("org.agoo.android.intent.action.RECEIVE");
      3. intent.setPackage(pack);//pack为应用包名
      4. intent.putExtra("type", "common-push");
      5. intent.addFlags(32);
      6. context.sendBroadcast(intent);//请使用ApplicationContext进行测试

      利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。

      3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示:

      1. <!-- 消息接收监听器 (用户可自主扩展) -->
      2. <receiver
      3. android:name=".demo.MyMessageReceiver"
      4. android:exported="true">
      5. <intent-filter>
      6. <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
      7. </intent-filter>
      8. <intent-filter>
      9. <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
      10. </intent-filter>
      11. <intent-filter>
      12. <action android:name="com.taobao.accs.intent.action.COMMAND" />
      13. </intent-filter>
      14. <intent-filter>
      15. <action android:name="com.taobao.taobao.intent.action.COMMAND" />
      16. </intent-filter>
      17. <intent-filter>
      18. <action android:name="org.agoo.android.intent.action.RECEIVE" />
      19. </intent-filter>
      20. <!--<intent-filter>-->
      21. <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />-->
      22. <!--</intent-filter>-->
      23. <!--<intent-filter>-->
      24. <!--<action android:name="android.intent.action.USER_PRESENT" />-->
      25. <!--</intent-filter>-->
      26. <!--<intent-filter>-->
      27. <!--<action android:name="android.intent.action.BOOT_COMPLETED" />-->
      28. <!--</intent-filter>-->
      29. <!--<intent-filter>-->
      30. <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />-->
      31. <!--<data android:scheme="package" />-->
      32. <!--</intent-filter>-->
      33. </receiver>

      重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。

    • 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API

    已经接入成功,突然出现异常

    • 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。
    • 2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。

      1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作

      1. 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun
      2. 12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service...
      3. 12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA
      4. 12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called.
      5. 12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared.
      6. 12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 1
      7. 12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init.
      8. 12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel...
      9. 12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:23552881

      2.常见错误:

      (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示:

      1. public class MyApplication extends Application {
      2. @override
      3. public void onCreate() {
      4. super.onCreate();
      5. if(如果是主进程) {
      6. initCloudChannel(this);
      7. }
      8. }
      9. ......
      10. }

      (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示:

      1. public class MyActivity extends Activity {
      2. @override
      3. public void onCreate(Bundle savedInstanceState) {
      4. super.onCreate(savedInstanceState);
      5. initCloudChannel(getApplicationContext());
      6. ......
      7. }
      8. ......
      9. }
    • 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持
    • 4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图:排查系统
    • 5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。
    • 6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。
    • 7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息

    问题仍未解决

    若上述步骤仍未能定位问题,可以:

    • 加入钉钉群,群号:11795523。
    • 或者提交工单,工单请选择类目移动推送

    反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填):

    1. 您的操作行为:
    2. 异常的现象:
    3. 设备的平台(AndroidiOS?),机型,系统版本号:
    4. 推送类型(消息?通知?):
    5. 推送方式(all? accountdevicetagalias?):
    6. * appkey
    7. * 消息ID(控制台可以查到):
    8. * deviceid(终端日志可以看到):
    2018-06-01 06:05:24
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载