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 }
三、注意问题
如果你输入的账号是已经注册过的账号,会提示注册失败。
今天的博客先到这儿,欢迎批评指正~
作者:青玉伏案
出处:http://www.cnblogs.com/ludashi/
本文版权归作者和共博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果文中有什么错误,欢迎指出。以免更多的人被误导。
收简历:坐标美团(北京总部),长期招聘FE/iOS/Android靠谱工程师,入职后,可内部联系楼主,有小礼品赠送,有意者可邮箱投递简历:zeluli@foxmail.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?