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)。送信者側でこれらの要求に対処する準備をしてください。