基于XMPP开发学习------(2)注册、获取个人信息、自动连接

时间:2022-12-13 21:10:17

WCXMPPTool是一个单例的工具类,内部实现xmpp的一些方法

一、登录

注册和登录一样:都是先用jid去连接,然后连接成功后,再发送《注册》密码,对应的有xmpp代理会调用方法。

不同在于发生密码的方法:

NSString *pwd = [WCUserInfo sharedWCUserInfo].registerPwd;

 [_xmppStream registerWithPassword:pwd error:nil];

以及xmpp代理方法:

#pragma mark 注册成功
-(void)xmppStreamDidRegister:(XMPPStream *)sender{
    WCLog(@"注册成功"); 
}
#pragma mark 注册失败
-(void)xmppStream:(XMPPStream *)sender didNotRegister:(DDXMLElement *)error{
    WCLog(@"注册失败:%@",error);
}

二、获取个人信息

首先必须需要添加一个《电子名片信息》模块(添加电子名片模块 + 一般电子模块配合头像模块使用)


@property(nonatomic, strong, readonly)XMPPvCardTempModule *vCard;//电子名片

    XMPPvCardAvatarModule *_avatar;//头像模块

    XMPPvCardCoreDataStorage *_vCardStorage;//电子名片数据存储


#warning 每添加一个模块,都需要激活

    //添加电子名片模块
    _vCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
    _vCard = [[XMPPvCardTempModule alloc]initWithvCardStorage:_vCardStorage];
    //激活模块
    [_vCard activate:_xmppStream];
    
    //通常还会配一个头像模块
    _avatar = [[XMPPvCardAvatarModule alloc]initWithvCardTempModule:_vCard];
    //激活模块
    [_avatar activate:_xmppStream];


   //XMPP提供一个方法,直接获取个人信息
    XMPPvCardTemp *myvCard =[WCXMPPTool sharedWCXMPPTool].vCard.myvCardTemp;
    
    //设置头像  昵称  微信号
    if (myvCard.photo) {
        self.headerView.image = [UIImage imageWithData:myvCard.photo];
    }
    self.nickNameLabel.text = myvCard.nickname;
    WCUserInfo *userInfo = [WCUserInfo sharedWCUserInfo];
    self.userNumLabel.text = [NSString stringWithFormat:@"微信号:%@",userInfo.user];


    //XMPP个人信息   更新到服务器
    XMPPvCardTemp *myVCard =[WCXMPPTool sharedWCXMPPTool].vCard.myvCardTemp;
    myVCard.nickname = self.nickNameLabel.text;
    myVCard.orgName = self.orgnameLabel.text;
    myVCard.title = self.phoneLabel.text;
    myVCard.mailer = self.emailLabel.text;
    //更新  这方法内部会实现数据上传到服务器
    [[WCXMPPTool sharedWCXMPPTool].vCard updateMyvCardTemp:myVCard];

三、自动连接

    只需要添加模块即可

    XMPPReconnect *_reconnect;//自动连接模块

    //添加自动连接模块
    _reconnect = [[XMPPReconnect alloc]init];
    //激活模块
    [_reconnect activate:_xmppStream];