4

アバター画像を更新したいという点でアプリケーションを開発しています。私はXEP-0153アバター画像を更新するためのガイドラインにNSXMLElement従っていXEP-0153ますXMPPStream.

<iq from='juliet@capulet.com' 
    type='set'
    id='vc1'>
  <vCard xmlns='vcard-temp'>
    <PHOTO>
      <TYPE>image/jpeg</TYPE>
      <BINVAL>
        Base64-encoded-avatar-file-here!
      </BINVAL>
    </PHOTO>
  </vCard>
</iq>

サーバーは次のエラーを返します。

<iq xmlns="jabber:client" type="error" id="vc1" to="vvreddy50@gmail.com/83557F96">
<vCard xmlns="vcard-temp">
      <photo>
        <type>image/jpeg</type>
        <binval>Base64-encoded-avatar-file-here</binval>
      </photo>
</vCard>
<error code="500" type="wait">
      <internal-server-error xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
      </internal-server-error>
</error>
</iq>

それ以外の <iq to='juliet@capulet.com' type='result' id='vc1'/>

誰でもアバター画像の更新に関連するコードまたはリンクを投稿できますか? 前もって感謝します。

4

3 に答える 3

10
- (void)updateAvatar:(UIImage *)avatar 
{
    NSData *imageData = UIImagePNGRepresentation(avatar);
    dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_PRIORITY_DEFAULT);
    dispatch_async(queue, ^{
        XMPPvCardTempModule *vCardTempModule = [[XMPPHandler sharedInstance] xmppvCardTempModule];
        XMPPvCardTemp *myVcardTemp = [vCardTempModule myvCardTemp];
        [myVcardTemp setName:[NSString stringWithFormat:@"%@",name.text]];
        [myVcardTemp setPhoto:imageData];
        [vCardTempModule updateMyvCardTemp:myVcardTemp];
    });
}
于 2013-01-18T09:46:14.530 に答える
3

#import "XMPPvCardTemp.h"

   - (void)updateAvatar:(UIImage *)avatar{  
  NSData *imageData1 = UIImageJPEGRepresentation(avatar,0.5);
        NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" xmlns:@"vcard-temp"];
        NSXMLElement *photoXML = [NSXMLElement elementWithName:@"PHOTO"];
        NSXMLElement *typeXML = [NSXMLElement elementWithName:@"TYPE"stringValue:@"image/jpeg"];
        NSXMLElement *binvalXML = [NSXMLElement elementWithName:@"BINVAL" stringValue:[imageData1 base64Encoding]];

        [photoXML addChild:typeXML];
        [photoXML addChild:binvalXML];
        [vCardXML addChild:photoXML];
        XMPPvCardTemp *myvCardTemp = [[[self appDelegate] xmppvCardTempModule]myvCardTemp];
        if (myvCardTemp) {
            [myvCardTemp setPhoto:imageData1];
            [[[self appDelegate] xmppvCardTempModule] updateMyvCardTemp
             :myvCardTemp];

        }
        else{

            XMPPvCardTemp *newvCardTemp = [XMPPvCardTemp vCardTempFromElement:vCardXML];
            [[[self appDelegate] xmppvCardTempModule] updateMyvCardTemp:newvCardTemp];
        }
     }
于 2014-10-30T09:46:44.423 に答える
1

XMPP Core RFCから、次の<error type='wait'>ことを意味します。

待ってから再試行してください (エラーは一時的なものです)

そのため、コードはしばらく待ってからリクエストを再送信する必要があります。

(これは、実際に base64 でエンコードされた JPEG 画像をBINVALvCard として送信していることを前提としています。サーバーからの応答は、送信したという要求に対応していないため、両方を編集したと想定しています。正確なリクエストと返信を質問に含めることをお勧めしますが、簡潔にするために base64 でエンコードされた画像を数文字に切り詰めます。)

于 2013-02-14T17:38:15.257 に答える