如何使用 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 中不起作用
成功登录xmpp服务器后如何获取xmpp用户(iPhone SDK)?