簡體   English   中英

如何使用Smack使用XMPP設置/獲取配置文件數據

[英]How to set/get profile data with XMPP using Smack

我正在Android上使用Smack庫在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());

所以出了什么問題,但沒有任何跡象表明它是什么。 我嘗試使用google talk服務器和我自己的openfire副本,結果相同。 順便說一下,我正在使用這個版本的Smack: http//davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/

我在這做錯了什么? 使用Smack存儲配置文件相關信息的正確方法是什么?

我已經檢查了Smack的來源,並使用調試器以及使用Smack調試窗口瀏覽了重要部分。 問題出在Smack API的VCard實現中。 保存VCard確實可以正常工作,但是加載會中斷。

parseIQ(XmlPullParser解析器)是PacketReader.java類的一部分,用於處理不同類型的包。 它只處理具有以下命名空間的標記:

“jabber:iq:auth”,“jabber:iq:roster”,“jabber:iq:register”,“urn:ietf:params:xml:ns:xmpp-bind”

它還會查看ProviderManager中是否有任何已注冊的IQProvider。 這是我問題的根源。 注冊的VCards沒有IQProvider。 因此,無論vCard標簽內部的任何信息都被刪除。

注冊這個IQProvider並不難:

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

這解決了我上面的一個小例子,用於保存我自己的vCard並再次下載。 我仍然無法下載其他用戶的vcards ...要仔細研究這個並且可能為這個問題打開另一個線程。

您可以使用以下代碼獲取信息。

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

嘗試首先使用其他客戶端為該用戶設置vCard,然后查看更改結果的方式。 為了進一步診斷,您需要在Smack中打開協議調試(在桌面計算機上使用“ -Dsmack.debugEnabled=true ”),並在此處發布相關位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM