XMPP基本应用一

XMPP实现简单的登陆和注册功能的基本步骤

配置相应的文件:
A.向工程中导入XMPP包
B.在工程中加入:libxml2.tbd和libresolv.tbd两个库文件
C.在Build Settings->Search Paths->Header Search Paths添加/user/include/libxml2
D.根据提示修改剩下的错误

主要代码步骤:
1、创建一个继承自NSObject的单例类,创建一个单例对象,用于管理客户端和服务器的连接
2、重写init方法,创建唯一的管道对象,用于连接客户端和服务器端,并设置管道对象的属性和代理
注意:XMPPStream的代理用 _stream addDelegate:<#(id)#> delegateQueue:<#(dispatch_queue_t)#>方法添加,跟之前的代理属性设置不同
3、创建一个连接方法,方法中判断连接是否存在,如果存在,则断开旧的连接,再创建新的连接。
4.根据用户名和密码,实现登陆和注册,并实现相应的代理方法(6个)

//主要代码
单例类
.h文件中

import

import “XMPPManager.h”

pragma mark———-导入包

import “XMPPFramework.h”

//声明一个枚举值,列举连接状态
typedef enum : NSUInteger {
ConnectTypeLogin,
ConnectTypeRegister
} ConnectType;

@interface XMPPManager ()

//创建管道对象
@property(nonatomic,strong) XMPPStream *stream;

//创建一个状态枚举值,存储连接状态
@property(nonatomic,assign) ConnectType connectType;

//暂存登陆密码
@property(nonatomic,copy) NSString *loginPassWord;

//暂存注册密码
@property(nonatomic,copy) NSString *registerPassWord;

@end

@implementation XMPPManager

//创建一个单例对象
+ (instancetype)sharedXMPPManager{

static XMPPManager *xmppManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    xmppManager = [[XMPPManager alloc] init];
});
return xmppManager;

}

//重写初始化方法,创建一个管道对象(连接客户端和服务器端)
- (instancetype)init{
if (self = [super init]) {

    //创建管道对象
    _stream = [[XMPPStream alloc] init];
    //设置管道连接的服务器IP地址
    _stream.hostName = kHostName;
    //设置管道连接的服务器端口号,确定该管道功能
    _stream.hostPort = kHostPort;
    //设置管道的代理
    [_stream addDelegate:self delegateQueue:dispatch_get_main_queue()];

    }
return self;

}

//创建连接功能
-(void)connect{

//判断管道是否存在连接,如果存在,则断开旧的连接,进行新的连接
if ([_stream isConnected]) {

    //断开连接

    //创建xml存在的节点
    XMPPPresence *presence = [[XMPPPresence alloc] initWithType:@"unavaiable"];
    //设置管道节点
    [_stream sendElement:presence];
    //断开连接
    [_stream disconnect];
}
//连接服务器
[_stream connectWithTimeout:30.f error:nil];

}

//根据用户名和密码登陆
-(void)loginWithName:(NSString )userName passWord:(NSString )passWord{

//存储登陆状态
_connectType = ConnectTypeLogin;

//存储登陆密码
_loginPassWord = passWord;

//创建xmppJid对象,是用户标识,代表一个用户
XMPPJID *jid = [XMPPJID jidWithUser:userName domain:kDomin resource:kResource];
//将jid对象加入通道中
_stream.myJID = jid;
//创建连接
[self connect];

}

//根据用户名和密码注册
-(void)registerWithName:(NSString )userName passWord:(NSString )passWord{

//存储注册状态
_connectType = ConnectTypeRegister;

//存储注册密码
_registerPassWord = passWord;

//创建xmppJid对象,是用户标识,代表一个用户
XMPPJID *jid = [XMPPJID jidWithUser:userName domain:kDomin resource:kResource];
//将jid对象加入通道中
_stream.myJID = jid;
//创建连接
[self connect];

}

pragma mark————XMPPStreamDelegate

-(void)xmppStreamDidConnect:(XMPPStream *)sender{
NSLog(@”连接成功”);

//判断连接成功的是登陆状态还是注册状态
if (_connectType == ConnectTypeLogin) {
    //验证登陆密码
    [_stream authenticateWithPassword:_loginPassWord error:nil];
}
else{
    //验证注册密码 注册新用户
    [_stream registerWithPassword:_registerPassWord error:nil];
}

}

-(void)xmppStreamConnectDidTimeout:(XMPPStream *)sender{
NSLog(@”连接失败”);

}

//判断登陆验证是否成功
-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender{

NSLog(@"登陆验证成功");

//上线
XMPPPresence *presence = [[XMPPPresence alloc]initWithType:@"avaiable"];
[sender sendElement:presence];

}

-(void)xmppStream:(XMPPStream )sender didNotAuthenticate:(DDXMLElement )error{
NSLog(@”登陆验证失败,失败的原因%@”,error);

}

//判断注册是否成功
-(void)xmppStreamDidRegister:(XMPPStream *)sender{
NSLog(@”注册成功”);

}

-(void)xmppStream:(XMPPStream )sender didNotRegister:(DDXMLElement )error{
NSLog(@”注册失败,失败的原因%@”,error);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值