打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
(4.2.12.3)浅谈第三方推送[bug查询]:百度推送、小米推送、华为推送

前言(常见坑):

  1. 小心是AndroidManifest文件被别人改动过。。。。。。
  2. 升级推送SDK时往往可能会引入新问题。。。。。除非有重大更新,否则可以延迟2个版本进行升级
  3. 为了更好应对出问题的用户和测试人员。最好给出推送解决的临时方案,然后再尝试解决问题。
  4. 大部分推送问题都是被杀后自启动失败,不同手机系统不同的坑,好好积累。目前大头是魅族,乐视,三星。 (小米和华为已经有定制的推送支持)

1-bug类型

  • 功能限制问题——>有可能引发“无回调问题”

    • 手机系统限制软件的通知或自启动
    • 手机的第三方管理[自启动管理,省电管理,通知栏显示限制和一键清理动作等]
    • 应用中关闭了通知、震动,或设置了免打扰时段
  • 无回调
    没有任何错误信息,调用SDK函数后,无任何响应

    • 往往是PushService服务未启动或回收后不能自启动导致,往往由“功能限制问题”导致
  • 回调错误信息
    百度错误码说明
    小米错误码说明
    华为错误码说明

  • 回调正确但是业务代码错误

    • 往往是前后台判断有问题

2-排查过程

2.1-收不到通知栏通知的排查流程

  • 判断当前的SDK,通过日志记录
  • 业务服务器问题排查
    • 电话联系反馈者,了解未收到通知的信息的时间、类型或内容
    • 根据了解到的信息联系后台服务者,查询是否是有次推送的requestid【没有,则说明是业务服务器未推送;有的话进入下一步排查】
  • 功能限制问题排查
    • 判断是否是手机设置关闭了应用的通知或自启动功能
    • 判断是否是手机安装的第三方管理软件关闭了应用的通知或自启动功能[尤其注意root机]
    • 是否是在应用中“设置”中关闭了通知、震动、声音等,或者设置了免打扰时段,或者登陆了网页版应用
    • 如果是群聊信息,查看是否关闭了群聊信息通知开关
  • 本地信息排查
    • 根据requestid,进入第三方服务后台,或者在相关聊天群,联系第三方技术支持人员,查询该requestid的事件日志
    • 该requestid有事件回馈,证明信息达到了app中,可能是
      (1) app业务逻辑有bug,导致通知未弹出(譬如前后台判断,声音设置等)。[排查方法:检测日志,是否收到该信息]
      (2) 同时确认[功能问题排查]
      (3) 第三方PushService未正确发送广播,未调用我们的Receiver回调。[排查方法:检测日志,是否收到该信息]
    • 该requestid没有事件回馈,说明信息未到达app中,日志中必然没有相关信息
      (1) 所智能选择的SDK的PushService服务未启动,或者被回收后不能自动重启【该部分在下面的分类bug中详细描述】

3-通用注意事项

  • 推送收不到或者延时问题

    • pushService不能启动或回收后不能自启导致的
  • 功能限制问题

    • 手机系统自带或者第三方“自启动管理” 导致PushService不能正常自启动
    • 手机系统自带或者第三方“通知栏显示限制管理” 导致通知栏信息不能正常显示
    • 手机系统自带或者第三方“一键清理动作” 导致PushService不能正常自启动
    • 手机系统自带或者第三方“省电管理” 导致PushService不能正常自启动
    • 应用内的“我->设置->消息通知”里面的推送是否被关闭了
    • 应用内的“群聊->消息通知”的信息通知是否被关闭了
  • 锁屏断网导致无法收到推送,有些手机自带的省电优化会在锁屏后一段时间进入无网络模式[通过app的后台日志可以检测到app的联网状态]

  • 回调正确但是业务代码错误

    • 是否是我们的前后台判断有问题
  • 【重复推送问题】一条通知消息看过后,还会收到该信息的一次或多次重复通知 9552
    第三方的PushServer在给运营在客户手机的PushService发送通知后,回收到来自PushService的“回包应答”,如果该回包丢失,则PushServer认为该用户处于离线状态,会将该通知缓存下来,等候一段时间后,再次发送;再次发送成功收到回包,则将该通知移除缓存,否则一直尝试推送。
    如果出现通知一再出现的问题,很有可能是“回包应答”丢失所导致的,可将对应requestid交给第三方工作人员协助调查,PushServer是否收到应答

  • 【即时信息查看后,又收到该信息一次通知】 1919

    • 场景:用户在即时聊天界面,收到某条信息A并查看,而后将应用home到后台,在某些状况下,信息A的通知会再次出现在通知栏。
    • 可能性原因1:.第三方推送数据和即时聊天的数据通道是分离的,服务器在推送信息时,会同时向我们应用的信息通道和第三方的推送通道同时推出信息。如果我们通道的信息先到,而第三方推送的通道由于某些原因导致通知延迟,就会出现用户“已阅读该信息,并迅速将应用后台”并且“延迟的第三方通知到达”时,我们应用判断应用在后台,从而将信息A再次显示在通知栏。
      目前可行的方法是,将本地各种类型的通知信息加入已阅标志位(已读?已到?),并缓存已阅信息的requestid;待第三方通知再次下发到app,判断是否该通知已被阅读,是的话就不再显示。【待实现】
  • 乐视手机推送问题 9435 待解决

    • 应用和推送都挂了,是不是这个letv的手机系统自带了什么后台限制

4-百度注意事项

Android客户端常见问题汇总,收录日期2016年6月3日09:49:52

  • 应用关闭或结束进程后,还能收到推送吗?
    应用退至后台或结束进程,百度云推送的Service会继续在后台运行并接收推送;部分情况下使用安全软件或内存管理工具强制清理后台,Service会被清除,但Push有多种保活机制,会快速重启;在小米和魅族手机上,用户清理后台应用后必须要等到再次打开任意一个集成了PushSDK的app、调用StartWork之后,Service才会在后台启动并继续接收推送。

  • Android应用调用startWork绑定,onbind无回调信息返回
    往往是由于PushService不能启动或回收后不能自启动导致,原因在于“功能限制问题”。
    关注各个系统上自带的或第三方的“功能限制问题”自启动管理,省电管理,通知栏显示限制和一键清理动作等
    有其注意,百度推送内置链式推送规则,在启动PushService时,SDK会获取到当前手机中所有继承百度推送的app,并根据优先级由大到小的顺序组成顺序链条,并按照该链条顺序启动对应的PushServices(实质上,它们使用同一交互通道)。在启动过程中,链条任意位置的一个app应设置自启动限制或相互启动限制导致PushService不能启动,将会导致链条后面的app也不能唤醒PushService

    • 系统管理问题
      【1】 如果是魅族Flyme5及以上系统手机,因增加主动防御机制,请如下操作:手机管家-权限管理-自启动管理-相互启动-打开pushservice优先级最高的应用(用DetectTools工具查看priority值)和自己应用的相互启动开关,请参考http://push.baidu.com/issue/view/1691
      【2】如果是华为EMUI4.0及以上系统手机(华为mate8),因增加关联启动机制,请如下操作:设置—权限管理—关联启动—打开pushservice优先级最高的应用(用DetectTools工具查看priority值)和自己应用的启动开关。(已和华为厂商协商,下个版本会完全兼容)
      【3】如果是三星部分5.0及以上系统新机型,因为增加了“自动运行”权限管理,应用在首次安装时,会弹出应用的权限管理提示,“自动运行”权限默认是关闭状态,这种情况下,非pushservice优先级最高的应用会出现绑定无回调信息返回情况,请如下操作:在三星自带的app 智能管理器 中找到:智能管理器->内存->自启动应用程序->打开pushservice优先级最高的应用(在群文件下载DetectTools工具查看priority值)和自己应用的“自动运行”开关。(已和三星厂商协商,后续版本会完全兼容)
      【4】如果非以上特殊机型问题,请在云推送官网常见问题或者群文件里面下载DetectTools工具,打开调试模式,跟一下相关日志。(SDK4.6.0及以后的版本日志输出统一使用”BDPushSDK”这个TAG开头,方便查看日志)
      【5】如以上步骤仍不能解决问题,联系开发者群云推送技术客服协助解决问题。
    • 第三方管理问题
  • 锁屏断网导致无法收到推送,有些手机自带的省电优化会在锁屏后一段时间进入无网络模式

  • Android应用调用startWork绑定不成功(即onbind回调信息中errorcod不为0)

    • 如果errorcode=10101,表示集成错误,请用DetectTools工具检查一下集成方式是否正确,如不正确参照修改建议修改,如未有错误提示,请用DetectTools工具打开调试模式,跟一下相关日志,根据日志错误提示进行修改。(常见集成错误问题:so文件集成不正确、manifest文件必须权限声明不正确、apikey设置不正确等)
    • 如果errorcode=10001,表示网络问题,请检查手机网络连接是否正常。注意如果是小米MIUI7.0及以上的系统手机,因增加不允许后台服务长时间联网特性,请如下操作:设置-其他高级设置-电量和性能-神隐模式-关闭。(已和小米厂商协商,后续版本会完全兼容)
    • 如果是其他错误码,请参考云推送官网或者用户手册中“错误码说明”进行相关问题排查。
    • 如以上步骤仍不能解决问题,联系开发者群云推送技术客服协助解决问题。
  • Android应用绑定成功(onbind返回的errorcode为0)后,推送消息收不到

    • 云推送官网常见问题或者群文件里面下载DetectTools工具,检查一下应用集成方式是否正确,如不正确参照修改建议修改。
    • 用DetectTools工具检查一下设备当前长连接和pushservice是否正常,如不正常退出应用清掉进程重新绑定一下。
    • 用DetectTools工具打开调试模式,跟一下相关日志(PushSDK4.6.0及以后的版本日志输出统一使用”BDPushSDK”这个TAG开头,方便查看日志)。
    • 用云推送官网PushDemo试一下,是否能正常绑定并接收到消息。
    • 如以上步骤仍不能解决问题,请提供appid、channelid、requestid以及推送的具体时间,联系云推送技术客服协助解决问题。
  • 联想Lenovo_K50手机绑定不成功,返回10101,使用检测工具检测不通过
    联想Lenovo_K50这款机型5.1及以上rom有问题,声明了Action但是检测不到,导致push服务不正常。计划会在下个版本单独适配,解决该问题。

  • 是否是我们的前后台判断出问题了?之前在一些手机出现过

5-小米注意事项

小米推送技术常见问题解答,收录日期2016年6月3日09:49:52

  • 当我的应用被杀掉之后,还能否接收到小米推送服务的消息?

答:有如下几种情况:如果是在MIUI系统中,使用通知栏类型的消息,是不需要应用出于启动状态就能接收并弹出通知栏的。使用透传消息,则需要应用驻留后台才能接收,由于MIUI的自启动管理限制,所以如果应用被杀,是收不到透传消息的。而如果是在非MIUI系统中,是需要应用驻留后台才能接收消息的,因此如果应用被杀死并且不能后台自启动的话,是没有办法接收消息的。为了让app尽可能的驻留后台,小米推送服务SDK监听了网络变化等系统事件,并且有应用之间的互相唤醒,但这些措施并不能保证应用可以一直在后台驻留

  • 在较老的MIUI上,有小米系统推送服务这个进程,该进程被限制接受推送的话会导致小米推送异常

  • MIUI的权限管理有自启动开关,这个可能会影响小米推送使用(不知道后面MIUI对小米推送的保护级别会不会下降)

  • 联网被阻止

小米推送服务客户端需要使用5222和443两个端口,如果在公司内网,需要联系IT部门把这两个端口开放。同时需要检查应用的联网是否会被一些手机安全助手阻止。需要特别注意的是,在MIUI系统上,长连接是由“小米服务框架”这个系统应用维护的,因此需要确保这个应用的联网并没有被阻止

  • 如果本地时间差异太多,在一些MIUI系统上会导致注册失败

系统时间错误。由于小米推送服务需要使用https请求向服务器注册一个匿名账号,在次过程中如果系统时间错误,会引起https过期,导致注册不成功

  • 遇过证书过期问题导致注册失败的情况,重启即可

  • 较新的MIUI设置-》高级 里面有个神隐模式,可能会导致小米推送受影响

  • 小米的自定义权限(修改为自定义包名的)被限制了 需要设置开启

  • 为什么我的设备在调用registerPush的时候会出现no account的错误

在app第一次在一台设备上注册推送服务时,sdk会通过https请求,从小米推送服务器生成一个匿名账号。这个错误是由于这个请求失败导致的。一般请求失败常见的原因包括如下几种:1.系统时间错误。时间错误会导致https在校验证书有效期的时候,出现证书过期,导致https请求失败。2.网络原因。这个大部分的原因都是设备架了代理服务器或连了vpn,如果排除这些原因,就检查一下app是否申请了联网权限,是否被什么安全软件阻止了登录,公司wifi是否能用,等等。3.如果是在MIUI系统上,生成匿名账号是在一个叫小米服务框架的系统app上完成的,还需要检查这个app的联网是不是在安全中心的联网控制中被手动关闭了

  • 为什么onNotificationMessageArrived方法没被调用到?

答:首先,确定你的接入是否正确,这个方法需要在manifest中添加这个action。 在接入正确的前提下,这个方法也不是保证一定能被调用的。在MIUI系统上,这个方法的调用需要同时满足如下两个条件:1.新版的MIUI。这个特性是在2015年才加进小米推送服务的,因此需要MIUI升级到较新的版本才能调用这个方法。2.需要应用驻留后台。小米推送服务的通知栏消息,是可以在应用不启动的前提下,就弹出通知栏消息的,在这种情况下, 由于MIUI的自启动管理,限制了应用不能在被杀后被后台唤醒,所以推送消息不能直接唤醒应用执行这个方法

  • 为什么我在onNotificationMessageClicked方法中的startActivity不能调起目标界面?

答:由于onNotificationMessageClicked中传入的context是application context,本身没有activity栈,因此需要在创建activity时候加入NEW_TASK的flag: Intent i = new Intent(context, MyActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i);

  • 收到通知点击推送消息,没任何反应
    • 检测onNotificationMessageClicked事件在日志中是否触发
    • app被回收,小米推送走的是系统推送,收到推送后实际上app的所有进程并没有被初始化,需要等待用户点击通知栏推送。
      点击后进行:
      1. 小米系统调用并唤醒口app;
      2. 然后初始化app进程;
      3. 最后再到解析推送数据进行跳转。
        导致较长时间无响应的原因就是第1步和第2步慢
        修复该BUG,需要解决app启动慢的问题

6-华为注意事项

常见问题,收录日期2016年6月3日09:49:52

  • 是否是我们的前后台判断出问题了?之前也在华为的手机出现过
  • 华为系统设置也有自启动管理等,可能会影响华为推送使用(不知道后面华为系统对华为推送的保护级别会不会下降)
  • 如果开启了省电模式,锁屏后一段时间会进入无网络模式

  • 将app进程杀掉后,发送消息无法拉起该app

push通道在的话发的消息是可以将强行停止的拉起来的,不过要求API level 12以上。Intent.FLAG_INCLUDE_STOPPED_PACKAGES,发广播时这个标记为可以将强行停止的拉起来,Android 3.1以上才支持。确认push在运行,发送消息即可强行拉起,进程名类似:com.huawei.pushtest:pushservice

  • 在小米手机上申请不到token

在小米手机上,给这个应用设置:保持后台运行和允许开机启动。在部分品牌手机上也可以使用该方法解决。

  • 是否可以多次调用 PushManager.requestToken

PushManager.requestToken 这个是申请token的方法 是可以调用多次的 以防止申请token失败。

  • 为什么给手机发了多条消息,手机上线后,只收到一条?

手机不在线时,消息会缓存起来。消息参数中有一个参数是渠道号,collapse_key,对于同一个token,如果渠道号collapse_key相同,则后面的缓存消息会覆盖之前的,手机在48小时内上线时,只能收到最后一条。
collapse_key范围是1-100,对于该token,最多能缓存100条Push消息

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android消息推送:第三方消息推送平台详细解析
我们找到了,让安卓手机续航延长50%的方法
小米最新手机系统MIUI12月底推送,多款老机型均可升级!
【MIUI_信息通知】小米手机的信息通知推送功能要正确设置好才可以
这才是真正好用的推送—推送服务 来自 MIUI金凡丶
为什么大家都说小米系统好用?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服