32.android的推送协议,小米华为手机推送问题,简单了解一下

导读:本篇文章讲解 32.android的推送协议,小米华为手机推送问题,简单了解一下,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

XMPP协议简介  

        XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)
是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,
其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、
针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。

        在这四种协议中,XMPP是最灵活的。XMPP是一种基于XML的协议,
它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展 性。
经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,
以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。
而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,
这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。

        1. 什么是XMPP ?

        XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。
XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两 部分;
 核心的XML流传输协议 
基于XML流传输的即时通讯扩展应用 
XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。
借助于XML易于解析和阅读的特性,使得XMPP的协议 能够非常漂亮。
 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,
与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完 整,完善等先进性。

        2. XMPP的基本网络结构是怎样的?

        XMPP中定义了三个角色,客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功 能。
网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),
MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服 务器,然后在之上传输XML。

        3. XMPP通过TCP传什么了?

        传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),
要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。
而 XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。
这不但使得解析容易了,人也容易阅读了,方便了开发和查错。
而 XMPP的核心部分就是一个在网络上分片断发送XML的流协议。
这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网 络基础协议。
所以可以说,XMPP用TCP传的是XML流。

//————————————————————————————–
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的所有进程并没有被初始化,需要等待用户点击通知栏推送。 
点击后进行: 
小米系统调用并唤醒口app;
然后初始化app进程;
最后再到解析推送数据进行跳转。 
导致较长时间无响应的原因就是第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消息

HMS sdK 是今后华为对外开放能力的统一入口, 会集成越来越多的华为能力进来, 里面不仅仅有push,还有账号,支付等等能力,以前老的HwPushSDK 的大小是600多K,HMS SDK当前只有200多K 
减小了应用的大小,并且HMS push的优势在于会可以提高消息的到达率, 现在大部分手机上都做了各种限制,依赖HMS.APK可以有效的提高消息的到达率 
目前老版还是可以用的,但建议接入新版HMS

我们使用华为推送通知栏消息的时候,发现有些机型在应用存活状态下可以走到onEvent()回调,但是应用死亡状态下只能调起应用但走不到onEvent()回调,这个问题有什么解决方法么?
一般只有设保护应用才能解决,是由于ROM侧的广播拦截导致的,建议使用intentUrl 
这里写图片描述

有些机型上不存在这个问题,所以是华为对不同机型或者不同版本Emui制定了不同的规则么
在此处我们就可以注意到,上述客服人员说的“般只有设保护应用才能解决”,其实就是开放了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版本,华为将采用新的设计方案,解决被限制的问题,但发布计划待定。

meta7要打开应用的时候才收得到推送信息,如果不打开是收不到,用的是系统通知栏推送
将应用设置为开机自启动,并设置为受保护应用 “设置-》应用管理-》找到自己的app”

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118362.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!