質問

私は、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());

つまり、何か問題が発生しましたが、それが何だったのかはわかりません。Googleトークサーバーと私自身のopenfireのコピーでこれを試しましたが、同じ結果でした。ところで、私はこのバージョンの Smack を使用しています。 http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/

ここで私は何を間違っているのでしょうか?Smack でプロフィール関連情報を保存する正しい方法は何ですか?

役に立ちましたか?

解決

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

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

「Jabber:IQ:Auth」、「Jabber:IQ:名簿」、「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 を保存して再度ダウンロードするという上記の小さな例が解決されました。他のユーザーの vcard をダウンロードする際にまだ問題が発生しています...これについて詳しく調べて、その問題について別のスレッドを立てるつもりです。

他のヒント

あなたは情報を取得するには、次のコードを使用することができます。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top