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

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

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

  今天的博客中的内容是如何在工程中引入XMPPFramework,并在App上可以连接并认证我们的账户和密码,好啦,废话少说,切入今天的正题。

  一.XMPPFramework的引入

    1.使用XMPP当然少不了框架的导入,还是用CocoaPods来管理第三方类库,在对应的工程中用CocoaPods引入XMPPFramework, 在Profile中添加相应版本的XMPPFramework框架,然后pod update一下安装即可,终端截图如下:

    2.update成功以后我们就可以用XMPPFramework干活了

  二.使用XMPPFramework连接服务器并认证密码

    1.在AppDelegate中声明并实例化XMPPStream,在获取XMPPStream实例时,和CoreData中的managedObjectContext类似,下面会给出代码,

      初始化XMPPSteam代码如下:

1 //XMPP数据流
2 @property (strong, nonatomic) XMPPStream * xmppStream;
3
4
5  //创建xmppstream
6  self.xmppStream = [[XMPPStream alloc]init];

    2.在使用XMPPFramework时,因为其用到是委托回调,所以要在相应的Controller中实现XMPPStreamDelegate协议,然后实现协议中相应的方法。

      (1).在使用XMPPStream的Controller中通过Application的delegate获取我们上面创建的xmppStream实例,代码如下:

1     //获取应用的xmppSteam(通过Application中的单例获取)
2     UIApplication *application = [UIApplication sharedApplication];
3     id delegate = [application delegate];
4     self.xmppStream = [delegate xmppStream];
5
6     //注册回调
7     [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];

     (2)获取XMPP流以后,就可以连接服务器了,连接服务器分为三部分,先拼接XMPPJID, 然后把JID添加到xmppStream中,最后连接。代码如下:

 1 //连接服务器
 2 -(void) xmppConnect
 3 {
 4     //1.创建JID
 5     XMPPJID *jid = [XMPPJID jidWithUser:@"lizelusdut" domain:MY_DOMAIN resource:@"iPhone"];
 6
 7     //2.把JID添加到xmppSteam中
 8     [self.xmppStream setMyJID:jid];
 9
10     //连接服务器
11     NSError *error = nil;
12     [self.xmppStream connectWithTimeout:10 error:&error];
13     if (error) {
14         NSLog(@"连接出错:%@",[error localizedDescription]);
15     }
16 }

    (3)实现连接服务器后要回调的方法(连接后要认证用户密码),代码如下

 1 //连接后的回调
 2 -(void)xmppStreamDidConnect:(XMPPStream *)sender
 3 {
 4     //连接成功后认证用户名和密码
 5     NSError *error = nil;
 6     [self.xmppStream authenticateWithPassword:@"[email protected]#admin" error:&error];
 7     if (error) {
 8         NSLog(@"认证错误:%@",[error localizedDescription]);
 9     }
10 }

    (4)实现认证成功后要回调的方法,代码如下:

//认证成功后的回调
-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
    NSLog(@"登陆成功");
}

    (5)认证失败后要调用的方法,代码如下:

1 //认证成功后的回调
2 -(void)xmppStream:sender didNotAuthenticate:(DDXMLElement *)error3 {4     NSLog(@"登陆失败");5 }
时间: 2024-10-12 01:04:13

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

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

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

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开发多线程篇---线程间的通信

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

我的iOS开发系列博文

之前目录性的总结了发表过的关于OC方面的文章,今天在目录性的总结一下有关iOS开发的文章.走过路过不要错过哦,今天的博文也全都是干货.写技术博客与大家交流一下思想也是不错的. 下面是我的技术博客中有关iOS开发的内容,有初级部分也有高级部分,有旧的东西,也有新的东西.咸蛋就先扯到这儿,正文走起: 我的iOS系列博文如下:   01.iOS开发之简单音频播放器 02.iOS开发之视图和视图控制器 03.iOS开发之绝对布局和相对布局(屏幕适配) 04.iOS开发之自动布局显示网络请求内容 05.i

文顶顶iOS开发博客链接整理及部分项目源代码下载

文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程却很难找.如果你是初学者,在学习了斯坦福iOS7公开课和跟着文顶顶的博客做项目之后,最快只需要2个月时间,就基本可以独立完成iOS App的开发工作.有经验的开发者也可以在该博客中寻找代码片段进行学习借鉴,必有所收获. 在此也向@文顶顶 表示严重感谢! 由于文顶顶博客博文繁多,每次找文章需要频繁的翻页,

iOS开发-多线程-线程间通讯

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