【问题标题】:how to get resource using xmpp jidstr iOS sdk如何使用 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)。

【问题讨论】:

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

标签: ios xmpp xmppframework


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多