【问题标题】:XMPPFramework - Retrieve name associated with a JIDXMPPFramework - 检索与 JID 关联的名称
【发布时间】:2014-04-14 05:13:30
【问题描述】:

在 Openfire 中,用户是使用“用户名”(用作 JID 的基础)和描述性“名称”创建的。如何在 XMPP 中检索给定 JID 的名称?我正在使用 XMPPFramework。

【问题讨论】:

    标签: ios xmpp openfire xmppframework


    【解决方案1】:

    您可以使用用户的 JID 从 XMPPUserCoreDataStorageObject 检索用户的显示名称,如下所示:

    XMPPJID *userJID = @"shakespeare";
    
    XMPPUserCoreDataStorageObject *user = [[[self appDelegate] xmppRosterStorage]
                                               userForJID:userJID
                                               xmppStream:[[self appDelegate] xmppStream]
                                     managedObjectContext:[[self appDelegate] managedObjectContext_roster]];
    
    NSString *userDisplayName = user.displayName;
    

    【讨论】:

    • 感谢您的帖子,但您的答案与罗伯特的答案相同。问题是在创建用户时,OpenFire 允许管理员在用户名之外指定一个“名称”,并且似乎没有办法通过 XMPP 查找该信息。
    • @stdout 是的,我知道 Openfire 的设置具有用户的“用户名”和“名称”输入字段 - 我也使用它们。上面的代码允许我与从服务器名册中获取的用户列表进行交互,并检索他们的 displayName(这也是他们在服务器上反映的“名称”)。问题是,您是如何获取用户的?
    【解决方案2】:

    在设置 XMPPFramework 时,您是否使用名册的 CoreData 部分?您可以通过 JID 从设置的存储类(例如,XMPPRosterCoreDataStorage)中获取用户。

    从这里,您可以通过存储类从名册请求中获取存储的用户,例如:

    [xmppStorage userForJID:jid ...]

    从这里,生成的对象 (XMPPUserCoreDataStorageObject) 具有“昵称”、“显示名称”等字段。还可以从该 JID 的关联 vCard 中获取一些信息。

    【讨论】:

    • 由于某种原因 displayName 与 JID 相同,并且昵称为空。我也尝试拉 vCard,但每个字段都是零。服务器会自动创建 vCard,还是它们一开始是空白的,需要手动填充?我像这样拉电子名片:XMPPvCardTemp *vCard = [[[self appDelegate] xmppvCardTempModule] vCardTempForJID:user.jid shouldFetch:YES];
    • 这取决于服务器真正返回的内容 - vCard 需要手动填充,或者在发送之前从服务器上的数据填充。您可以通过 fetch 的结果来判断结果中的内容,该结果将为每个用户包含一个 (带有“jid”、“name”等字段)。此处的名称是否也以相同的 jid 返回?
    • 好的,看起来它不会填充 vCard(除非您集成了 LDAP)。一旦我手动填充了 vCard,我就能够阅读信息。所以我想我将在用户配置过程中填充用户的 vCard。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多