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: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客户端实现三:登录、注册相关推荐
- 番茄闹钟三(登录注册页面)
一. axios 配置需求 axios 文档 配置 axios 配置 appid 和 appsecret 配置 gwt 验证的 gwt token 二. 安装 axios yarn add axios ...
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- 知乎iOS客户端下午瘫了 原来是第三方防火墙变更害的
9月7日消息,下午有iOS知乎用户发现知乎服务器出现故障,知乎iOS客户端暂时不能登录.此外,有消息称知乎登录端口出现混乱,登录后提示出现"503"错误,更有网友反映登录之后账号串 ...
- APP登录注册 步骤三:客户端
声明: 开发平台:AS 3.5 JDK版本:1.8 MySQL版本:5.7 JDBC驱动:mysql-connector-java-5.1.47.jar 1.项目架构: MainSecondActiv ...
- iOS开发之登录注册系统
一.登录的种类划分: 1. 普通登录 2.使用独立系统的登录 3.单点登录 4. Oauth2.0登录 详细介绍如下: 1.普通登录: 普通的登录需求,要的就是一个登录页面,输入账号密码,提交Form ...
- iOS登录注册登录界面(UITextField)
登录功能是我在湖畔做的第一个需求. 当时PD给我的草图和下图类似: (图片来自知乎iOS客户端登录界面) 不过需求中要求用户名或者密码错误时,输入框要抖动(类似Mac登录密码错误的抖动效果). 如果实 ...
- iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息
Demo地址:https://github.com/ChenNan-FRAM/Fenvo (如果你觉得有用麻烦star一下感激不尽) Fenvo Objective-C, iOS 类似简单的第三方微博 ...
- 【ios开发/Xcode】实现登录注册
[ios开发/Xcode]实现登录注册 实现效果 源代码 实现效果 首先进入初始界面,输入账号Linchuantao,密码Linchuantao,显示登录失败(如下左图),因此需要进行注册,点击左下角 ...
- java注册登录客户端_GitHub - a-voyager/LoginSystem_Client: 登录注册系统(桌面客户端)——Java课程实践...
基于HTTP协议和MySQL的多平台登录注册系统 摘要 基于HTTP协议和MySQL的多平台登录注册系统主要用于模拟演示互联网中常见的BS/CS模式登录注册系统.目前网络互访一般基于两种协议HTTP协 ...
最新文章
- QEMU虚拟机关键源代码学习
- 7.STM32中对DMA_Config()函数的理解(自定义)测试DMA传输数据时CPU还可继续工作其他的事
- [iOS常见问题] 关于使用QQ做第三方登录的问题!
- 循环队列的java结构_Java数据结构——循环队列
- android usb弹窗权限r,Android USB权限对话框永远不会出现
- Shamir密钥分享算法 python实现
- 【干货】数据挖掘比赛大数据处理和建模经验
- matlab波浪力的数值模拟,【干货】二维波浪水槽以及波浪传播变形的数值模拟(附详细步骤)...
- Ubuntu 解析迅雷链接
- Win系统 - 局域网内电脑文件共享
- 2022年劳务员-通用基础(劳务员)考试题库及答案
- 云计算的1024种玩法——如何快速搭建个人博客?
- flink SourceFunction could not be inferred. Support for synthetic interfaces, lambdas, and generic
- 避免2.4GHz ISM频段各种类型无线设备干扰的技术
- ECharts中setOption的title、tooltip、xAxis、yAxis、series、legend等参数的含义。
- get请求获得传递参数
- Godot Engine:将Sprite和刚体保持同一轴心
- scp_linux之间互传文件
- Compose搭档 — Flow、Room
- 【秒懂音视频开发】07_重识音频
热门文章
- ulipad install on 64bit win7 has issue
- sql server 按时间段查询
- vc获取网页内table
- Leetcode 172. 阶乘后的零 解题思路及C++实现
- LeetCode 496. 下一个更大元素 I 解题思路及C++实现
- discuz!x2.5登录管理面板
- 小程序swiper(tab)高度自适应
- jQuery 基础选择器/层级选择器/隐式迭代
- mysql实现汉字转拼音
- MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取