• iOS开发之使用XMPPFramework实现即时通信(三)


      你看今天是(三)对吧,前面肯定有(一)和(二),在发表完iOS开发之使用XMPPFramework实现即时通信(一)iOS开发之使用XMPPFramework实现即时通信(二)后有好多的小伙伴加我Q或者评论留言提出一些问题,比如:“楼主,在哪注册?”,“楼主,你的登录用户名和密码是多少?”之类的问题。在之前的博客中使用的账号和密码,为了方便,是用spark客户端注册的,在今天的博客中将会详细的介绍如何使用代码注册我们新用户,还有在这感谢关注我的小伙伴们,谢谢你们的支持!

      好了,废话少说,说道到注册新的用户其实还是蛮简单的,之前在使用xmppframework的时候是直接连接后就直接认证。今天的博客的大体思路是让用户输入用户名和密码,我们拿着用户名取连接我们的openfire服务器(即使用户没有注册,拼接出的jid也能连接服务器)。连接完以后这不同的是去注册密码而不是去认证,注册成功后,然后再认证。

      一,运行效果图展示

        还是那句话,为了直观,是少不了图的,运行的部分截图如下:

      二.代码展示

        1.为了提示,我把AlterView进行了简单封装,便于使用,代码如下:

    复制代码
    1 //提示框
    2 -(void)alterWithTip:(NSString *) tip
    3 {
    4     UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:tip delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
    5     [alter show];
    6 }
    复制代码

        2.开始今天的主题,首先在我们的Controller里获取xmppSteam. 并注册委托回调

    复制代码
    1 - (void)viewDidLoad {
    2     [super viewDidLoad];
    3 
    4     UIApplication *application = [UIApplication sharedApplication];
    5     id delegate = [application delegate];
    6     _xmppStream = [delegate xmppStream];
    7     //在主线程中注册回调
    8     [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
    9 }
    复制代码

        3.点击注册按钮,然后调取连接方法,连接方法中用到的用户名是用户自己输入的

    复制代码
     1 //用用户输入的用户名来创建连接
     2 -(void) xmppConnect
     3 {
     4     NSString *userName = self.userNameTextField.text;
     5     
     6     //创建JID
     7     XMPPJID *jid = [XMPPJID jidWithUser:userName domain:MYDOMAIN resource:@"iPhone"];
     8     
     9     //把Jid添加到流
    10     [self.xmppStream setMyJID:jid];
    11     
    12     //连接服务器
    13     NSError *error = nil;
    14     [self.xmppStream connectWithTimeout:10 error:&error];
    15     if (error) {
    16         NSLog(@"连接错误%@",[error localizedDescription]);
    17     }
    18 }
    复制代码

        4.实现连接成功后回调的方法,在本方法中注册我们的用户密码,代码如下:

    复制代码
     1 //连接成功后,注册用户
     2 -(void)xmppStreamDidConnect:(XMPPStream *)sender
     3 {
     4     
     5     [self alterWithTip:@"openfire服务器已连接"];
     6     
     7     NSString *password = self.passwordTextField.text;
     8     
     9     NSError *error = nil;
    10     [self.xmppStream registerWithPassword:password error:&error];
    11     if (error) {
    12         NSLog(@"注册错误%@",[error localizedDescription]);
    13     }
    14 }
    复制代码

        5.实现注册成功后的回调方法,注册成功后,认证密码:

    复制代码
     1 //注册成功后,认证用户密码
     2 -(void)xmppStreamDidRegister:(XMPPStream *)sender
     3 {
     4     [self alterWithTip:@"用户注册成功"];
     5     
     6     //注册成功后认证用户名和密码
     7     NSError *error = nil;
     8     [self.xmppStream authenticateWithPassword:self.passwordTextField.text error:&error];
     9     if (error) {
    10         NSLog(@"认证错误%@",[error localizedDescription]);
    11     }
    12 }
    复制代码

        6.实现认证成功后的回调

    1 //认证成功后的回调
    2 -(void)xmppStreamDidAuthenticate:(XMPPStream *)sender
    3 {
    4     [self alterWithTip:@"登陆成功"];
    5 }

        7.实现认证失败后的回调

    1 //认证失败的回调
    2 -(void)xmppStream:sender didNotAuthenticate:(DDXMLElement *)error
    3 {
    4     [self alterWithTip:@"用户名和密码错误"];
    5 }

      三、注意问题

        如果你输入的账号是已经注册过的账号,会提示注册失败。

      今天的博客先到这儿,欢迎批评指正~

  • 相关阅读:
    P4091 [HEOI2016/TJOI2016]求和(第二类斯特林数+NTT)
    CF960G Bandit Blues(第一类斯特林数)
    loj#2542. 「PKUWC2018」随机游走(树形dp+Min-Max容斥)
    mysql修改原始密码
    MySQL基础命令小结
    pip安装python包出错:Could not find a version that satisfies the requirement skimage (from versions: )
    python 安装whl文件
    python中使用anaconda对不平衡数据的处理包imblearn的安装
    数据分析-合辑
    No module named ‘sklearn.model_selection解决办法
  • 原文地址:https://www.cnblogs.com/xieweikai/p/6826819.html
Copyright © 2020-2023  润新知