如何发送自定义XMPPPresence Stanzas

时间:2014-05-26 05:46:11

标签: ios xmpp offline

我正在开发聊天应用。我想添加最后看到的功能。所以它认为可以通过使用“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>

它完全奇怪,因为它应该可用。

1 个答案:

答案 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]

此代码将使用户在线,所有其他名册将获得有关发件人状态的更新。