码迷,mamicode.com
首页 > 移动开发 > 详细

【iOS XMPP】使用XMPPFramewok(二):用户登录

时间:2014-11-27 18:07:24      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:des   blog   http   io   ar   os   使用   sp   java   

转自: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、连接

bubuko.com,布布扣
- (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]);
        }
    }
}
bubuko.com,布布扣

 

身份认证

实现 - (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

bubuko.com,布布扣
- (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]);
    }
}
bubuko.com,布布扣

 

上线

实现 - (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];
}

 

 

【iOS XMPP】使用XMPPFramewok(二):用户登录

标签:des   blog   http   io   ar   os   使用   sp   java   

原文地址:http://www.cnblogs.com/wangpei/p/4126543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!