2012-11-05 6 views
4

내 아바타 이미지를 업데이트하고 싶다는 신청서를 작성 중입니다. 나는 내 아바타 이미지를 업데이트하기 위해 XEP-0153 지침을 따르고있다. NSXMLElementXEP-0153에 다음 코드에 해당하고 XMPPStream을 통해 전송했다. XMPPFramework - 내 아바타 이미지를 업데이트하려면 어떻게해야합니까?

<iq from='[email protected]' 
    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="[email protected]/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='[email protected]' type='result' id='vc1'/>의? 미리 감사드립니다.

XMPP Core RFC에서

답변

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]; 
    }); 
} 
+3

XMPPHandler 란 무엇입니까? – why

+1

XMPPHandler는 인스턴스화 한 xmpp 모듈을 보유한 사용자 고유의 클래스입니다. – jody

+0

'XMPPHandler'에 대한 해결책이 있습니까? – Vvk

1

, <error type='wait'> 의미 :

retry after waiting (the error is temporary)

그래서 코드가 잠시 대기해야하고 요청을 다시 보냅니다.

(실제로 이것은 vCard의 BINVAL으로 base64 인코딩 JPEG 이미지를 보내는 것으로 가정합니다. 서버의 응답이 보낸 사람의 요청과 일치하지 않으므로 ' 모두 편집했습니다. 정확한 요청을 포함하고 귀하의 질문에 대답하지만, 간결에 대한 몇 가지 문자로 base64 인코딩 이미지를 잘라내는 더 좋을 것이다.)

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]; 
     } 
    } 
+0

** [vCardXML addChild : photoXML] 뒤에 xmpp 요소를 보내야합니다 ** – jaskiratjd

관련 문제