這篇記錄下我利用XMPP實現上傳頭像的過程,發現XMPP真心很強大很多功能都已經實現了。我們只要直接調用就可以了。下面上代碼了。
引入頭文件 這個頭文件需要自己導入不然 XMPPvCardTemp 下的方法調用不了。
#import "XMPPvCardTemp.h"
聲明相關對象
// 聲明上傳頭像相關對象
@property (nonatomic , strong) XMPPvCardCoreDataStorage *xmppvCardStorage;
@property (nonatomic , strong) XMPPvCardTempModule *xmppvCardTempModule;
@property (nonatomic , strong) XMPPvCardAvatarModule *xmppvCardAvatarModule;
初始化相關對象
// 初始化方法
- (void)setupStream
{
_xmppStream = [[XMPPStream alloc] init];
[_xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
_xmppRosterDataStorage = [[XMPPRosterCoreDataStorage alloc] init];
_xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:_xmppRosterDataStorage];
// _xmppRoster.autoFetchRoster = YES;
// _xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;
//
_xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
_xmppvCardTempModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:_xmppvCardStorage];
_xmppvCardAvatarModule = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:_xmppvCardTempModule];
[_xmppvCardTempModule addDelegate:self delegateQueue:dispatch_get_main_queue()];
[_xmppvCardAvatarModule addDelegate:self delegateQueue:dispatch_get_main_queue()];
}
在登錄成功的回調中與XMPPStream對象進行關聯
// 登陸成功
- (void) xmppStreamDidAuthenticate:(XMPPStream *)sender
{
[self goOnline];
NSLog(@"登陸成功");
[[NSUserDefaults standardUserDefaults] setObject:@"success" forKey:XMPPLogin];
[_xmppRoster activate:_xmppStream];
[_xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];
[_xmppvCardTempModule activate:_xmppStream];
[_xmppvCardAvatarModule activate:_xmppStream];
[self queryRoster];
}
上傳頭像的代碼
- (void) offeringProfile
{
NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" stringValue:@"vcard-temp"];
NSXMLElement *photoXML = [NSXMLElement elementWithName:@"PHOTO"];
NSXMLElement *typeXML = [NSXMLElement elementWithName:@"TYPE" stringValue:@"image/jpeg"];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"changmen" ofType:@"jpg"]]];
NSData *dataFromImage = UIImageJPEGRepresentation(image, 0.7f);
NSXMLElement *binvalXML = [NSXMLElement elementWithName:@"BINVAL" stringValue:[dataFromImage base64Encoding]];
[photoXML addChild:typeXML];
[photoXML addChild:binvalXML];
[photoXML addChild:photoXML];
XMPPvCardTemp * myvCardTemp = [_xmppvCardTempModule myvCardTemp];
NSLog(@"%@",myvCardTemp);
if (myvCardTemp)
{
myvCardTemp.photo = dataFromImage;
[_xmppvCardTempModule updateMyvCardTemp:myvCardTemp];
}else
{
XMPPvCardTemp *newvCardTemp = [XMPPvCardTemp vCardTempFromElement:vCardXML];
newvCardTemp.nickname = @"nick";
[_xmppvCardTempModule updateMyvCardTemp:newvCardTemp];
}
}