前言(常见坑):
功能限制问题——>有可能引发“无回调问题”
无回调
没有任何错误信息,调用SDK函数后,无任何响应
回调错误信息
百度错误码说明
小米错误码说明
华为错误码说明
回调正确但是业务代码错误
联系反馈者,了解是否是无法收到所有推送信息,还是仅个别模块的
【如果是后者,则说明是业务问题,需要进一步了解未收到通知的信息的时间、类型或内容】
【如果是前者,则说明是推送问题,需要进入详细排查】
一、业务服务器问题排查
二、功能限制问题排查
判断当前的推送平台,通过日志记录,进行进一步判断
推送收不到或者延时问题
功能限制问题
锁屏断网导致无法收到推送,有些手机自带的省电优化会在锁屏后一段时间进入无网络模式[通过app的后台日志可以检测到app的联网状态]
回调正确但是业务代码错误
【重复推送问题】一条通知消息看过后,还会收到该信息的一次或多次重复通知 9552
第三方的PushServer在给运营在客户手机的PushService发送通知后,回收到来自PushService的“回包应答”,如果该回包丢失,则PushServer认为该用户处于离线状态,会将该通知缓存下来,等候一段时间后,再次发送;再次发送成功收到回包,则将该通知移除缓存,否则一直尝试推送。
如果出现通知一再出现的问题,很有可能是“回包应答”丢失所导致的,可将对应requestid交给第三方工作人员协助调查,PushServer是否收到应答
【即时信息查看后,又收到该信息一次通知】 1919
乐视手机推送问题 9435 待解决
【小图标问题:不显示,或者显示不对】
oppo colorOS 系统低版本上 图标不显示是由于系统配置问题导致:设置–通知中心–口袋助理–在状态栏显示,在锁屏显示
colorOS 系统高版本上 http://bbs.oppo.cn/thread-6893443-1-1.html
其实这是由于ColorOS 2.0系统纯净状态栏已设计了白名单和黑名单功能,黑名单程序是不会在状态栏显示图标的。
①白名单:是指一些常用第三方程序,如:QQ、微信、陌陌、新浪微博等社交应用是正常优先显示在状态栏。
②黑名单:是指一些非常用第三方程序及系统通知,如:截屏图标是不会显示在状态栏,只用…显示。酷狗音乐/QQ音乐在后台播放也是以…显示。(有两个或者是两个以上的程序也仅仅显示一个…图标)
这个是由系统决定的,所以还请楼楼体谅额。
vivo 图标美化—导致图标被删除
系统设置—通知栏管理—“美化图标”
“美化图标”有两个功能:
①。 统一通知栏小图标的颜色和大小
②。 白名单的应用显示小图标,非白名单的显示”…”
flyme状态栏通知图标修复Meizu notification fix是一个flyme专用的xposed模块,魅族为了统一界面风格,将大部分的应用在通知栏上的图标显示为一个图标
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
锁屏断网导致无法收到推送,有些手机自带的省电优化会在锁屏后一段时间进入无网络模式
Android应用调用startWork绑定不成功(即onbind回调信息中errorcod不为0)
Android应用绑定成功(onbind返回的errorcode为0)后,推送消息收不到
联想Lenovo_K50手机绑定不成功,返回10101,使用检测工具检测不通过
联想Lenovo_K50这款机型5.1及以上rom有问题,声明了Action但是检测不到,导致push服务不正常。计划会在下个版本单独适配,解决该问题。
是否是我们的前后台判断出问题了?之前在一些手机出现过
小米推送技术常见问题解答,收录日期2016年6月3日09:49:52
答:有如下几种情况:如果是在MIUI系统中,使用通知栏类型的消息,是不需要应用出于启动状态就能接收并弹出通知栏的。使用透传消息,则需要应用驻留后台才能接收,由于MIUI的自启动管理限制,所以如果应用被杀,是收不到透传消息的。而如果是在非MIUI系统中,是需要应用驻留后台才能接收消息的,因此如果应用被杀死并且不能后台自启动的话,是没有办法接收消息的。为了让app尽可能的驻留后台,小米推送服务SDK监听了网络变化等系统事件,并且有应用之间的互相唤醒,但这些措施并不能保证应用可以一直在后台驻留
在较老的MIUI上,有小米系统推送服务这个进程,该进程被限制接受推送的话会导致小米推送异常
MIUI的权限管理有自启动开关,这个可能会影响小米推送使用(不知道后面MIUI对小米推送的保护级别会不会下降)
联网被阻止
小米推送服务客户端需要使用5222和443两个端口,如果在公司内网,需要联系IT部门把这两个端口开放。同时需要检查应用的联网是否会被一些手机安全助手阻止。需要特别注意的是,在MIUI系统上,长连接是由“小米服务框架”这个系统应用维护的,因此需要确保这个应用的联网并没有被阻止
系统时间错误。由于小米推送服务需要使用https请求向服务器注册一个匿名账号,在次过程中如果系统时间错误,会引起https过期,导致注册不成功
遇过证书过期问题导致注册失败的情况,重启即可
较新的MIUI设置-》高级 里面有个神隐模式,可能会导致小米推送受影响
小米的自定义权限(修改为自定义包名的)被限制了 需要设置开启
为什么我的设备在调用registerPush的时候会出现no account的错误
在app第一次在一台设备上注册推送服务时,sdk会通过https请求,从小米推送服务器生成一个匿名账号。这个错误是由于这个请求失败导致的。一般请求失败常见的原因包括如下几种:1.系统时间错误。时间错误会导致https在校验证书有效期的时候,出现证书过期,导致https请求失败。2.网络原因。这个大部分的原因都是设备架了代理服务器或连了,如果排除这些原因,就检查一下app是否申请了联网权限,是否被什么安全软件阻止了登录,公司wifi是否能用,等等。3.如果是在MIUI系统上,生成匿名账号是在一个叫小米服务框架的系统app上完成的,还需要检查这个app的联网是不是在安全中心的联网控制中被手动关闭了
答:首先,确定你的接入是否正确,这个方法需要在manifest中添加这个action。 在接入正确的前提下,这个方法也不是保证一定能被调用的。在MIUI系统上,这个方法的调用需要同时满足如下两个条件:1.新版的MIUI。这个特性是在2015年才加进小米推送服务的,因此需要MIUI升级到较新的版本才能调用这个方法。2.需要应用驻留后台。小米推送服务的通知栏消息,是可以在应用不启动的前提下,就弹出通知栏消息的,在这种情况下, 由于MIUI的自启动管理,限制了应用不能在被杀后被后台唤醒,所以推送消息不能直接唤醒应用执行这个方法
答:由于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);
常见问题,收录日期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
在小米手机上,给这个应用设置:保持后台运行和允许开机启动。在部分品牌手机上也可以使用该方法解决。
PushManager.requestToken 这个是申请token的方法 是可以调用多次的 以防止申请token失败。
手机不在线时,消息会缓存起来。消息参数中有一个参数是渠道号,collapse_key,对于同一个token,如果渠道号collapse_key相同,则后面的缓存消息会覆盖之前的,手机在48小时内上线时,只能收到最后一条。
collapse_key范围是1-100,对于该token,最多能缓存100条Push消息
HMS sdK 是今后华为对外开放能力的统一入口, 会集成越来越多的华为能力进来, 里面不仅仅有push,还有账号,支付等等能力,以前老的HwPushSDK 的大小是600多K,HMS SDK当前只有200多K
减小了应用的大小,并且HMS push的优势在于会可以提高消息的到达率, 现在大部分手机上都做了各种限制,依赖HMS.APK可以有效的提高消息的到达率
目前老版还是可以用的,但建议接入新版HMS
一般只有设保护应用才能解决,是由于ROM侧的广播拦截导致的,建议使用intentUrl
在此处我们就可以注意到,上述客服人员说的“般只有设保护应用才能解决”,其实就是开放了ROM 广播的限制通道。 这是由于一些rom对应用的自启动进行了限制(对应自启动),甚至对广播的发送也进行了限制(对应受保护)。
华为手机上:
Emui3.0上,Push广播有很大概率被限制,如: Mate7 3.0版本,荣耀6plus,P7 3.0版本,4X, 4A等。
Emui3.1上,Push广播基本不被限制,但个别型号机型存在问题,如:荣耀5x等。
Emui4.0及以上,Push广播有较高概率被限制,不被限制的机型如:荣耀畅玩4C,荣耀畅玩4X,Mate S,P8 MAX等。
Emui4.1 , ROM升级到了最新版本的(80%已升),通知消息不走广播,不会被限制,透传消息走广播,会被限制。
Emui5.0以上 ,通知消息不走广播,不会被限制,透传消息走广播,会被限制。
如广播被限制,需要将应用设为开机启动项。所以对于及时性或到达率要求非常高的应用,我们建议应用要考虑替代方案。
后续Push版本,华为将采用新的设计方案,解决被限制的问题,但发布计划待定。
将应用设置为开机自启动,并设置为受保护应用 “设置-》应用管理-》找到自己的app”