开发者社区> 问答> 正文

【移动推送】Android推送失败排查步骤是什么?

已解决

【移动推送】Android推送失败排查步骤是什么?

展开
收起
EMAS支持组 2022-09-15 12:29:54 547 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    首次接入推送不成功

    首次接入推送不成功时,您可以参考以下步骤,定位并解决问题:

    检查推送通道是否初始化成功,确保您在初始化时,注册的onSuccess回调函数能被成功调用。

    如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提示,检查appKey、appSecret等相关配置。

    如果发送的是消息,则不会在客户端通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。

    使用官方Demo进行测试,排除自身配置问题。使用官方Demo时,需要设置您自己的appKey、appSecret并修改包名。如果使用官方Demo测试无问题,请确认下自己的实现和Demo的区别。

    如果您的设备集成了阿里云 移动推送Android SDK,设备上日志显示初始化成功,控制台显示设备在线,但是出现推送失败问题,请检查参数是否符合规范。 您APP的versionName参数和versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。

    说明:修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。

    如果集成成功,请向设备推送通知,发现通知显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。如果自定义接收器没有收到数据,请检查自定义接收器是否注册。

    推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在客户端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题:

    下图是正常情况下的日志,第一条handleRemoteMessage日志说明消息已经到达客户端,第二条AgooMessageReceiver日志表明用户自定义receiver已经接收到广播。 image.png

    如果只有第一条日志,未出现第二条日志,则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下,利用该代码给您的自定义receiver发送广播,测试receiver是否可以收到对应广播,如果收不到则说明存在广播拦截情况。

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

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

    <!-- 消息接收监听器 (用户可自主扩展) -->
          <receiver
              android:name=".demo.MyMessageReceiver"
              android:exported="true">
              <intent-filter>
                  <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
              </intent-filter>
              <intent-filter>
                  <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
              </intent-filter>
              <intent-filter>
                  <action android:name="com.taobao.accs.intent.action.COMMAND" />
              </intent-filter>
              <intent-filter>
                  <action android:name="com.taobao.taobao.intent.action.COMMAND" />
              </intent-filter>
              <intent-filter>
                  <action android:name="org.agoo.android.intent.action.RECEIVE" />
              </intent-filter>
              <!--<intent-filter>-->
                  <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />-->
              <!--</intent-filter>-->
              <!--<intent-filter>-->
                  <!--<action android:name="android.intent.action.USER_PRESENT" />-->
              <!--</intent-filter>-->
              <!--<intent-filter>-->
                  <!--<action android:name="android.intent.action.BOOT_COMPLETED" />-->
              <!--</intent-filter>-->
              <!--<intent-filter>-->
                  <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />-->
                  <!--<data android:scheme="package" />-->
              <!--</intent-filter>-->
          </receiver>
    

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

    设备绑定标签后,服务端按该标签推送,15分钟后才能生效送达,请参见Android标签API

    若您是Android 8以上系统,请参见Android 8.0以上设备接收不到推送通知

    成功接入后出现异常

    推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知的手机设置情况,是否将推送App的通知弹出进行了限制。

    如果出现应用处于前台可以收到推送,应用在后台后无法接收到推送的情况。请检查channel进程是否执行了推送初始化操作。

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

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

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

    public class MyApplication extends Application {
       @override
       public void onCreate() {
           super.onCreate();
           if(XXX) {
               initCloudChannel(this);
           }
       }
       ......
    }
    

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

    public class MyActivity extends Activity {
       @override
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           initCloudChannel(getApplicationContext());
           ......
       }
       ......
    }
    

    部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用已结束,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关信息请参见小米和华为系统推送支持。

    利用推送排查系统排错: 获取设备deviceID,对deviceID单独推送一条,登录移动研发平台EMAS,单击移动推送,选择对应的项目,然后单击排查工具即可。 image.png

    如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道,即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。 使用测试环境appKey测试正常,切换成正式环境appKey(测试和正式环境appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试环境App重新安装正式环境App。 从V2.+版本升级到V3.+版本后接收不到推送。

    由于V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参见移动推送Android SDK从2.+版本升级到3.+版本后收不到通知/消息。


    更多官方信息

    EMAS官网介绍:https://www.aliyun.com/product/emas

    Devops:https://www.aliyun.com/product/emascrash/mobile_devops

    移动热修复:https://www.aliyun.com/product/hotfix

    移动测试:https://www.aliyun.com/activity/emas/mqcexpert

    移动推送:https://www.aliyun.com/product/cps

    HTTPDNS:https://www.aliyun.com/product/httpdns

    EMAS 控制台: https://emas.console.aliyun.com/products

    2022-09-15 12:58:38
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
基于阿里巴巴以及合作伙伴的最佳实践,围绕大前端、云原生领域的相关技术热点(小程序、Serverless、应用中间件、低代码、DevOps)展开行业探讨,与开发者一起探寻云原生时代应用研发的新范式。
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载