zoukankan      html  css  js  c++  java
  • 【iOS XMPP】使用XMPPFramewok(二):用户登录

    转自:http://www.cnblogs.com/dyingbleed/archive/2013/05/10/3069397.html

    用户登录

    准备工作

    比较知名的开源XMPP服务器:一个是Openfire,一个是ejabberd

    Openfire 使用 Java 语言编写,比较容易上手,地址:http://www.igniterealtime.org/projects/openfire/

    ejabberd 使用 Erlang 语言编写,是一款非常知名的 Erlang 开源项目,地址:http://www.ejabberd.im/

    安装 ejabberd,可以参考我的博客:【ejabberd】安装XMPP服务器ejabberd(Ubuntu 12.04)

    搭建一个自己的 XMPP 服务器之后,就让我们开始吧!

    连接服务器

    1、新建一个 XMPPStream 对象,添加委托

    添加委托方法 - (void)addDelegate:(id)delegate delegateQueue:(dispatch_queue_t)delegateQueue

    参数 delegateQueue 为委托回调所使用的 GCD 队列,dispatch_get_main_queue() 获取主线程 GCD 队列

    2、设置 JID 和 主机名

    JID 一般由三部分构成:用户名,域名和资源名,例如 test@example.com/Anthony

    如果没有设置主机名,则使用 JID 的域名作为主机名

    端口号是可选的,默认是 5222

    3、连接

    复制代码
    - (void)connect {
        if (self.xmppStream == nil) {
            self.xmppStream = [[XMPPStream alloc] init];
            [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
        }
        
        if (![self.xmppStream isConnected]) {
            NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:@"username"];
            XMPPJID *jid = [XMPPJID jidWithUser:username domain:@"lizhen" resource:@"Ework"];
            [self.xmppStream setMyJID:jid];
            [self.xmppStream setHostName:@"10.4.125.113"];
            NSError *error = nil;
            if (![self.xmppStream connect:&error]) {
                NSLog(@"Connect Error: %@", [[error userInfo] description]);
            }
        }
    }
    复制代码

    身份认证

    实现 - (void)xmppStreamDidConnect:(XMPPStream *)sender 委托方法

    连接服务器成功后,回调该方法

    This method is called after the XML stream has been fully opened. More precisely, this method is called after an opening <xml/> and <stream:stream/> tag have been sent and received, and after the stream features have been received, and any required features have been fullfilled. At this point it's safe to begin communication with the server.

    身份认证方法 - (BOOL)authenticateWithPassword:(NSString *)inPassword error:(NSError **)errPtr

    复制代码
    - (void)xmppStreamDidConnect:(XMPPStream *)sender {
        NSString *password = [[NSUserDefaults standardUserDefaults] objectForKey:@"password"];
        NSError *error = nil;
        if (![self.xmppStream authenticateWithPassword:password error:&error]) {
            NSLog(@"Authenticate Error: %@", [[error userInfo] description]);
        }
    }
    复制代码

     

    上线

    实现 - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender 委托方法

    身份认证成功后,回调该方法

    This method is called after authentication has successfully finished. 

    If authentication fails for some reason, the xmppStream:didNotAuthenticate: method will be called instead.

    新建一个 XMPPPresence 对象,类型为 available,发送!

    - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender {
        XMPPPresence *presence = [XMPPPresence presenceWithType:@"available"];
        [self.xmppStream sendElement:presence];
    }

    退出并断开连接

    新建一个 XMPPPresence 对象,类型为 unavailable,发送!

    断开连接

    - (void)disconnect {
        XMPPPresence *presence = [XMPPPresence presenceWithType:@"unavailable"];
        [self.xmppStream sendElement:presence];
        
        [self.xmppStream disconnect];
    }
    Android 开发讨论群:84778336 
    iOS 开发讨论群:82873648 

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用 3.0 许可协议进行许可。
    转载请署名李震(博客地址:http://www.cnblogs.com/dyingbleed/),且不得用于商业目的。
  • 相关阅读:
    配置别名
    Git永久删除commit--[非教程]
    忽略特殊文件
    自定义Git
    使用GitHub
    模块化开发的几种思想AMD,CMD,commonJS,es6
    angualr设置select默认值
    在vue-cli中引入jquery的坑
    chromedriver@2.33.2 install: `node install.js` vue脚手架安装报错
    vue事件绑定demo
  • 原文地址:https://www.cnblogs.com/wangpei/p/4126543.html
Copyright © 2011-2022 走看看