2

ユーザーの XMPP/Jabber 名簿にあるすべての連絡先のアバターを取得するにはどうすればよいですか?

以前にこの質問をしたことがあり、ハンドラーを実装しているとき<presence>に、アプリが受け取るプレゼンス アイテムの形式が次のようになっていることに気付きました。

<presence to="me" from="contact">
...some other stuff here...
<x xmlns="vcard-temp:x:update"><photo>3FB991AA97D7701C21EAFE65FB866E4BFF1B927C</photo></x>
</presence>

この3FB991AA97D7701C21EAFE65FB866E4BFF1B927C部分は SHA ハッシュのように見えますが、問題のユーザーの実際のアバターを取得するにはどうすればよいでしょうか?

4

1 に答える 1

2

vCardベースのアバターはXEP-0153で指定されています。photo要素にSHA1ハッシュが含まれているのは正しいです。ハッシュを送信した人のvCardをリクエストします。

<iq to='juliet@capulet.com'
    type='get' 
    id='vc2'>
  <vCard xmlns='vcard-temp'/>
</iq>

そして、応答から写真を釣り上げます:

<iq to='romeo@montague.net/orchard' 
    type='result'
    id='vc2'>
  <vCard xmlns='vcard-temp'>
    <PHOTO>
      <TYPE>image/jpeg</TYPE>
      <BINVAL>
        Base64-encoded-avatar-file-here!
      </BINVAL>
    </PHOTO>
  </vCard>
</iq>

このプロトコルを使用する場合は、それに基づいてキャッシュする必要があります。起動時(特にユーザーが初めてログインするとき)にアバターを要求する頻度を実際に調整する必要があります。短時間で数十億のアバターを取得すると、サーバーによってレート制限される可能性があります。

また、SHA1ハッシュの計算には十分注意してください。私は、ひどく注意を払っていないクライアントが何人か見ました。彼らは、同じアバターを何度も何度も再要求する無限ループに陥ります。

アバターをリクエストし、それが期待するハッシュと一致しない場合は、ネガティブキャッシュをお勧めします。そのハッシュの答えが得られないという事実をキャッシュし、次回はそれを再度要求しないでください。送信者のSHA1ロジックは、興味深い点で間違っている可能性があり、次に質問したときに改善されることはありません。

最後に、一部のクライアントは、XEP-0153が言うように最初にXEP-0054を使用して送信者のサーバーにvCardデータを要求し、次にvCardのIQ getを送信者の完全なJID(ユーザー@ domain / resource)。送信者側でこれらの要求に対処する準備をしてください。

于 2012-07-11T06:53:14.207 に答える