XMPP iOS客户端实现三:登录、注册

1.创建一个单例模式来管理xmpp的连接和操作


 1 +(XMPPManager *)share
2 {
3 static XMPPManager *_share=nil;
4 static dispatch_once_t onceToken;
5 dispatch_once(&onceToken, ^{
6 _share=[[XMPPManager alloc] init];
7 });
8 return _share;
9 }
10 -(id)init
11 {
12 if (self=[super init]) {
13 [self setupStream];
14 }
15 return self;
16 }
17 - (void)setupStream
18 {
19 xmppStream = [[XMPPStream alloc] init];
20    [xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
21 [xmppStream setHostName:@"127.0.0.1"];
22 [xmppStream setHostPort:5222];
23 }

2.登录和注册都需要使用用户名进行连接服务器,


-(void)login
{
[self connect];
}
-(void)reg
{
isReg=YES;
[self connect];
}
- (BOOL)connect
{
if (xmppStream.isConnected) {
[self disconnect];
}
if (![xmppStream isDisconnected]) {
return YES;
}

if (self.userName == nil) {
return NO;
}

[xmppStream setMyJID:[XMPPJID jidWithString:self.userName]];

NSError *error = nil;
if (![xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error])
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting"
message:@"See console for error details."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];

return NO;
}

return YES;
}

3.在连接代理中判断是登录还是注册,发送不同命令


//成功连接服务器
- (void)xmppStream:(XMPPStream *)sender socketDidConnect:(GCDAsyncSocket *)socket
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}
//连接服务器失败
- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

}
- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

NSError *error = nil;
if (isReg)
{
if (![xmppStream registerWithPassword:self.pwd error:&error])
{

}
}
else
{
if (![xmppStream authenticateWithPassword:self.pwd error:&error])
{

}
}

}

4.处理登录或注册代理函数


//登录成功
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

[self goOnline];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"登录成功"
message:@"登录成功"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
}
//登录失败
- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"密码错误"
message:@"密码错误"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];

}
//注册成功
- (void)xmppStreamDidRegister:(XMPPStream *)sender
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"注册成功"
message:@"注册成功"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
isReg=NO;
}
//注册失败
- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
NSLog(@"%@",[[error elementForName:@"error"] stringValue]);
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"注册失败"
message:@"注册失败"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
isReg=NO;
}

5.登录或注册的用户名必须“[email protected]主机名”这种格式

转载请注明:http://www.cnblogs.com/bandy/p/3756492.html

时间: 2024-08-25 00:25:24

XMPP iOS客户端实现三:登录、注册的相关文章

【Tech】XMPP IOS客户端(三)

上一篇实现了一个美(hen)化(chou)的聊天界面,这一篇加上发送语音和图片的功能. 其实发送语音和图片最好的办法是一端上传到服务器,另一端从服务器下载:或者用File Transfer,无奈上述第一种我不会,第二种调不通,有大神路过,望不吝指教(Orz) 我这里就是直接把语音和图片都编码为base64格式,然后放在消息里面发送过去了,其中语音是录音得到,图片则掉用相机拍摄得到. 1.发送语音 设置一个录音按钮,实现点击以下录音,再点击以下停止的功能,并且在停止后,编码为base64发送出去.

仿制新浪微博iOS客户端之四-未登录页面处理

写在最前:非常抱歉,前期因为个人原因有二十多天的时间没有再继续更新这个专题,期间仅仅是完成了苹果官方的UIStackView的文档的翻译.在这里我们将继续未完成的任务,继续做下去!现在继续! 一.前期总结 在完成第三篇的任务后,我们实际上完成的效果如下: 目前我们已经能保证界面的顺利切换,并且给微博的撰写按钮预留了点击事件接口,再下一步,我们将要完成在用户登录前的所有准备工作. 二.抽取基类 目前我们在首页.消息.发现.我这四个界面中使用的都是UITableViewController来加载和显

XMPP iOS客户端实现二:xcode项目配置

1.下载XMPPFramework,下载地址:https://github.com/robbiehanson/XMPPFramework 2.创建项目并将XMPP库引入: 3.添加需要的库文件: 4.配置KissXML: OTHER_LDFLAGS  添加  -lxml2 HEADER_SEARCH_PATHS 添加  /usr/include/libxml2

XMPP iOS客户端 添加好友 (3)

这里记录下我实现添加好友的过程,网上虽然也有相应的例子,但说的不是很全面,其中有一篇没有给出 XMPPRoster类的初始化.我找这个类的初始化设置找了好久.不多说啦.下面开始贴代码啦. 初始化XMPPRoster   对象声明 @interface XMPPModel()<XMPPStreamDelegate,XMPPRosterDelegate> @property (nonatomic , strong) XMPPStream *xmppStream; @property (nonato

XMPP iOS客户端开发(二) 通信

发送消息: - (void) sendMessage:(NSString *) message toUser:(NSString *) user { NSXMLElement *body = [NSXMLElement elementWithName:@"body"]; body.stringValue = message; NSXMLElement *msg = [NSXMLElement elementWithName:@"message"]; [msg add

开源中国iOS客户端学习

开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html 开源中国iOS客户端学习——序 说到这款开源软件就得提到她的娘家了--开源中国社区: 开源中国社区简介:开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区.传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现.使用.并交流开源技术的平台.目前开源中国社区已收

Java业务逻辑结合MySQL实现登录注册(XMPP协议的运用)

XMPP协议: 通信协议是一种约定的规则,XMPP也无外乎是一种接口规则.简单的说XMPP协议是一种标记格式的文本串. 举例: <msg><send>hxjava</send><content>helloworld</content></msg> 学习了XMPP协议之后,就实现C/S的登录注册操作,这一次的登录操作就不像以前那样用一些Map容器存储数据了. 存储数据要用数据库,这样不仅便于数据管理维护,而且数据不容易丢失,建立Map容

iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息

Demo地址:https://github.com/ChenNan-FRAM/Fenvo (如果你觉得有用麻烦star一下感激不尽) Fenvo Objective-C, iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息.在这个过程我是遇到很多的问题,但是大部分都顺利解决了,相信如果你的项目有类似的地方我的项目里面也能够给你提供一定的帮助,如果需要,可以给我留言或者在Github上联系我. UI简陋,暂未完善.有UI大师指点就最好了. 这个应用我是从开始学后为了实践自己的能力一直在

XMPP登录注册好友群组_实战教学1

1. 环境准备:openfire + mysql 5.1.6 + Xcode5 + XMPP.Framework (至于环境的配置, 请自己百度, 推荐: http://www.cnblogs.com/xiaodao/archive/2013/04/05/3000554.html) 2. cocoapods 1 platform :ios, '7.0' 2 pod "XMPPFramework", "~>3.6.4" 3.工程: ARC + COREDATA