IOS使用XMPP最新教程(三)获取好友列表 (通过获取好友状态)

就是下面这个函数

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


目前网上的demo都是用这个函数来获取好友列表的,但是此方法并不是用来获取好友列表的,他只能拿到线上好友的信息,如果这个好友没上线,你就无法取得这个好友的信息,一旦这个好友上线了,你就能取到,如果他下线了,这个时候你能获得他下线的信息。


//取得好友状态

    doctorFriend.presenceType = [presence type]; 

    //当前用户

    NSString *userId = [[sender myJID] user];

        userId = [NSString stringWithFormat:@"%@@%@",userId,HOSTNAME];

    //在线用户

    doctorFriend.name = [[presence from] user];

        doctorFriend.name = [NSString stringWithFormat:@"%@@%@",doctorFriend.name,HOSTNAME];

    

    NSLog(@"在线好友为:%@",doctorFriend.name);

    //防止自己被加入到好友列表

    if (![doctorFriend.name isEqualToString:userId]) {

        

        //在线状态

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

            //把好友加入到好友列表中

            [self newFriendsOnline:doctorFriend];

//这个函数是我用来reload好友列表页面的tableview的。

            [self.friendsListDelegate passValue];

            

        }else if ([doctorFriend.presenceType isEqualToString:@"unavailable"]) {


            [self newFriendsOnline:doctorFriend];

            [self.friendsListDelegate passValue];

        }

        

    }

    }



下面是加入好友到自己的列表中的函数


-(void)newFriendsOnline:(Friend *)doctorFriend{

    

    BOOL flag = NO;

    for (int i=0; i<self.friends.count; i++) {

        Friend * dFriend = [self.friends objectAtIndex:i];

        if([dFriend.name isEqualToString:doctorFriend.name]){

            if (!doctorFriend.first) {

//如果好友的状态改变了,也改变一下本地好友的状态(在线不在线)

            [self.friends replaceObjectAtIndex:i withObject:doctorFriend];

            }

            flag = YES;

        }

    }

    if(!flag){

        [self.friends addObject:doctorFriend];

    }

}



上面就可以获取到好友列表了(上面的网上demo的做法,我做了一些改进);

如何用tableview列出好友我就不写了。

之后我会写如果用花名册来获取好友列表,不管上线与否都能获取到,另外添加好友请求之类的都是要用这个实现的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值