XMPP完成注册和登录

iOS中XMPP简单聊天实现 注册和登录



目录

1. 创建工程,完成简单页面的搭建


页面搭建

2.在登录页面(主页面)完成属性连线


登录页面

注册页面

3.创建文件夹,导入xmpp框架,配置工程


导入静态库

加上-lxml2

/usr/include/libxml2 或者 $(SDKROOT)/usr/include/libxml2

创建pch文件后,加上pch文件的路径:工程名/pch文件名


pch文件中要导入UIKit框架


导入框架,配置工程,创建文件夹等

4.封装xmppManager类

接口文件:
#import <Foundation/Foundation.h>#import "XMPPFramework.h"  // 该类主要封装了xmpp的常用方法@interface XMPPManager : NSObject<XMPPStreamDelegate>//通信管道,输入输出流@property(nonatomic,strong)XMPPStream xmppStream;//单例方法+(XMPPManager )defaultManager;//登录的方法-(void)loginwithName:(NSString )userName andPassword:(NSString )password;//注册-(void)registerWithName:(NSString )userName andPassword:(NSString )password;-(void)logout;@end
实现文件:

单例:

#pragma mark 单例方法的实现+(XMPPManager )defaultManager{    static XMPPManager manager = nil;    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        manager = [[XMPPManager alloc]init];    });    return manager;}

重写init方法:

-(instancetype)init{    if ([super init]){   //1.初始化xmppStream,登录和注册的时候都会用到它    self.xmppStream = [[XMPPStream alloc]init];     //设置服务器地址,这里用的是本地地址(可换成公司具体地址)    self.xmppStream.hostName = @"127.0.0.1";//    设置端口号    self.xmppStream.hostPort = 5222;//    设置代理    [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];    }    return self;}

注销的实现:

-(void)logout{//表示离线不可用    XMPPPresence *presence = [XMPPPresence presenceWithType:@"unavailable"];//向服务器发送离线消息    [self.xmppStream sendElement:presence]; //断开链接    [self.xmppStream disconnect];}

接下来实现登录的方法:

 1.初始化一个xmppStream
 2.连接服务器(成功或者失败)
 3.成功的基础上,服务器验证(成功或者失败)
 4.成功的基础上,发送上线消息
-(void)loginwithName:(NSString )userName andPassword:(NSString )password{//标记连接服务器的目的    self.connectServerPurposeType = ConnectServerPurposeLogin;//这里记录用户输入的密码,在登录(注册)的方法里面使用    self.password = password;//  创建xmppjid(用户0,  @param NSString 用户名,域名,登录服务器的方式(苹果,安卓等)    XMPPJID *jid = [XMPPJID jidWithUser:userName domain:@"chenyuan" resource:@"iPhone8"];    self.xmppStream.myJID = jid;    //连接到服务器    [self connectToServer];}

连接到服务器的方法:

-(void)connectToServer{    //如果已经存在一个连接,需要将当前的连接断开,然后再开始新的连接    if ([self.xmppStream isConnected]) {        [self logout];    }    NSError error = nil;    [self.xmppStream connectWithTimeout:30.0f error:&error];    if (error) {        NSLog(@"error = %@",error);    }}

连接到服务器有可能成功或者失败,所以有相对应的代理方法,首先要在遵循协议:<XMPPStreamDelegate>
xmppStream的代理方法:
//连接服务器失败的方法-(void)xmppStreamConnectDidTimeout:(XMPPStream )sender{    NSLog(@"连接服务器失败的方法,请检查网络是否正常");}
//连接服务器成功的方法-(void)xmppStreamDidConnect:(XMPPStream )sender{    NSLog(@"连接服务器成功的方法");//登录    if (self.connectServerPurposeType == ConnectServerPurposeLogin) {        NSError error = nil;//向服务器发送密码验证 //验证可能失败或者成功        [sender authenticateWithPassword:self.password error:&error];    }//注册    else{        //向服务器发送一个密码注册(成功或者失败)        [sender registerWithPassword:self.password error:nil];    }}

连接成功后,需要进行验证,注册和登录都需要,就写在一起了。
//验证成功的方法-(void)xmppStreamDidAuthenticate:(XMPPStream )sender{    NSLog(@"验证成功的方法");    /*       unavailable 离线       available  上线       away  离开       do not disturb 忙碌
     /    XMPPPresence presence = [XMPPPresence presenceWithType:@"available"];    [self.xmppStream sendElement:presence];}

//验证失败的方法-(void)xmppStream:(XMPPStream )sender didNotAuthenticate:(DDXMLElement )error{    NSLog(@"验证失败的方法,请检查你的用户名或密码是否正确,%@",error);}

注册:
-(void)registerWithName:(NSString )userName andPassword:(NSString )password{    self.password = password;//0.标记连接服务器的目的    self.connectServerPurposeType = ConnectServerPurposeRegister;//1. 创建一个jid    XMPPJID jid = [XMPPJID jidWithUser:userName domain:@"chenyuan" resource:@"iPhone8"]; //2.将jid绑定到xmppStream    self.xmppStream.myJID = jid; //3.连接到服务器    [self connectToServer];}

注册也有代理方法:
#pragma mark 注册成功的方法-(void)xmppStreamDidRegister:(XMPPStream )sender{    NSLog(@"注册成功的方法");}#pragma mark 注册失败的方法-(void)xmppStream:(XMPPStream )sender didNotRegister:(DDXMLElement *)error{    NSLog(@"注册失败执行的方法");}

到这里简单的XMPPManager工具类就封装完了。接下来就是在登录页面和注册页面完成登录和注册。
需要注意的是:xmppStream设置代理的方法:addDelegate: delegateQueue:
    [[XMPPManager defaultManager].xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];

它可以添加多个代理,所以通过设置代理
在登录页面当检测到登录成功时,可以在登录验证成功的方法里面push到下一个页面;
在注册页面注册成功时可以在代理方法里面实现pop回主页面。

下面是登录页面和注册页面的实现文件:


登录页面

注册页面

到这里,一个简单的能注册和登录的xmpp就完成了。聊天和好友功能稍后会跟上。这个时候你已经可以打开你电脑上的openfile来查看登录你的登录状态了。如果你还不会openfile服务器的配置,点击这里查看

注意:用户名和密码暂时都是根据服务器得到的,自己可以配置服务器来得到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值