如何使用 xmpp jidstr iOS sdk 获取资源

Posted

技术标签:

【中文标题】如何使用 xmpp jidstr iOS sdk 获取资源【英文标题】:how to get resource using xmpp jidstr iOS sdk 【发布时间】:2014-12-05 14:48:53 【问题描述】:

我正在为 xmpp 使用 https://github.com/robbiehanson/XMPPFramework。我正在尝试获取特定 JID 字符串 (venu@xx.in) 的资源。

我使用下面的代码

XMPPUserCoreDataStorageObject *user = [[self fetchedResultsController] objectAtIndexPath:indexPath];
NSLog(@"userJID:%@",user.jidStr);

XMPPResourceCoreDataStorageObject* userResource = (XMPPResourceCoreDataStorageObject*)[user resourceForJID:[user.jid bareJID]];
NSLog(@"userResource:%@",userResource);

但问题是 userResource 返回 null。

有没有其他方法可以为 venu@xx.in 提供资源。应该类似于 venu@xx.in/(userResource)。

【问题讨论】:

你找到任何解决方案了吗,我也面临同样的问题。当用户离线时我需要资源名称,但它显示为空。 【参考方案1】:

您通常会从当前为该 JID 连接的 0 个或多个设备中的每一个收到的状态中获取与裸 JID 关联的资源信息。如果联系人使用多个设备在线,则将有多个资源与用户相关联。 “最可用”资源,也称为“主要资源”,可能是您想要的资源。 XMPPUserCoreDataStorageObject 有一个primaryResource 方法,它会给你一个XMPPResourceCoreDataStorageObject。试试这个(未经测试):

XMPPUserCoreDataStorageObject *user = [[self fetchedResultsController] objectAtIndexPath:indexPath];
NSString *resource = [[[user primaryResource] jid] resource];

【讨论】:

但是当其他用户在设备上离线时,我得到了 nil【参考方案2】:

“venu@xx.in”的资源丢失。 JID 包含三个部分,粗略地说(阅读 RFC6122 以获得正式/正确版本)@ 之前的位(localpart 或有时是 userpart)、从 @ 到 / 的位(域部分)和 / 之后的位(资源部分)。可能缺少本地部分或资源部分。包含所有这些位的 JID 是“完整”JID(例如 venu@xx.in/wheeee),没有资源的 JID 是“裸”JID(例如 venu@xx.in)。

【讨论】:

感谢kev 的回复,并向我解释资源和域。我已经更正了代码。仍然遇到同样的问题。 XMPPUserCoreDataStorageObject user = [[self fetchedResultsController] objectAtIndexPath:indexPath]; NSLog(@"userJID:%@",user.jidStr); XMPPResourceCoreDataStorageObject userResource = (XMPPResourceCoreDataStorageObject*)[user resourceForJID:[XMPPJID jidWithString:[user.jid resource]]]; NSLog(@"userResource:%@",userResource); userResource 仍然返回 null

以上是关于如何使用 xmpp jidstr iOS sdk 获取资源的主要内容,如果未能解决你的问题,请参考以下文章

获取 xmpp_login 访问令牌在 Facebook iOS SDK 中不起作用

在 iphone sdk 中使用 xmpp 管理朋友?

成功登录xmpp服务器后如何获取xmpp用户(iPhone SDK)?

如何在 iphone sdk 的 xmpp 中发送带有消息的笑脸/情感(图像)?

如何在 iOS 应用中实现 webRTC

将 XMPP 与 iPhone SDK 一起使用?