Android客户端常见问题汇总
1. Android怎么打开云推送的调试模式?
有两种方式打开调试模式:
2. Android应用调用startWork绑定不成功(即onbind回调信息中errorcod不为0)怎么办?
- 首先请确保集成的sdk版本是官网最新的版本,新版本对绑定逻辑做了优化,进一步提升绑定成功率。
- 如果errorcode=10101,表示集成错误,请用DetectTools工具检查一下集成方式是否正确,如不正确参照修改建议修改;如未有错误提示,请打开调试模式(打开方法参考问题1),跟一下相关日志,根据日志提示进行修改。(常见集成错误问题:so文件集成不正确、manifest文件必须权限声明不正确、apikey填写不正确等)
- 如果errorcode=10001,表示网络问题,请检查手机网络连接是否正常。注意如果是小米MIUI7.0及以上的系统手机,因增加不允许后台服务长时间联网特性,请如下操作:设置-其他高级设置-电量和性能-神隐模式-关闭,就可以正常绑定和接收消息。
- 如果是其他错误码,请参考云推送官网或者用户手册中“错误码说明”进行相关问题排查。
- 如以上步骤仍不能解决问题,联系开发者群云推送技术客服协助解决问题。
3. Android应用绑定成功(onbind返回的errorcode为0)后,推送消息收不到,怎么办?
- 请确保集成的sdk版本是官网最新的版本。
- 请确认控制台或者server api推送是否成功推送,如没有推送成功,请根据对应的错误提示进行问题排查。
- 请使用DetectTools工具检查设备的pushservice和长连接是否正常。如不正常后台抹掉应用再重新startWork绑定一下即可建立(pushservice有多种保活措施,此方法为其中一种),如无法建立请检查是否是以下特殊机型:
(1)如果是华为EMUI4.0及以上系统手机,因增加关联启动机制,请如下操作:设置—权限管理—关联启动—打开pushservice优先级最高的应用(用DetectTools工具查看priority值)和自己应用的启动开关,然后把优先级最高的应用启动一下,pushservice就会建立起来,就可以正常绑定和接收消息。(已和华为厂商协商,后续版本会完全兼容)
(2)如果是小米MIUI7.0及以上的系统手机,因增加不允许后台服务长时间联网特性,请如下操作:设置-其他高级设置-电量和性能-神隐模式-关闭,然后把优先级最高的应用启动一下,pushservice就会建立起来,就可以正常绑定和接收消息。(已和小米厂商协商,后续版本会完全兼容)
(3)如果是三星部分5.0及以上系统新机型,因为增加了“自动运行”权限管理,应用在首次安装时,会弹出应用的权限管理提示,“自动运行”权限默认是关闭状态,这种情况下,非pushservice优先级最高的应用会出现绑定无回调信息返回情况,请如下操作:在三星自带的app 智能管理器 中找到:智能管理器->内存->自启动应用程序->打开pushservice优先级最高的应用(在群文件下载DetectTools工具查看priority值)和自己应用的“自动运行”开关,然后把优先级最高的应用启动一下,pushservice就会建立起来,就可以正常绑定和接收消息。
(4)如果是魅族Flyme5及以上系统手机,因增加主动防御机制,请如下操作:手机管家-权限管理-自启动管理-相互启动-打开pushservice优先级最高的应用(用DetectTools工具查看priority值)和自己应用的相互启动开关,然后把优先级最高的应用启动一下,pushservice就会建立起来,就可以正常绑定和接收消息。
- 下载云推送官网PushDemo试一下,是否能正常绑定并接收到消息。
- 如以上步骤仍不能解决问题,请提供机型、rom、appid、channelid、推送的requestid或者msgid、推送时间等信息,联系云推送技术客服协助解决问题。
- pushservice和长连接有时候出现断开是正常现象,pushsdk有多种保活措施,大部分Android设备上pushservice可以通过用户事件和系统事件自启。小米、魅族等部分特殊机型需要打开应用调用startWork接口pushservice才能自启(如果开启了应用的自启动开关则同样可以保活自启)。
- 可以通过以下方法快速启动pushservice:调用startWork接口进行绑定,绑定成功后即可建立。
- 请先检查当前设备的pushservice是否在正常运行(点击“Push运行在哪个应用中”,或者“检查一条龙”),如果没有pushservice在运行,请参考上一个问题的解决步骤。
- 如果当前的pushservice在运行,那么每个心跳时间会主动去建立长连接。也可以通过以下两种方法快速建立长连接:一是后台抹掉应用再重新startWork绑定一下即可建立;二是先解绑应用再重新绑定即可建立。
- 这个是正常现象,只要设备上pushservice和长连接正常,不管pushservice运行在哪个应用上,其他应用都能正常接收消息。
- 因为pushsdk是单实例模式,一台设备上只有一个pushservice在运行,从而达到节省手机资源和电量的目的,pushservice运行在优先级最高的应用上面,应用的优先级是sdk内部生成的,sdk版本越高优先级会越高。
7. 通知和透传消息的区别是什么?
msg_type=0表示透传消息,默认没有声音,也不上通知栏,消息收到后会进入到onMessage()回调方法中,后续逻辑由应用自行控制;msg_type=1表示通知,默认有声音,会直接在通知栏弹出展示,通知收到后会进入到onNotificationArrived()回调方法中,开发者也可以自定义样式和行为。
8. 自定义样式怎么用?
自定义样式使用方法如下:
9. 自定义行为怎么用?
自定义行为可通过以下两种方式实现:
使用控制台推送,您可以在自定义动作中填入您想要用户在点击后执行的动作,Android端SDK会把填入的字符串转换成Android Intent,通过该Intent打开对应app组件,所以填入的字符串格式必须遵循Android Intent uri格式,最简单的方法可以通过Intent方法toURI()获取,
在自定义行为里写入:
intent:#Intent;action=com.baidu.push.example.Login;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=com.baidu.push.example/.LoginActivity;end
并在AndroidManifest里LoginActivity的声明里加上:
<intent-filter>
<action android:name="com.baidu.push.example.Login" />
</intent-filter>
填入以上动作后,用户就可以在点击后自动打开PushDemo的LoginActivity页面(参考下http://push.baidu.com/issue/view/1988 )。
使用SDK推送,您需要把open_type设置为2,在pkg_content参数里写入想要用户在点击后执行的动作(参考Android通知格式:http://push.baidu.com/doc/restapi/msg_struct )。
10. 附加字段怎么使用?
附加字段使用方法如下:
- 只有Android的通知支持附加字段,您可以在推送通知时在附加字段里写入您自定义的mykey和myvalue的值。
- 在 PushMessageReceiver 类里的 onNotificationArrived(通知到达) 和 onNotificationClicked(通知点击) 方法里面,您可以获取附加字段里的mykey和myvalue的值(具体请参考官网PushDemo,自定义的内容在customContentString里获取)。
11. 通知图标为什么是白色的方块?
如果您的Android工程使用的是Android API level 21及以上的版本,您的通知图标背景必须是透明的,否则在Android5.0及以上的机器上通知图标可能会变成白色的方块。所以该问题有两种解决方案:一是把您的工程的targetSdkVersion设置成21以下;二是修改您的应用的图标为透明背景的。
12. 应用关闭或结束进程后,还能收到推送吗?
应用退至后台或结束进程,百度云推送的Service会继续在后台运行并接收推送;部分情况下使用安全软件或内存管理工具强制清理后台,Service会被清除,但Push有多种保活机制,会快速重启;在小米和魅族手机上,用户清理后台应用后必须要等到再次打开任意一个集成了PushSDK的app、调用StartWork之后,Service才会在后台启动并继续接收推送。
13. 消息到达后怎么控制跳转到Activity?
有两种方式实现:
- 客户端控制,在接收消息的Receiver里消息点击的回调方法onNotificationClicked里使用代码控制跳转,具体实现可以参考官网PushDemo;
- 服务端控制,使用自定义行为控制跳转,具体使用方法参考问题9。
14. 手机上同时安装了多个集成了pushsdk的应用会存在冲突吗?
不存在冲突。如果出现手机上有某个应用时收不到消息,卸载后能收到消息的现象,是因为部分特殊机型的限制因素,详情请参考问题3中关于特殊机型的说明及解决办法。
15. 华为代理HMS接入不对?
- 华为AppGallery Connect配置步骤中应用签名文件的SHA256需要与 app 的对应,应用打包需要使用该签名文件进行签名。
- 如果修改了项目、应用信息或者更改了开发服务配置,务必下载最新agconnect-srvices.json文件进行更新。
- 确定华为的 push 服务开通。
- HMS SDK 接入完成后可在华为控制台下发消息测试。
16. 接入华为代理成功,但消息收不到?
建议优先使用单播测试,广播、组播、批量单播会有租塞的情况,代理的推送在7月16号前支持组播、广播、批量单播推送。
17. 长连接绑定失败?
检查包名及 api_key配置
18. 厂商通知栏消息到达、点击没有回调?
厂商通知栏消息到达后没有回调,仅华为、小米有通知栏消息点击回调,且需要在控制台推送消息的高级设置中添加附加字段
19. 透传消息到达后没有回调onMessage,长连接通知栏消息到达没有回调onNotificationArrived、onNotificationClicked方法?
查看日志及 debug切换到 bdservice _v1进程
20. 消息到达后无法打开应用?
查看下发消息时open_type参数配置,(详情参考Android消息格式 http://push.baidu.com/doc/restapi/msg_struct)。控制台下发消息查看高级设置的通知操作
21. oppo卸载重装应用后,不再调起打开通知栏弹窗?
oppo请在代理绑定成功后再请求打开通知权限弹窗
22. 代理消息收不到,长连接消息收不到?
检查绑定是否成功,通知栏权限是否打开,如果都正常,联系值班人查看是否绑定代理成功。
23. 代码安全扫描、安全漏洞问题?
(参考回答:https://push.baidu.com/issue/view/3662)