本人在项目中用到AndroidPN,达到通过服务器给终端推送消息通知的功能。下面讲下个人对AndroidPN的离线消息处理的理解。
AndroidPN的离线消息需要处理以下几种情况:
1.客户端刚上线的时候,AndroidPN服务器需要在根据上线的用户去检索该用户是否在通知消息表中有未发送(state=0)的消息,如果有,则调用NotificationManager中的sendOfflineNotification方法,发送离线消息;
当时我还没看到AndroidPN中的离线消息这块的处理代码,自己就自己写了一段代码在IQAuthHandler中的handleIQ处理成功后加上了离线消息的处理 ;后来接着研究的时候发现AndroidPN已经加上了跟我一样的处理代码,不过他放的位置跟我的不一样,我的是放在登陆成功后的位置,而源码是放在StanzaHandler处理消息类中的processPresence方法中,同样是对session作了判断,如果session的状态为已经验证,则查询该用的离线消息,再发送离线消息。当时我没明白为什么要放在这个位置,为什么不放在IQAuthHandler中的handleIQ处理登陆成功后,后来我在我解决第二种需要处理AndroidPN的离线消息的时候,才明白源码中为什么要把对离线消息的处理放在StanzaHandler处理消息类中的processPresence方法中。以下就是第二种需要处理离线消息的情况:
2.客户端在线的时候,服务器发送的消息因为某些原因,未能成功发送给客户端,或客户端未能给服务器一个消息接收回执。这时,这条消息在服务器就是state=0,被认为是未发送的消息,这时该怎么处理呢。服务器