您的位置:首页 > 其它

友盟 有关设备离线和在线问题

2016-04-26 15:13 274 查看
本文转载自:有关设备离线和在线问题

[align=left]有关设备离线,在线,设备未注册以及设备状态不存在等状态,请参考下文:Android查询设备状态,几种状态的解释说明[/align]
[align=left]判断设备长连是否在线应该在在友盟推送后台--工具--设备状态查询里面查询,如下图:[/align]



[align=left]       如果设备长连在线仍然没有收到:可以查询下,设备状态有个更新时间,如下图:[/align]



[align=left]       统计设备长连在线时间(最后更新时间)有时是有一些延时的。有可能最后更新时间时设备在线,但当前设备已经是离线状态了。[/align]

[align=left]       设备长连在线只和三个条件有关:1、网络环境稳定良好     2、pushservice运行3、push service连接上友盟服务器。[/align]

[align=left]       判断pushservice是否运行,要在设定--应用程序管理--运行中进行查看进程,如下图:[/align]



[align=left]       你也可以通过 adb shell ps | grep com.umeng.message.example 这个指令查询到友盟push的进程,如下图:[/align]



[align=left]       说到pushservice,我们就要引入“宿主”的概念了。[/align]
[align=left]       由于pushSDK在设计上采取了多路复用的技术方案,即设备上多个集成了友盟消息推送SDK的App会共用一条长连通道, push service会挂靠在某一个App上,此时长连service所挂靠的App称为“宿主”。[/align]
[align=left]       综上,若自己的App不是宿主,而是挂在别的App上,我们会提示目前的宿主是用户设备中的哪款App,并附上当时设备的device_token,如下图:[/align]



[align=left](图为2015年圣诞前夕,友盟推送的节日特别页面)[/align]

       如上文所说,设备在线时,push service应该是运行的。但也有可能push service在用户设备上存在,却未连接到友盟推送的服务器,从而导致了设备离线。检查此种情况,你可以在logcat里面,查看push
service的心跳信息,如下图:



[align=left]       如果有心跳信息的话,说明用户设备到友盟推送服务器之间的长连接是畅通的,但是有可能消息已经推送到了设备上,却并没有被展示出来。此时,你可以再查询一下设备的消息历史,如下图所示 :[/align]



       这里我来解释下“已送达“这个状态的定义。”已送达“说明消息已经确实被下发。消息送达到设备后,设备返回给友盟推送服务器一个ack回执,告诉服务器端App已经收到消息,服务器才会把状态归档成
”已送达”。
[align=left]       此外,通过查看logcat里面的onMessage,也可以打印出来消息是否已经送到,如下图:[/align]


  
    

 
    
 
     当你通过上述两种方式确定消息已经下发到手机,但是并没有显示出来后,你需要检查以下情况:
[align=left]1、 包名填错了,即包名与申请时所填的包名不一致;因此,消息无法路由到App头上。(详见STEP 3)[/align]
[align=left]2、 在之前的代码里调用了PushAgent.setPushIntentServiceClass(MyPushIntentService.class);[/align]
[align=left]后来又将该代码注释了。但是由于,SDK使用的SharedPreference存储该IntentService变量名,故虽然代码被注释了,但仍然可以从SharedPreference里读取到相应的IntentService,从而导致错误。[/align]
[align=left]遇到此种情况,你只需把app清理数据或者重新安装便可解决。[/align]
[align=left]3、 有可能是个别机型或者个别设备的适配问题所导致的,可以尝试换个其他型号的设备再进行测试。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: