5

Smackライブラリを使用して、AndroidでXMPPクライアントに取り組んでいます。名簿/メッセージング/プレゼンスのものは非常にうまく機能しています。ただし、追加のプロファイル情報(userpicture、犬の名前など)を保存する方法が見つかりませんでした。

グーグルから私が見る唯一の方法は、VCardを使用することです。しかし、それは単に機能しませんでした。私は次のことを試しました:

        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でプロファイル関連情報を保存する正しい方法は何ですか?

4

3 に答える 3

12

Smack のソースをチェックアウトし、Smack Debug Window を使用するだけでなく、デバッガーで重要な部分を確認しました。問題は、 Smack APIの VCard 実装の内部にあります。VCard の保存は説明どおりに機能しますが、読み込みは壊れています。

parseIQ(XmlPullParser parser) は PacketReader.java クラスの一部であり、さまざまなタイプのパッケージを処理します。次の名前空間を持つタグのみを処理します。

「jabber:iq:auth」、「jabber:iq:roster」、「jabber:iq:register」、「urn:ietf:params:xml:ns:xmpp-bind」

また、ProviderManager に IQProvider が登録されているかどうかも調べます。そして、これが私の問題の根源です。VCard 用の IQProvider が登録されていません。そのため、vCard タグ内にある情報はすべて削除されます。

ただし、この IQProvider を登録するのはそれほど難しくありません。

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

これにより、自分の vCard を保存して再度ダウンロードするという上記の小さな例が解決されました。他のユーザーの vcard のダウンロードにまだ問題があります...これを詳しく調べて、その問題について別のスレッドを開くかもしれません。

于 2009-12-10T13:21:55.240 に答える
3

次のコードを使用して情報を取得できます。

VCard card = new VCard();
card.load(connection, "user@fqdn");
System.out.println("Voice: "+card.getPhoneHome("VOICE"));
于 2010-07-04T02:55:16.690 に答える
2

最初に別のクライアントでそのユーザーの vCard を設定してみて、結果がどのように変化するかを確認してください。さらに診断するには、Smack でプロトコルのデバッグを有効にし (-Dsmack.debugEnabled=trueデスクトップ マシンでは " " を使用)、関連するビットをここに投稿する必要があります。

于 2009-12-09T20:12:35.873 に答える