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代码如下:

//XMPP数据流
@property (strong, nonatomic) XMPPStream * xmppStream;

 //创建xmppstream
 self.xmppStream = [[XMPPStream alloc]init];

 

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

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

//获取应用的xmppSteam(通过Application中的单例获取)
    UIApplication *application = [UIApplication sharedApplication];
    id delegate = [application delegate];
    self.xmppStream = [delegate xmppStream];

    //注册回调
    [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];

 

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

//连接服务器
-(void) xmppConnect
{
    //1.创建JID
    XMPPJID *jid = [XMPPJID jidWithUser:@"lizelusdut" domain:MY_DOMAIN resource:@"iPhone"];

    //2.把JID添加到xmppSteam中
    [self.xmppStream setMyJID:jid];

    //连接服务器
    NSError *error = nil;
    [self.xmppStream connectWithTimeout:10 error:&error];
    if (error) {
        NSLog(@"连接出错:%@",[error localizedDescription]);
    }
}

 

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

//连接后的回调
-(void)xmppStreamDidConnect:(XMPPStream *)sender
{
    //连接成功后认证用户名和密码
    NSError *error = nil;
    [self.xmppStream authenticateWithPassword:@"!@#admin" error:&error];
    if (error) {
        NSLog(@"认证错误:%@",[error localizedDescription]);
    }
}

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

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

 

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

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

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

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

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

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

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

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

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

ios-iOS 开发,基于GCDAsyncSocket的即时通讯是怎样在两个用户间完成的

问题描述 iOS 开发,基于GCDAsyncSocket的即时通讯是怎样在两个用户间完成的 iOS 开发,基于GCDAsyncSocket的即时通讯是怎样在两个用户间完成的?比如a发一条信息给b,这条信息是怎样经过服务器到达b的 解决方案 A即时发送端也是 接受端 开不同的端口去监听,B也一样,一直监听与A发送端 端口相同的接口,这样A发送数据到 服务端B的端口XXX B一直监听者自身端口的XXX 这样A发送的消息 B就可以接受到 解决方案二: 两个客户端都连在服务器上,各自发送数据给服务器,然

android-使用环信SDK开发即时通信功能(附源码下载)_Android

最近项目中集成即时聊天功能,挑来拣去,最终选择环信SDK来进行开发,选择环信的主要原因是接口方便.简洁,说明文档清晰易懂.文档有Android.iOS.和后台服务器端,还是非常全的.  环信官网:http://www.easemob.com/ 本篇文章目的主要在于说明环信Demo如何实现即时通信的.我在集成环信SDK到我们自己开发的app之前,研究了一下环信demo的代码,看了两三天的样子,基本搞清楚来龙去脉,但是只是清楚来龙去脉,要说到里面的细节可能得深一步研究,但是这就够了,已经可以把dem

android-使用环信SDK开发即时通信功能(附源码下载)

最近项目中集成即时聊天功能,挑来拣去,最终选择环信SDK来进行开发,选择环信的主要原因是接口方便.简洁,说明文档清晰易懂.文档有Android.iOS.和后台服务器端,还是非常全的. 环信官网:http://www.easemob.com/ 本篇文章目的主要在于说明环信Demo如何实现即时通信的.我在集成环信SDK到我们自己开发的app之前,研究了一下环信demo的代码,看了两三天的样子,基本搞清楚来龙去脉,但是只是清楚来龙去脉,要说到里面的细节可能得深一步研究,但是这就够了,已经可以把demo

文档-iOS 融云即时通信 如何新建群,不是讨论组

问题描述 iOS 融云即时通信 如何新建群,不是讨论组 文档-iOS 融云即时通信 如何新建群,不是讨论组-qq新建讨论组"> 如图,找到官方文档如图所示 要传入用户ID 和群名 以及 群ID ,但是 我是要新建群,压根就没有群ID,总不可能我自己随机个群ID吧, 求大神来解惑,指点迷境. 解决方案 看接口需要传入的参数,应该是加入群组.但说明又是创建群组,好像是有一点冲突! 创建群组,与将用户加入群组,肯定是两个方法/接口. 解决方案二: 这个api只是加入群,你需要看川剧的API

android开发-LeanChat (LeanClou即时通信工具) 官网的Demo跑不了,求解

问题描述 LeanChat (LeanClou即时通信工具) 官网的Demo跑不了,求解 最近公司要做即时通信,考查了一下市面上的即时通信工具,知乎上有编章推荐LeanCloud,但是官网上的 Demo下下来跑不了,报各种错,不知道是Demo的问题还是哪里没配置好,求哪位好心人 用过LeanCloud的发个可以直接跑起来的Demo给我,万谢 解决方案 https://github.com/leancloud/leanchat-ios

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.       下载:https://github.com/mwaterfall/MWPhotoBrowser   目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Gith