XMPPFramework: ¿Cómo puedo actualizar mi propia image de avatar?

Estoy desarrollando una aplicación en la que quiero actualizar mi image de avatar. Estoy siguiendo XEP-0153 pautas XEP-0153 para actualizar mi image de avatar y he construido un NSXMLElement corresponde al siguiente código en XEP-0153 y envió ese elemento a través de 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> 

El server responde el siguiente error:

 <iq xmlns="jabber:client" type="error" id="vc1" to="vvnetworkingdy50@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> 

En lugar de <iq to='juliet@capulet.com' type='result' id='vc1'/>

¿Alguien puede publicar el código o el enlace relacionado con la actualización de la image del avatar? Gracias por adelantado.

 - (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 shanetworkingInstance] xmppvCardTempModule]; XMPPvCardTemp *myVcardTemp = [vCardTempModule myvCardTemp]; [myVcardTemp setName:[NSString stringWithFormat:@"%@",name.text]]; [myVcardTemp setPhoto:imageData]; [vCardTempModule updateMyvCardTemp:myVcardTemp]; }); } 

#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]; } } 

Desde el XMPP Core RFC , <error type='wait'> significa:

vuelva a intentarlo después de esperar (el error es temporal)

por lo que su código debe esperar un time y volver a enviar la request.

(Esto supone que estás enviando una image JPEG codificada en base64 como BINVAL de tu vCard. La respuesta del server no corresponde a la request que dices que has enviado, así que asumo que has editado ambas. Sería mejor include la request exacta y la respuesta en su pregunta, pero truncar la image codificada en base64 a unos pocos caracteres para la concisión).