我正在开发聊天应用。我想添加最后看到的功能。所以它认为可以通过使用“XMPPPresence”发送自定义数据来完成,所以我尝试了下面的代码:
当用户“goOffline”时,我发送到下面的节。
XMPPPresence *presence = [XMPPPresence presenceWithType:@"unavailable"];
NSXMLElement *show = [NSXMLElement elementWithName:@"show" stringValue:@"away"];
NSXMLElement *status = [NSXMLElement elementWithName:@"status" stringValue:@"away"];
[presence addChild:show];
[presence addChild:status];
[[self xmppStream] sendElement:presence];
当我调试时,我检查我发送了正确的值:
<presence type="unavailable"><show>away</show><status>away</status><x xmlns="vcard-temp:x:update"><photo/></x></presence>
但是在另一边,当我收到你的存在时,它就像下面一样:
<presence xmlns="jabber:client" from="user1@myserver.com/3015805338140183012566044" to="user2@myserver.com/183258723140182997445059" type="unavailable"></presence>
因此,当收到状态时,没有关于状态和显示标记的信息,它在哪里?有什么想法吗?
如果还有其他更好的方法来实现最后看到的功能,那么请建议。
即使我注意到有一件事情,当用户下线然后我发送同样的状态,因为我在网上发送,但我仍然获得与上述相同的响应。奇怪!!!!当我在离线
发送可用状态时,它应该可用我尝试在线下发送以下内容:
XMPPPresence *presence = [XMPPPresence presence]; // type="available" is implicit
[[self xmppStream] sendElement:presence];
但我得到了以下结果:
<presence xmlns="jabber:client" from="user1@myserver.com/3015805338140183012566044" to="user2@myserver.com/183258723140182997445059" type="unavailable"></presence>
它完全奇怪,因为它应该可用。
答案 0 :(得分:0)
您使用的是哪个XMPP服务器?
如果您使用的是开火,那么只需发送以下节:
XMPPPresence *presence = [XMPPPresence presence]; // type="available" is implicit
如果您使用的是谷歌或其他第三方服务器,那么您需要在流上发送以下节:
XMPPPresence *presence = [XMPPPresence presence]; // type="available" is implicit
NSXMLElement *priority = [NSXMLElement elementWithName:@"priority" stringValue:@"24"];[presence addChild:priority];
[stream sendElement:presence]
此代码将使用户在线,所有其他名册将获得有关发件人状态的更新。