环境:Tigase服务器。
问题描述:离线后别人给你发消息,然后上线后没有收到消息。因为Andorid的可以收到消息,确认为IOS端的问题而不是Server端的问题。
解决流程:在xmppStreamDidAuthenticate之后和“下线”之前,都要向Server发出以下数据包,(注意from一定要是自己的JID)
<presence from='[email protected]/balcony'> <priority>1</priority> </presence>
之后的离线消息就会以普通消息的方式逐条发送给你。
e.g:
-(void)getOfflineMsg{
NSString *jid = [[NSUserDefaults standardUserDefaults] objectForKey:@"kXMPPmyJID"];
XMPPIQ *iq = [[XMPPIQ alloc] initWithXMLString:[NSString stringWithFormat:@"<presence from='%@'><priority>1</priority></presence>",jid]error:nil];
[[self xmppStream] sendElement:iq];
}
当然,这种方法的前提是要Server有以下特性
<feature var='http://jabber.org/protocol/msgoffline'/>
资料来自: http://xmpp.org/extensions/xep-0160.html
http://xmpp.org/extensions/xep-0013.html