【问题标题】:How to set/get profile data with XMPP using Smack如何使用 Smack 使用 XMPP 设置/获取配置文件数据
【发布时间】:2009-12-03 09:33:43
【问题描述】:

我正在使用 Smack 库在 Android 上开发 XMPP 客户端。名册/消息/存在的东西运行得很好。但是,我没有找到存储其他个人资料信息(用户图片、狗名……)的方法。

我从谷歌搜索看到的唯一方法是使用 VCards。但它根本不起作用。我尝试了以下方法:

        VCard vCard = new VCard();
        vCard.load(connection);
        vCard.setEmailHome("meine_home@email.de");
        vCard.setLastName("Scheller");
        vCard.setField("blafasel", "asdf");
        vCard.save(connection);

然后我正在寻找一种方法来查看该 VCard 信息。它既没有出现在 iChat 中,也没有出现在这个 System.out 中:

        vCard.load(connection, user);
        System.out.println(user + " has this vCard: " + vCard.toXML());

所以出了什么问题,但没有迹象表明它是什么。我用谷歌谈话服务器和我自己的 openfire 副本尝试了这个,结果相同。顺便说一句,我正在使用这个版本的 Smack:http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/

我在这里做错了什么?使用 Smack 存储个人资料相关信息的正确方法是什么?

【问题讨论】:

    标签: java android xmpp smack


    【解决方案1】:

    我已经检查了 Smack 的源代码,并使用调试器检查了重要部分,以及使用 Smack 调试窗口。问题在于Smack API 的VCard 实现内部。保存 VCard 确实如前所述,但加载中断。

    parseIQ(XmlPullParser parser) 是 PacketReader.java 类的一部分,用于处理不同类型的包。它只处理具有以下命名空间的标签:

    "jabber:iq:auth", “jabber:智商:名册”, “jabber:智商:注册”, "urn:ietf:params:xml:ns:xmpp-bind"

    它还会查看 ProviderManager 中是否有任何已注册的 IQProvider。这是我问题的根源。没有为 VCards 注册的 IQProvider。因此,vCard 标签内的任何信息都会被丢弃。

    虽然注册这个 IQProvider 并不难:

        ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());
    

    这解决了我上面保存我自己的 vCard 并再次下载它的小例子。我在下载其他用户的 vcard 时仍然遇到问题...要仔细研究一下,也许会针对该问题打开另一个线程。

    【讨论】:

    • 嗨@UlrichScheller 我可以保存和加载我自己的电子名片,但我不能加载其他用户的电子名片。我得到功能未实现的响应。有任何想法吗?你有?谢谢
    【解决方案2】:

    您可以使用以下代码获取信息。

    VCard card = new VCard();
    card.load(connection, "user@fqdn");
    System.out.println("Voice: "+card.getPhoneHome("VOICE"));
    

    【讨论】:

      【解决方案3】:

      先尝试使用另一个客户端为该用户设置一个 vCard,然后看看这会如何改变您的结果。为了进一步诊断,您需要在 Smack 中打开协议调试(在台式机上使用“-Dsmack.debugEnabled=true”),并在此处发布相关位。

      【讨论】:

      • 谢谢,调试模式确实帮助我跟踪了这​​个问题。
      猜你喜欢
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 2022-01-21
      • 2012-09-16
      • 2014-10-14
      • 1970-01-01
      相关资源
      最近更新 更多