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:nilcancelButtonTitle:@"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:nilcancelButtonTitle:@"Ok"otherButtonTitles:nil];[alertView show];
}
//登录失败
- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error
{DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"密码错误"message:@"密码错误"delegate:nilcancelButtonTitle:@"Ok"otherButtonTitles:nil];[alertView show];}
//注册成功
- (void)xmppStreamDidRegister:(XMPPStream *)sender
{DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"注册成功"message:@"注册成功"delegate:nilcancelButtonTitle:@"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:nilcancelButtonTitle:@"Ok"otherButtonTitles:nil];[alertView show];isReg=NO;
}

5.登录或注册的用户名必须“username@主机名”这种格式

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

转载于:https://www.cnblogs.com/bandy/p/3756492.html

XMPP iOS客户端实现三:登录、注册相关推荐

  1. 番茄闹钟三(登录注册页面)

    一. axios 配置需求 axios 文档 配置 axios 配置 appid 和 appsecret 配置 gwt 验证的 gwt token 二. 安装 axios yarn add axios ...

  2. 开源中国iOS客户端学习

    开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

  3. 知乎iOS客户端下午瘫了 原来是第三方防火墙变更害的

    9月7日消息,下午有iOS知乎用户发现知乎服务器出现故障,知乎iOS客户端暂时不能登录.此外,有消息称知乎登录端口出现混乱,登录后提示出现"503"错误,更有网友反映登录之后账号串 ...

  4. APP登录注册 步骤三:客户端

    声明: 开发平台:AS 3.5 JDK版本:1.8 MySQL版本:5.7 JDBC驱动:mysql-connector-java-5.1.47.jar 1.项目架构: MainSecondActiv ...

  5. iOS开发之登录注册系统

    一.登录的种类划分: 1. 普通登录 2.使用独立系统的登录 3.单点登录 4. Oauth2.0登录 详细介绍如下: 1.普通登录: 普通的登录需求,要的就是一个登录页面,输入账号密码,提交Form ...

  6. iOS登录注册登录界面(UITextField)

    登录功能是我在湖畔做的第一个需求. 当时PD给我的草图和下图类似: (图片来自知乎iOS客户端登录界面) 不过需求中要求用户名或者密码错误时,输入框要抖动(类似Mac登录密码错误的抖动效果). 如果实 ...

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

    Demo地址:https://github.com/ChenNan-FRAM/Fenvo (如果你觉得有用麻烦star一下感激不尽) Fenvo Objective-C, iOS 类似简单的第三方微博 ...

  8. 【ios开发/Xcode】实现登录注册

    [ios开发/Xcode]实现登录注册 实现效果 源代码 实现效果 首先进入初始界面,输入账号Linchuantao,密码Linchuantao,显示登录失败(如下左图),因此需要进行注册,点击左下角 ...

  9. java注册登录客户端_GitHub - a-voyager/LoginSystem_Client: 登录注册系统(桌面客户端)——Java课程实践...

    基于HTTP协议和MySQL的多平台登录注册系统 摘要 基于HTTP协议和MySQL的多平台登录注册系统主要用于模拟演示互联网中常见的BS/CS模式登录注册系统.目前网络互访一般基于两种协议HTTP协 ...

最新文章

  1. QEMU虚拟机关键源代码学习
  2. 7.STM32中对DMA_Config()函数的理解(自定义)测试DMA传输数据时CPU还可继续工作其他的事
  3. [iOS常见问题] 关于使用QQ做第三方登录的问题!
  4. 循环队列的java结构_Java数据结构——循环队列
  5. android usb弹窗权限r,Android USB权限对话框永远不会出现
  6. Shamir密钥分享算法 python实现
  7. 【干货】数据挖掘比赛大数据处理和建模经验
  8. matlab波浪力的数值模拟,【干货】二维波浪水槽以及波浪传播变形的数值模拟(附详细步骤)...
  9. Ubuntu 解析迅雷链接
  10. Win系统 - 局域网内电脑文件共享
  11. 2022年劳务员-通用基础(劳务员)考试题库及答案
  12. 云计算的1024种玩法——如何快速搭建个人博客?
  13. flink SourceFunction could not be inferred. Support for synthetic interfaces, lambdas, and generic
  14. 避免2.4GHz ISM频段各种类型无线设备干扰的技术
  15. ECharts中setOption的title、tooltip、xAxis、yAxis、series、legend等参数的含义。
  16. get请求获得传递参数
  17. Godot Engine:将Sprite和刚体保持同一轴心
  18. scp_linux之间互传文件
  19. Compose搭档 — Flow、Room
  20. 【秒懂音视频开发】07_重识音频

热门文章

  1. ulipad install on 64bit win7 has issue
  2. sql server 按时间段查询
  3. vc获取网页内table
  4. Leetcode 172. 阶乘后的零 解题思路及C++实现
  5. LeetCode 496. 下一个更大元素 I 解题思路及C++实现
  6. discuz!x2.5登录管理面板
  7. 小程序swiper(tab)高度自适应
  8. jQuery 基础选择器/层级选择器/隐式迭代
  9. mysql实现汉字转拼音
  10. MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取