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 }

  三、注意问题

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

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

时间: 2024-12-18 11:44:55

iOS开发之使用XMPPFramework实现即时通信(三)的相关文章

iOS开发之使用XMPPFramework实现即时通信

iOS开发之使用XMPPFramework实现即时通信 关于XMPP的理论介绍在本篇博客中就不做赘述了,如何在我们之前的微信中加入XMPP协议来实现通信呢?下面将会介绍一下XMPP的基本的知识,让我们的微信可以实现互联通信.要做的准备工作是要有服务器支持XMPP协议,然后通过spark注册个测试账号,最后就可以通过XMPP用我们已有的账号和密码进行通信啦.至于如何使服务器支持XMPP协议,如何通过Spark注册账号,不是本篇博客的论述主题,本篇博客中主要是如何在我们的App中使用XMPP协议.

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

上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测试,当然也少不了Openfire服务器,在这就不详述Openfire的安装过程了(网上的教程还是蛮多的),Openfire的安装仅需要一个数据库的支持,本篇是用的MySql数据库.当然这不是本篇的重点. 废话少说,切入今天的正题.今天要给之前的微信加入登陆,获取好友列表,聊天(发送文字,表情,图片,

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

关于XMPP的理论介绍在本篇博客中就不做赘述了,如何在我们之前的微信中加入XMPP协议来实现通信呢?下面将会介绍一下XMPP的基本的知识,让我们的微信可以实现互联通信.要做的准备工作是要有服务器支持XMPP协议,然后通过spark注册个测试账号,最后就可以通过XMPP用我们已有的账号和密码进行通信啦.至于如何使服务器支持XMPP协议,如何通过Spark注册账号,不是本篇博客的论述主题,本篇博客中主要是如何在我们的App中使用XMPP协议. 今天的博客中的内容是如何在工程中引入XMPPFramew

iOS开发多线程篇—线程间的通信

iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelector:(SE

iOS开发多线程篇—线程间的通信(转)

这里转载 给自己一个备份 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelector:(SEL)aS

iOS开发UI篇—Quartz2D简单使用(三)

iOS开发UI篇-Quartz2D简单使用(三) 一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界面搭建,如图: 代码示例: YYViewController.m文件 1 // 2 // YYViewController.m 3 // 04-对圆进行缩放 4 // 5 // Created by apple on 14-6-11. 6 // Copyright (c) 2014年 itcase.

iOS开发——淫技篇&iOS开发中各种淫技总结(三)

iOS开发中各种淫技总结(三) 一:send和awk解释 sed -n p filenamesed ----------------------------是一个流编辑器(stream editor) awk ‘BEGIN {print “Hellow"}'awk --------是一种用于处理文本的编程语言工具. 二:传值方式总结 KVO底层会动态长生新的类,只能坚挺属性(一个对象的属性能背多个兑现监听,一个对象能监听多个对象的其他属性) kvc/kvo底层是基于runtime 代理,规范,代

XE6 /XE8 & IOS开发之免证书真机调试三步走,生成iPA文件并安装到其它苹果设备上

XE6 & IOS开发之免证书真机调试(1):颁发属于自己的App签名证书(有图有真相) XE6 & IOS开发之免证书真机调试(2):连接真机并运行App(有图有真相) XE6 & IOS开发之免证书真机调试(3):生成iPA文件并安装到其它苹果设备上(有图有真相) XE8 & IOS开发之免费证书真机调试:开发证书.AppID.开发授权profile的申请,附Debug真机调试演示(XCode7 Beta版或以上版本适用,有图有真相)

iOS开发多线程篇---线程间的通信

线程间通信的表现: 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 下面是一个下载图片的例子: @interface BTThreadViewController () {     UIImageView *imagev; } @end - (void)viewDidLoad {     [super viewDidLoad];          imagev = [[UIImageView alloc] initWithFrame:CGRectMake(