XMPP实现用户登录与注销

登录:

步骤:
 * 在AppDelegate实现登录

  • 1. 初始化XMPPStream
  • 2. 连接到服务器[传一个JID]
  • 3. 连接到服务成功后,再发送密码授权
  • 4. 授权成功后,发送"在线" 消息

一:导入框架,根据上一篇文章的说明去导入相应的库与文件

二:定义一个XMPP的成员变量

XMPPStream * }

三:按步骤在代理方法中声明四个需要实现的方法

 // 1. 初始化XMPPStream
 -(void)setupXMPPStream;

 // 2.连接到服务器
 -(void)connectToHost;

 // 3.连接到服务成功后,再发送密码授权
 -(void)sendPwdToHost;

 // 4.授权成功后,发送"在线" 消息
 -(void)sendOnlineToHost;
 四:在程序启动的时候调用链接服务器主机的方法
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

     // 程序一启动就连接到主机
     [self connectToHost];
     return YES;
 }

链接服务器主机方法的实现,在链接服务器主机方法中,如果链接成功则初始化XMPPStream

 #pragma mark 连接到服务器
 -(void)connectToHost{
     NSLog(@"开始连接到服务器");
     if (!_xmppStream) {
         [self setupXMPPStream];
     }

     // 设置登录用户JID
     //resource 标识用户登录的客户端 iphone android

     XMPPJID *myJID = [XMPPJID jidWithUser:@"wangwu" domain:@"teacher.local" resource:@"iphone" ];
     _xmppStream.myJID = myJID;

     // 设置服务器域名
     _xmppStream.hostName = @"teacher.local";//不仅可以是域名,还可是IP地址

     // 设置端口 如果服务器端口是5222,可以省略
     _xmppStream.hostPort = ;

     // 连接
     NSError *err = nil;
     if(![_xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&err]){
         NSLog(@"%@",err);
     }

 }

与主机连接的代理方法

 #pragma mark -XMPPStream的代理
 #pragma mark 与主机连接成功
 -(void)xmppStreamDidConnect:(XMPPStream *)sender{
     NSLog(@"与主机连接成功");

     // 主机连接成功后,发送密码进行授权
     [self sendPwdToHost];
 }
 #pragma mark  与主机断开连接
 -(void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{
     // 如果有错误,代表连接失败
     NSLog(@"与主机断开连接 %@",error);

 }

初始化XMPPStream方法的实现

 #pragma mark  -私有方法
 #pragma mark 初始化XMPPStream
 -(void)setupXMPPStream{

     _xmppStream = [[XMPPStream alloc] init];

     // 设置代理
     [_xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, )];
 }

五:发送密码授权

 #pragma mark 连接到服务成功后,再发送密码授权
 -(void)sendPwdToHost{
     NSLog(@"再发送密码授权");
     NSError *err = nil;
     [_xmppStream authenticateWithPassword:" error:&err];
     if (err) {
         NSLog(@"%@",err);
     }
 }

六:授权成功后,发送状态消息

 #pragma mark  授权成功后,发送"在线" 消息
 -(void)sendOnlineToHost{

     NSLog(@"发送 在线 消息");
     XMPPPresence *presence = [XMPPPresence presence];
     NSLog(@"%@",presence);

     [_xmppStream sendElement:presence];

 }

七:授权成功与失败的代理方法

 #pragma mark 授权成功
 -(void)xmppStreamDidAuthenticate:(XMPPStream *)sender{
     NSLog(@"授权成功");

     [self sendOnlineToHost];
 }

 #pragma mark 授权失败
 -(void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error{
      NSLog(@"授权失败 %@",error);
 }

注销

一:在代理中定义并且实现一个注销的方法

-(void)logout;

 #pragma mark -公共方法
 -(void)logout{
     // 1." 发送 "离线" 消息"
     XMPPPresence *offline = [XMPPPresence presenceWithType:@"unavailable"];
     [_xmppStream sendElement:offline];

     // 2. 与服务器断开连接
     [_xmppStream disconnect];
 }

二:实现注销--这里我们只实现点击屏幕就注销并且推出

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     // 做注销
     AppDelegate *app = [UIApplication sharedApplication].delegate;
     [app logout];

 }
 

iOS开发——网络编程OC篇&(二)XMPP实现用户登录与注销的更多相关文章

  1. iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备

    XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...

  2. iOS开发——网络编程OC篇&Socket编程

    Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作 ...

  3. iOS开发——网络编程OC篇&使用WebView构建HyBird应用

    使用WebView构建HyBird应用 HyBird是一种本地技术与Web相结合,能过实现跨平台的移动应用开发,最常用的一个框架:PhoneGap 一:首先,写好html代码 <!DOCTYPE ...

  4. iOS开发——网络编程OC篇&GCDAsyncSocket编程

    GCDAsyncSocket编程 同上一篇文章一样,这里也是使用Socket实现一个聊天室,但是这里使用的是一个常用的框架实现的:GCDAsyncSocket 一:导入这个框架 二:声明这个Socke ...

  5. iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据

    网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...

  6. iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  7. iOS开发——网络编程Swift篇&(二)同/异&步请求

    同/异&步请求 同步: // MARK: - 同步请求 func httpSynchronousRequest() { //创建NSURL对象 var url:NSURL! = NSURL(s ...

  8. iOS开发——网络编程Swift篇&Alamofire详解

    Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...

  9. iOS开发——网络编程Swift篇&(八)SwiftyJSON详解

    SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...

随机推荐

  1. jquery 分页控件(一)

    以前一直都是用别人的分页控件,虽然用得很爽,但总觉的还是自己写个小插件比较好,这个插件效果.代码等都有参照别人完成的控件.即便功能并不是那么完善,扩展性也不好,bug或许还很多.个人觉得,适合自己用就 ...

  2. android Bitmap getByteCount和getRowBytes

    今天做图像缓存需要计算Bitmap的所占的内存空间,于是研究了下Bitmap关于内存占用的API 1.getRowBytes:Since API Level 1,用于计算位图每一行所占用的内存字节数. ...

  3. POJ 1655-Balancing Act(树形dp)

    题意: 求n个节点的树中哪个节点删除以后得到的最大连通分量最小. 分析:同上题 #include <map> #include <set> #include <list& ...

  4. #ifdef _cplusplus (转)

    原文不可考,转载链接:http://blog.csdn.net/owldestiny/article/details/5772916 有发现原文的请告知,我会及时更新. 时常在cpp的代码之中看到这样 ...

  5. 对单片机的modbus RTU的详细解释(转载)

    Modbus 一个工业上常用的通讯协议.一种通讯约定.Modbus协议包括RTU.ASCII.TCP.其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现.虽然RTU比较简单,但是看协议资料 ...

  6. 解决adb问题的方法

    The connection to adb is down,and a server error has occured. 在网上找的那个高端方法根本不管用,来,试试我的方法.. 先装个360手机助手 ...

  7. hdu4123-Bob’s Race(树形dp+rmq+尺取)

    题意:Bob想要开一个运动会,有n个房子和n-1条路(一棵树),Bob希望每个人都从不同的房子开始跑,要求跑的尽可能远,而且每条路只能走最多一次.Bob希望所有人跑的距离的极差不大于q,如果起点的编号 ...

  8. Hadoop MapReduce概念学习系列之JobTracker、ResourceManager、Task Tracker、NodeManager(二十一)

    Tracker是跟踪者,跟踪器.JobTracker是项目经理.在hadoop2*的0.23版本之后,改叫RM了.ResourceManager.TaskTracker是小组长.它手下,还有具体搬砖的 ...

  9. [iOS基础控件 - 4.3] APP列表 xib的使用

    A.storyboard和xib 1.storyboard: 相对xib较重量级,控制整个应用的所有界面 2.xib: 轻量级,一般用来描述局部界面   B.使用 1.新建xib文件 New File ...

  10. [Objective-c 基础 - 3.4] protocol

    A.概念 1.用来声明方法(不能声明成员变量) 2.只要某个类遵守了这个协议,相当于拥有了协议中得所有方法的声明 3.属性 (1)@required:默认,要求实现,不实现就会发出警告 (2)@opt ...