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. Hibernate事务与并发问题处理(乐观锁与悲观锁)

    目录 一.数据库事务的定义 二.数据库事务并发可能带来的问题 三.数据库事务隔离级别 四.使用Hibernate设置数据库隔离级别 五.使用悲观锁解决事务并发问题 六.使用乐观锁解决事务并发问题 Hi ...

  2. JDK版本1.6和6.0到底指什么

    Both version numbers (1.6.0 and 6) are used to identify this release of the Java Platform. Version 6 ...

  3. erlang判断语法结构:if/case/guard

    erlang 有好几种常用的判断结构语句,如 if.case.guard 等.文章将分别对 if / case /guard 的特点做介绍,以及用例说明 1.if 结构 if Condition 1  ...

  4. 从ramdisk根文件系统启动Linux成功

    这几天参考国嵌的实验手册和网上的资料完成了u-boot定制.内核定制.ramdisk根文件系统的制作,并成功.趁热打铁,总结一下.本文引用了很多网络上的文章,就不一一注明了.感谢各大侠的帮助,如有雷同 ...

  5. CF GYM 100703A Tea-drinking

    题意:龙要制作n个茶,每个茶的配方是一个字符串,两个字符串之间有一个差值,这个差值为两个字符串每个对应字母之间差的绝对值的最大值,求制作所有茶时获得的所有差值中的最大值. 解法:克鲁斯卡尔.将茶的配方 ...

  6. web.xml 配置的详解

    http://my.oschina.net/u/1383439/blog/224448 http://blog.csdn.net/guihaijinfen/article/details/836383 ...

  7. lightoj 1015

    水题,统计大于0的和. #include<cstdio> int main(){ int t, n, tmp; scanf("%d", &t); for(int ...

  8. C#数据上传方法

    /// <summary> /// 连接成功后开始调用数据上传程序 /// </summary> public void CallDataUpload() { //指定上传日期 ...

  9. ios游戏开发--cocos2d学习(3)

    ------------继续上一节的内容. “接收触摸事件”: CCLayer类是用来接收触摸输入的.不过你要首先启用这个功能才可以使用它. self.isTouchEnabled = YES;//此 ...

  10. NIOP1995 石子合并(区间DP)

    状态转移方程在代码中标出 本题注意是圆形,所以之前要预先处理一下s数组.处理之后总长度为2*n-1.第一个合并的起点有n个,所以总的方案数是n 注释在代码中标出 http://www.rqnoj.cn ...