博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS xmpp的使用
阅读量:7059 次
发布时间:2019-06-28

本文共 21027 字,大约阅读时间需要 70 分钟。

#import "AppDelegate.h"

//#import "DBAreaItem.h"

#pragma mark -

#pragma mark Private Interface

@interface AppDelegate()

typedef enum

{

   AlertViewStyleConflict=10,//登陆冲突

   AlertViewStyleFailAuthenticate=11,//登陆失败

   AlertViewStyleDisconnect=12//server链接失败

}AlertViewStyle;

@property(nonatomic,assign) int AlertViewTag;

@end

#pragma markImplementation

@implementation AppDelegate

#pragma mark Properties

@synthesize window =_window;

@synthesizecacheinfo,settinginfo,serverInfo,userInfo;

//xmpp

@synthesize xmppStream;

@synthesize xmppRoster;

@synthesizexmppRosterStorage;

@synthesize xmppReconnect;

@synthesizexmppMessageArchivingCoreDataStorage;

@synthesizexmppMessageArchivingModule;

@synthesizejxlName,jxlNumber;

@synthesizexmppvCardStorage,xmppvCardTempModule,xmppvCardAvatarModule,xmppCapabilitiesStorage,xmppCapabilities;

#pragma mark UIApplicationDelegate

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

   [selfmySetupStream];

    

   return YES;

}

#pragma mark - actions

- (void)mySetupStream{

   self.messageRecordDic = [[NSMutableDictionary alloc]init];//聊天信息的读取写在认证通过里面

//    self.myCardInfo =[[NSMutableDictionary alloc] init];

   self.rosterArray =[[NSMutableArray alloc] initWithCapacity:10];

   self.messageSenders=[[NSMutableDictionary alloc] initWithCapacity:10];

   self.allUsersDataDic=[[NSMutableDictionary alloc] initWithCapacity:10];;

   // 初始化xmppStream

   if(xmppStream) {

      return;

    }

   xmppStream =[[XMPPStream alloc]init];

   [xmppStreamaddDelegate:self delegateQueue:dispatch_get_main_queue()];

   //同意后台模式(注意ios模拟器上是不支持后台socket)

   xmppStream.enableBackgroundingOnSocket = YES;

    

   // 初始化xmppReconnect

   xmppReconnect = [[XMPPReconnect alloc]init];

    

   // 初始化xmppRosterStorage   roster

   xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc]init];

   xmppRoster =[[XMPPRoster alloc]initWithRosterStorage:xmppRosterStorage];

   [xmppRosteraddDelegate:self delegateQueue:dispatch_get_main_queue()];

   xmppRoster.autoFetchRoster = YES;

   xmppRoster.autoAcceptKnownPresenceSubscriptionRequests= YES;

    

   // 初始化vCard support

   xmppvCardStorage = [XMPPvCardCoreDataStoragesharedInstance]; 

   xmppvCardTempModule = [[XMPPvCardTempModule alloc]initWithvCardStorage:xmppvCardStorage];

   xmppvCardAvatarModule = [[XMPPvCardAvatarModule alloc]initWithvCardTempModule:xmppvCardTempModule];

   [xmppvCardTempModuleaddDelegate:self delegateQueue:dispatch_get_main_queue()];

   [xmppvCardAvatarModuleaddDelegate:self delegateQueue:dispatch_get_main_queue()];

    

   // 初始化capabilities

   xmppCapabilitiesStorage = [XMPPCapabilitiesCoreDataStoragesharedInstance];

   xmppCapabilities = [[XMPPCapabilities alloc]initWithCapabilitiesStorage:xmppCapabilitiesStorage];

   xmppCapabilities.autoFetchHashedCapabilities = YES;

   xmppCapabilities.autoFetchNonHashedCapabilities= NO;

    

   // 初始化message

   xmppMessageArchivingCoreDataStorage=[XMPPMessageArchivingCoreDataStorage sharedInstance];

   xmppMessageArchivingModule = [[XMPPMessageArchiving alloc]initWithMessageArchivingStorage:xmppMessageArchivingCoreDataStorage];

   [xmppMessageArchivingModulesetClientSideMessageArchivingOnly:YES];

   [xmppMessageArchivingModule activate:xmppStream];

   [xmppMessageArchivingModule addDelegate:selfdelegateQueue:dispatch_get_main_queue()];

   // 激活xmpp的模块

   [xmppReconnect        activate:xmppStream];

    [xmppRoster         activate:xmppStream];

   [xmppvCardTempModule   activate:xmppStream];

   [xmppvCardAvatarModule activate:xmppStream];

   [xmppCapabilities     activate:xmppStream];

    

     //以下这两个依据你自己配置须要来设置

//    allowSelfSignedCertificates= NO;

//    allowSSLHostNameMismatch =NO;

    

}

- (void)myTeardownStream//

{

[xmppStream removeDelegate:self];

[xmppRoster removeDelegate:self];

 

[xmppReconnect      deactivate];

[xmppRoster         deactivate];

[xmppvCardTempModule  deactivate];

[xmppvCardAvatarModuledeactivate];

[xmppCapabilities     deactivate];

 

[xmppStream disconnect];

xmppStream = nil;

xmppReconnect = nil;

   xmppRoster = nil;

xmppRosterStorage =nil;

xmppvCardStorage = nil;

   xmppvCardTempModule = nil;

xmppvCardAvatarModule =nil;

xmppCapabilities = nil;

xmppCapabilitiesStorage =nil;

}

- (BOOL)myConnect//链接server,验证password并上线

{

   if ([xmppStream isConnected]) {

      returnYES;

    }

   [self.rosterInfoDic removeAllObjects];

   [self.allUsersDataDicremoveAllObjects];

   [self.rosterArray removeAllObjects];

   NSString *strTransAite=[APPALL.cacheinfo.demailstringByReplacingOccurrencesOfString:@"@"withString:@"$"];

   NSLog(@"%@",strTransAite);

   XMPPJID *myjid = [XMPPJID jidWithUser:strTransAite domain:@"eim.abc.com.cn" resource:@"GIMI0.6"  ];

    [xmppStream setMyJID:myjid];

   [xmppStream setHostName:@"eim.abc.com.cn"];//设置server

   // [[self xmppStream]setHostPort:5222];

   NSError *error ;

   //NSLog(@"xmppStream=%@",xmppStream);

   [SVProgressHUDshowWithStatus:@"登录中..."];

   if(![xmppStream connectWithTimeout:1error:&error])//XMPPStreamTimeoutNone

    {

       NSLog(@"my connected error : %@",error.description);

       [SVProgressHUDshowErrorWithStatus:@"server连接失败"];

      returnNO;

    }

   else{

      returnYES;

    }

}

- (void)myDisconnect//断开连接

{

[self myGoOffline];

[xmppStream disconnect];

}

- (void)myDeleteRecord//清楚聊天,信息记录

{

   [self.messageRecordDic removeAllObjects];

   [self.messageSenders removeAllObjects];

}

- (void)getMyQueryRoster//Request FriendList

{

   NSLog(@"request friendlist...");

   NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"];

   NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];

   XMPPJID *myJID = self.xmppStream.myJID;

   [iq addAttributeWithName:@"from" stringValue:myJID.description];

   [iq addAttributeWithName:@"to"stringValue:myJID.domain];

   [iq addAttributeWithName:@"id"stringValue:nil];

   [iq addAttributeWithName:@"type" stringValue:@"get"];

    [iq addChild:query];

    [self.xmppStream sendElement:iq];

    

}

- (void)myGoOnline//上线

{

   //简单上线

   XMPPPresence *presence = [XMPPPresence presence];

   [[selfxmppStream]sendElement:presence];

}

- (void)myGoOffline//下线

{

XMPPPresence *presence =[XMPPPresence presenceWithType:@"unavailable"];

[[self xmppStream] sendElement:presence];

}

- (NSString*)writeDateBase_64Image:(NSString *)photoString WithFileName:(NSString *)theImageName Size:(CGSize)theSize

{

   if ([photoString isEqualToString:@""]) {

       NSLog(@"writeDateBase_64Image 没有头像");

      return@"";

    }

   //压缩data再写入本地

   NSData *data=[photoString base64DecodedData];

   UIImage *aimage=[self scaleImage:[UIImage imageWithData:data] toSize:theSize];

   NSData *dataAfterscale=UIImageJPEGRepresentation(aimage,1.0);

  return  [DataPlist writeData:dataAfterscale ToTMPWithSubFloderName:@"headImageCache" FileName:theImageName];

}

-(UIImage*)scaleImage:(UIImage *)imagetoSize:(CGSize)theTize//图片压缩到指定CGSize大小

{

   UIGraphicsBeginImageContext(theTize);

    [image drawInRect:CGRectMake(0, 0,theTize.width,theTize.height)];

   UIImage *scaledImage =UIGraphicsGetImageFromCurrentImageContext();

   UIGraphicsEndImageContext();

   return scaledImage;

}

- (void)updateallUsersDataDic_Group_Presence//更新分组+在线、离线状态好友数据

{

   [self.allUsersDataDicremoveAllObjects];

   for(inti = 0; i < self.rosterArray.count; i++)

    {

      NSMutableDictionary *adic = [self.rosterArray objectAtIndex:i];

      XMPPJID*ajid=[adic objectForKey:@"object"];

       if ([ajid.user isEqualToString:xmppStream.myJID.user])

       {

          continue;

       }

      NSString*groupName=[adic objectForKey:@"group"];//分组名

      NSString*presenceType=[adic objectForKey:@"presenceType"];//状态

      NSMutableArray*arrayWithgroupName=[self.allUsersDataDic objectForKey:groupName];//该keyword的数组

      if(arrayWithgroupName)//存在该keyword的数组

       {

          

          if ([presenceType isEqualToString:@"yes"])

           {

              [arrayWithgroupNameinsertObject:[NSNumber numberWithInt:i] atIndex:0];//在线好友加到数组第一个

           }

          else

           {

              [arrayWithgroupNameaddObject:[NSNumber numberWithInt:i]];//离线的好友,加到数组最后一个

           }

       }

       else//不存在该keyword的数组

       {

          NSMutableArray*newArray=[[NSMutableArrayalloc]init];

           [newArrayaddObject:[NSNumber numberWithInt:i]];//在线或者离线的好友。加到空白数组里面

          [self.allUsersDataDic setObject:newArray forKey:groupName];//groupName=newArray,加入到allUsersDataDic

       }

       

    }

}

#pragma mark - XMPPStreamDelegate

- (void)xmppStreamDidConnect:(XMPPStream *)sender

{

   //验证password

   NSError *error;

   NSString *md5password= [APPALL.cacheinfo.dpassword MD5Digest];

   NSLog(@"%s--\nmd5password=%@",__func__,md5password);

   [xmppStreamauthenticateWithPassword:md5password error:&error];

}

- (void)xmppStreamDidAuthenticate:(XMPPStream*)sender

{

   NSLog(@"验证通过%s--\nsender.hostName=%@remoteJID.description=%@  sender.keepAliveInterval=%f",__func__,sender.hostName,sender.remoteJID.description,sender.keepAliveInterval);

   XMPPPresence *presence = [XMPPPresence presence];

   [[selfxmppStream]sendElement:presence];

    

   [xmppvCardTempModule fetchvCardTempForJID:xmppStream.myJID];

   self.lastFetchedvCard=xmppStream.myJID;

//      self.rosterInfoDic=[DataPlistopenDPFromDocumentsWithName:xmppStream.myJID.userAndTheType:@"plist"];//我的(xmppStream.myJID.user的)好友信息

   self.rosterInfoDic=[DataPlist openPlistFromDocumentWithName:xmppStream.myJID.user AndTheType:@"plist"];//我的(xmppStream.myJID.user的)好友信息

   NSLog(@"验证通过,本地好友信息数目=%d",self.rosterInfoDic.count);

}

- (void)xmppStream:(XMPPStream *)senderdidNotAuthenticate:(NSXMLElement *)error//

{

   NSLog(@"验证失败didNotAuthenticate:%@",error.description);

   [SVProgressHUD dismiss];

   [selfmyDisconnect];

   self.AlertViewTag =AlertViewStyleFailAuthenticate;

   [toolesshowSelectMsgBoxWithTitle:nilandMsg:@"登录失败,是否又一次登录?"andDelegate:self];

}

- (BOOL)xmppStream:(XMPPStream*)sender didReceiveIQ:(XMPPIQ*)iq//返回IQ(好友列表、)

{

   NSLog(@"--type:%@",iq.type);

//   NSLog(@"--%@",[iq.childElement children]);

//   NSLog(@"--child:%@",iq.childElement );

   if ([@"result" isEqualToString:iq.type]) {

      NSXMLElement*query = iq.childElement;

      NSXMLElement*aitem=[[query children]lastObject];

      NSString*ajid = [aitem attributeStringValueForName:@"jid"];

      NSLog(@"ajid=%@",ajid);

      if([@"query" isEqualToString:query.name]&&ajid) {

          NSArray *items = [querychildren];

          NSLog(@"iq.to=%@ items.count=%d ",iq.to,items.count);

          [self.rosterArray removeAllObjects];

          for (NSXMLElement *item in items) {

//             "\U9510\U6770\U7f51\U683c",

             NSString *groupName= [[item.children objectAtIndex:0]stringValue];

             NSString *jid = [item attributeStringValueForName:@"jid"];

             NSLog(@"分组groupName=%@",groupName);

             XMPPJID *object = [XMPPJID jidWithString:jid];

             NSMutableDictionary *dic=[[NSMutableDictionary alloc]initWithObjectsAndKeys:object,@"object",@"no",@"presenceType",groupName,@"group", nil];

              [self.rosterArray addObject:dic];

             //

             if (![self.rosterInfoDic objectForKey:object.user]&&object)//if本地数据没有该好友信息,就请求fetchvCardTempForJID

              {

                self.lastFetchedvCard=nil,self.lastFetchedvCard=object;

              [xmppvCardTempModulefetchvCardTempForJID:objectignoreStorage:YES];

              }

//              NSLog(@"FAMILY=%@\nself.lastFetchedvCard=%@ \nobject.description=%@",[[self.rosterInfoDic objectForKey:object.user]objectForKey:@"FAMILY"],self.lastFetchedvCard,object.description);

           }

//          //发送通知

          NSNotification*notificationObject =[NSNotification notificationWithName:@"upDateListData"object:nil];

          [[NSNotificationCenterdefaultCenter] postNotification:notificationObject];

       }

      if([@"vCard" isEqualToString:query.name])

       {

       }

    }

   return YES;

}

- (void)xmppStream:(XMPPStream*)sender didSendMessage:(XMPPMessage *)message

{

   NSString *msg = [[message elementForName:@"body"] stringValue];

   NSString *from = [[message attributeForName:@"from"] stringValue];

   NSString *to =[[message attributeForName:@"to"]stringValue];

   NSString *type= [[message attributeForName:@"type"] stringValue];

   NSRange range=[to rangeOfString:@"@"];

   if(range.length==0)return;

   NSString *toSimple=[to substringToIndex:range.location];

   NSLog(@"发送给%@的消息:%@ (消息类型:%@)",toSimple,msg,type);

   if([messageisChatMessageWithBody])//message

    {

       NSMutableDictionary*dict = [NSMutableDictionarydictionary];

       [dict setObject:from forKey:@"sender"];

       [dict setObject:msg forKey:@"msg"];

       [dict setObject:@"text" forKey:@"type"];

       [dict setObject:[NSDate date] forKey:@"date"];

      if(![self.messageRecordDic objectForKey:toSimple]&&dict) {

          NSMutableArray *array=[[NSMutableArray alloc]init];

           [arrayaddObject:dict];

          [self.messageRecordDic setObject:array forKey:toSimple];

       }

      else

       {

          NSMutableArray*array1=[self.messageRecordDic objectForKey:toSimple];

           [array1addObject:dict];

       }

       [self.messageSenders setObject:@"0"forKey:toSimple];//将近期联系人放入messageSenders

      NSNotification *notificationObject=[NSNotification notificationWithName:@"messageGetting"object:nil];

       [[NSNotificationCenter defaultCenter]postNotification:notificationObject];

    }

}

- (void)xmppStream:(XMPPStream*)sender didReceiveMessage:(XMPPMessage *)message

{

   NSString *msg = [[message elementForName:@"body"] stringValue];

   NSString *from = [[message attributeForName:@"from"] stringValue];

   NSString *type= [[message attributeForName:@"type"] stringValue];

   NSRange range=[from rangeOfString:@"@"];

   if(range.length==0)return;

   NSString *fromSimple=[from substringToIndex:range.location];

   NSLog(@"接受%@的消息:%@ (消息类型:%@)",fromSimple,msg,type);

   NSLog(@"接受消息%@",message);

   if([messageisChatMessageWithBody])//message

    {

      NSLog(@"%@",message);

       NSMutableDictionary*dict = [NSMutableDictionarydictionary];

       [dict setObject:fromSimple forKey:@"sender"];

       [dict setObject:msg forKey:@"msg"];

       [dict setObject:@"text" forKey:@"type"];

       [dict setObject:[NSDate date] forKey:@"date"];

      if(![self.messageRecordDic objectForKey:fromSimple]&&dict){

          NSMutableArray *array=[[NSMutableArray alloc]init];

           [arrayaddObject:dict];

          [self.messageRecordDic setObject:array forKey:fromSimple];

       }

      else

       {

          NSMutableArray*array1=[self.messageRecordDic objectForKey:fromSimple];

           [array1addObject:dict];

       }

       //未读消息来源者

      if(![self.messageSenders objectForKey:fromSimple]) {

          [self.messageSenders setObject:@"1" forKey:fromSimple];

       }

      else

       {

          int number=[[self.messageSenders objectForKey:fromSimple] intValue]+1;

          [self.messageSenders setObject:[NSString stringWithFormat:@"%d",number] forKey:fromSimple];

       }

    }

   else//语音、图片类

    {

      NSLog(@"其它信息");

    }

   NSNotification *notificationObject=[NSNotification notificationWithName:@"messageGetting"object:nil];

    [[NSNotificationCenter defaultCenter]postNotification:notificationObject];

}

- (void)xmppStream:(XMPPStream*)sender didReceivePresence:(XMPPPresence *)presence

{

   NSLog(@"___%s",__func__);

     NSString*presenceType = [presence type]; //online/offline

   //当前用户

   NSString *userId = [[[APPALL xmppStream]myJID]user] ;

   //在线用户

   NSString *presenceFromUser = [[presencefrom] user];

   if (![presenceFromUser isEqualToString:userId]) {

      //在线状态

      if([presenceType isEqualToString:@"available"]) {

          //用户列表托付

          for (NSMutableDictionary *dic in self.rosterArray) {

             XMPPJID *object = [dic objectForKey:@"object"];

             if ([object.user hasPrefix:presenceFromUser]) {

                 [dic setObject:@"yes" forKey:@"presenceType" ];

              }

           }

          NSLog(@"%@上线了",presenceFromUser);

       }elseif ([presenceType isEqualToString:@"unavailable"]) {

          //用户列表托付

          for (NSMutableDictionary *dic in self.rosterArray) {

             XMPPJID *object = [dic objectForKey:@"object"];

             if ([object.user hasPrefix:presenceFromUser]) {

                 [dic setObject:@"no" forKey:@"presenceType" ];

              }

           }

          NSLog(@"%@下线了",presenceFromUser);

       }

    }

   [selfupdateallUsersDataDic_Group_Presence];

   //发送好友列表刷新通知

   NSNotification *notificationObject=[NSNotification notificationWithName:@"upDateListData"object:nil];

    [[NSNotificationCenter defaultCenter] postNotification:notificationObject];

    

}

- (void)xmppStream:(XMPPStream*)sender didReceiveError:(NSXMLElement *)error

{

   NSLog(@"didReceiveError description: %@",error.description);

   DDXMLNode *errorNode = (DDXMLNode *)error;

   for(DDXMLNode *node in [errorNode children])

    {

       //若错误节点有【冲突】

      if([[nodename] isEqualToString:@"conflict"])

       {

          //停止轮训检查链接状态

//           [_timerinvalidate];

          [self myDisconnect];

          NSNotification*notificationObject =[NSNotification notificationWithName:@"upDateListData"object:nil];

          [[NSNotificationCenterdefaultCenter] postNotification:notificationObject];

          self.AlertViewTag = AlertViewStyleConflict;

          [tooles showSelectMsgBoxWithTitle:nilandMsg:@"您的账户已在其它手机上登录,您已被挤下线,请确定是否是您本人操作!是否又一次登录?"andDelegate:self];

       }

    }

}

- (void)xmppStream:(XMPPStream*)sender didSendIQ:(XMPPIQ*)iq

{

   NSLog(@"didSendIQ:%@",iq.description);

//    1 didSendIQ:

//    2 didSendIQ:

//    3、(手动发送好友列表请求) didSendIQ:}

- (void)xmppStream:(XMPPStream*)sender didFailToSendMessage:(XMPPMessage *)message error:(NSError *)error

{

   NSLog(@"didFailToSendMessage:%@",error.description);

   [SVProgressHUDshowErrorWithStatus:@"消息发送失败"];

}

- (void)xmppStream:(XMPPStream*)sender didFailToSendPresence:(XMPPPresence *)presence error:(NSError *)error

{

   NSLog(@"didFailToSendPresence:%@",error.description);

   [SVProgressHUDshowErrorWithStatus:@"状态更新失败"];

}

//[xmppStream disconnect]时会运行;掉线、断网故障时不运行

- (void)xmppStreamWasToldToDisconnect:(XMPPStream*)sender

{

   NSLog(@"xmppStreamWasToldToDisconnect");

}

//[xmppStream disconnect]、掉线、断网故障时运行

- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error

{

   NSString *str=[NSString stringWithFormat:@"server连接失败%@",[error.userInfoobjectForKey:@"NSLocalizedDescription"]];

   NSLog(@"%s--=%@---\n error=%@",__func__,str,error);

   NSLog(@"error.userInfo =%@",error.userInfo);

   //登陆不到server

//    error.userInfo ={

//       NSLocalizedDescription = "nodename nor servnameprovided, or not known";

//    }

   [selfmyDisconnect];

   if([error.userInfo objectForKey:@"NSLocalizedDescription"]) {

       [SVProgressHUD showErrorWithStatus:[error.userInfo objectForKey:@"NSLocalizedDescription"]];

    }

   else

    {

       [SVProgressHUDshowErrorWithStatus:@"好友server连接失败!"];

    }

}

#pragma mark - XMPPReconnectDelegate

- (void)xmppReconnect:(XMPPReconnect *)senderdidDetectAccidentalDisconnect:(SCNetworkReachabilityFlags)connectionFlags

{

   NSLog(@"didDetectAccidentalDisconnect:%u",connectionFlags);

}

- (BOOL)xmppReconnect:(XMPPReconnect *)sendershouldAttemptAutoReconnect:(SCNetworkReachabilityFlags)reachabilityFlags

{

   NSLog(@"shouldAttemptAutoReconnect:%u",reachabilityFlags);

   return YES;

}

#pragma mark-XMPPvCardTempModuleDelegate名片信息

- (void)xmppvCardTempModule:(XMPPvCardTempModule *)vCardTempModule

       didReceivevCardTemp:(XMPPvCardTemp *)vCardTemp

                  forJID:(XMPPJID *)jid

{

//    NSLog(@"%s",__func__);

   NSXMLElement *xmlData=(NSXMLElement *)vCardTemp;

   NSString *titleString = @"这个用户非常懒。没有签名!

";

   NSString *familyString = @"无名用户";

   NSString *photoString = @"";

   for(idmyItem in [xmlData children])

    {

      NSLog(@"myItemname=%@",[myItem name]);

      if([myItemstringValue].length <= 100)

       {

//          NSLog(@"valuelalala:%@",[myItem stringValue]);

       }

      else

       {

          NSLog(@"too long");

       }

      if([[myItemname] isEqualToString:@"TITLE"])

       {

          titleString = [myItem stringValue];

       }

      elseif([[myItem name] isEqualToString:@"N"])

       {

          familyString = [myItem stringValue];

       }

      elseif([[myItem name] isEqualToString:@"PHOTO"])

       {

          photoString = [[myItem stringValue] substringFromIndex:5];

       }

    }

//   头像image写入本地

   NSString *PHOTOImagePath=[self writeDateBase_64Image:photoStringWithFileName:jid.user Size:CGSizeMake(88, 88)];

   NSMutableDictionary*dicObject=[[NSMutableDictionary alloc]initWithObjectsAndKeys:titleString,@"TITLE",familyString,@"FAMILY",PHOTOImagePath,@"PHOTO",nil];

    [self.rosterInfoDic setObject:dicObject forKey:jid.user];//

   //family photopath title 写入本地

   NSLog(@"forJID:(XMPPJID *)jid=%@  \n self.lastFetchedvCard=%@  \n ",jid.user,self.lastFetchedvCard.user);

   if([self.lastFetchedvCard.user isEqualToString:jid.user])//(在最后一次名片请求的时候,写入本地,)

    {

//       [DataPlist writeDP:self.rosterInfoDicWithName:xmppStream.myJID.user AndTheType:@"plist"];

       [DataPlistwritePlistToDocumentWithDic:self.rosterInfoDic WithName:xmppStream.myJID.userAndTheType:@"plist"];

    }

   NSNotification *notificationObject=[NSNotification notificationWithName:@"upDateListData"object:nil];

    [[NSNotificationCenter defaultCenter] postNotification:notificationObject];

}

- (void)xmppvCardTempModuleDidUpdateMyvCard:(XMPPvCardTempModule*)vCardTempModule//更新名片

{

   NSLog(@"%s--%@",__func__,vCardTempModule);

}

//获取完善友列表

- (void)xmppRosterDidEndPopulating:(XMPPRoster*)sender

{

   NSLog(@"获取完成好友列表");

   [SVProgressHUDshowSuccessWithStatus:@"登录成功"];

   if([self.lastFetchedvCard.user isEqualToString:xmppStream.myJID.user]){

       [SVProgressHUDdismiss];

    }

   [selfupdateallUsersDataDic_Group_Presence];

   //发给BigDesktopViewController

   NSNotification *notificationObject_1=[NSNotification notificationWithName:@"DidAuthenticate"object:nil];

    [[NSNotificationCenter defaultCenter] postNotification:notificationObject_1];

   //发送通知BigFriendListViewController

   NSNotification *notificationObject=[NSNotification notificationWithName:@"upDateListData"object:nil];

    [[NSNotificationCenter defaultCenter] postNotification:notificationObject];

}

//- (XMPPvCardTemp *)myvCardTempForXMPPStream:(XMPPStream*)stream

//{}

#pragma mark Core Data

- (NSManagedObjectContext*)managedObjectContext_roster

{

return [xmppRosterStoragemainThreadManagedObjectContext];

}

- (NSManagedObjectContext*)managedObjectContext_capabilities

{

return [xmppCapabilitiesStoragemainThreadManagedObjectContext];

}

#pragma mark - XMPPRosterDelegate

- (void)xmppRoster:(XMPPRoster*)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence

{

   NSLog(@"好友状态更改--%s",__func__);

}

- (void)xmppRoster:(XMPPRoster*)sender didReceiveBuddyRequest:(XMPPPresence *)presence//接受好友请求

{

NSLog(@"%s",__func__);

XMPPUserCoreDataStorageObject *user =[xmppRosterStorage userForJID:[presence from]

                                              xmppStream:xmppStream

                                      managedObjectContext:[self managedObjectContext_roster]];

 

NSString *displayName = [userdisplayName];

NSString *jidStrBare =[presence fromStr];

NSString *body = nil;

 

if (![displayName isEqualToString:jidStrBare])

{

body = [NSString stringWithFormat:@"Buddy request from %@

转载地址:http://ywfll.baihongyu.com/

你可能感兴趣的文章
用VMware克隆CentOS7后网卡静态配置
查看>>
input 测试工具2 mi 监听多个input
查看>>
Android 硬件加速问题
查看>>
Eclipse JEE中Server Options追踪
查看>>
关联规则Apriori算法
查看>>
Zabbix监控交换机,防火墙端口流量
查看>>
C++ 精度
查看>>
61、Heartbeat V1基于NFS共享存储的WEB高可用实战
查看>>
泛型数组问题
查看>>
Cisco HSRP排错
查看>>
Linux下查看tomcat连接数
查看>>
java 对象池
查看>>
成长中必须知道的20个故事
查看>>
aix下设置自动启动、关闭oracle
查看>>
Ocs 2007 迁移到 Lync的一些注意事项
查看>>
我的友情链接
查看>>
bash的字符处理工具及bash特性
查看>>
Input Director 一套键盘鼠标同时控制多台电脑
查看>>
Failure [INSTALL_FAILED_INVALID_APK]
查看>>
java 写入文件
查看>>