你看今天是(三)对吧,前面肯定有(一)和(二),在发表完iOS开发之使用XMPPFramework实现即时通信(一)iOS开发之使用XMPPFramework实现即时通信(二)后有好多的小伙伴加我Q或者评论留言提出一些问题,比如:“楼主,在哪注册?”,“楼主,你的登录用户名和密码是多少?”之类的问题。在之前的博客中使用的账号和密码,为了方便,是用spark客户端注册的,在今天的博客中将会详细的介绍如何使用代码注册我们新用户,还有在这感谢关注我的小伙伴们,谢谢你们的支持!

  好了,废话少说,说道到注册新的用户其实还是蛮简单的,之前在使用xmppframework的时候是直接连接后就直接认证。今天的博客的大体思路是让用户输入用户名和密码,我们拿着用户名取连接我们的openfire服务器(即使用户没有注册,拼接出的jid也能连接服务器)。连接完以后这不同的是去注册密码而不是去认证,注册成功后,然后再认证。

  一,运行效果图展示

    还是那句话,为了直观,是少不了图的,运行的部分截图如下:

  二.代码展示

    1.为了提示,我把AlterView进行了简单封装,便于使用,代码如下:

 //提示框
-(void)alterWithTip:(NSString *) tip
{
UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:tip delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alter show];
}

    2.开始今天的主题,首先在我们的Controller里获取xmppSteam. 并注册委托回调

 - (void)viewDidLoad {
[super viewDidLoad]; UIApplication *application = [UIApplication sharedApplication];
id delegate = [application delegate];
_xmppStream = [delegate xmppStream];
//在主线程中注册回调
[self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
}

    3.点击注册按钮,然后调取连接方法,连接方法中用到的用户名是用户自己输入的

 //用用户输入的用户名来创建连接
-(void) xmppConnect
{
NSString *userName = self.userNameTextField.text; //创建JID
XMPPJID *jid = [XMPPJID jidWithUser:userName domain:MYDOMAIN resource:@"iPhone"]; //把Jid添加到流
[self.xmppStream setMyJID:jid]; //连接服务器
NSError *error = nil;
[self.xmppStream connectWithTimeout: error:&error];
if (error) {
NSLog(@"连接错误%@",[error localizedDescription]);
}
}

    4.实现连接成功后回调的方法,在本方法中注册我们的用户密码,代码如下:

 //连接成功后,注册用户
-(void)xmppStreamDidConnect:(XMPPStream *)sender
{ [self alterWithTip:@"openfire服务器已连接"]; NSString *password = self.passwordTextField.text; NSError *error = nil;
[self.xmppStream registerWithPassword:password error:&error];
if (error) {
NSLog(@"注册错误%@",[error localizedDescription]);
}
}

    5.实现注册成功后的回调方法,注册成功后,认证密码:

 //注册成功后,认证用户密码
-(void)xmppStreamDidRegister:(XMPPStream *)sender
{
[self alterWithTip:@"用户注册成功"]; //注册成功后认证用户名和密码
NSError *error = nil;
[self.xmppStream authenticateWithPassword:self.passwordTextField.text error:&error];
if (error) {
NSLog(@"认证错误%@",[error localizedDescription]);
}
}

    6.实现认证成功后的回调

 //认证成功后的回调
-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
[self alterWithTip:@"登陆成功"];
}

    7.实现认证失败后的回调

 //认证失败的回调
-(void)xmppStream:sender didNotAuthenticate:(DDXMLElement *)error
{
[self alterWithTip:@"用户名和密码错误"];
}

  三、注意问题

    如果你输入的账号是已经注册过的账号,会提示注册失败。

  今天的博客先到这儿,欢迎批评指正~

iOS开发之使用XMPPFramework实现即时通信(三)的更多相关文章

  1. iOS开发之使用XMPPFramework实现即时通信(二)

    上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...

  2. iOS开发之使用XMPPFramework实现即时通信

    iOS开发之使用XMPPFramework实现即时通信   关于XMPP的理论介绍在本篇博客中就不做赘述了,如何在我们之前的微信中加入XMPP协议来实现通信呢?下面将会介绍一下XMPP的基本的知识,让 ...

  3. iOS开发之使用XMPPFramework实现即时通信(一)

    关于XMPP的理论介绍在本篇博客中就不做赘述了,如何在我们之前的微信中加入XMPP协议来实现通信呢?下面将会介绍一下XMPP的基本的知识,让我们的微信可以实现互联通信.要做的准备工作是要有服务器支持X ...

  4. iOS开发多线程篇—线程间的通信

    iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任 ...

  5. iOS开发UI篇—Quartz2D简单使用(三)

    iOS开发UI篇—Quartz2D简单使用(三) 一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界 ...

  6. iOS开发之线程间的MachPort通信与子线程中的Notification转发

    如题,今天的博客我们就来记录一下iOS开发中使用MachPort来实现线程间的通信,然后使用该知识点来转发子线程中所发出的Notification.简单的说,MachPort的工作方式其实是将NSMa ...

  7. XE6 /XE8 & IOS开发之免证书真机调试三步走,生成iPA文件并安装到其它苹果设备上

    XE6 & IOS开发之免证书真机调试(1):颁发属于自己的App签名证书(有图有真相) XE6 & IOS开发之免证书真机调试(2):连接真机并运行App(有图有真相) XE6 &a ...

  8. iOS开发多线程篇—线程间的通信(转)

    这里转载 给自己一个备份 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转 ...

  9. 设置tableview的滚动范围--iOS开发系列---项目中成长的知识三

    设置tableview的滚动范围 有时候tableview的footerview上的内容需要向上拖动界面一定距离才能够看见, 项目中因为我需要在footerviw上添加一个按钮,而这个按钮又因为这个原 ...

随机推荐

  1. ajax和jquery

    ajax的定义: AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 Ja ...

  2. STM32之DMA+ADC

    借用小甲鱼的经典:各位互联网的广大网友们.大家早上中午晚上好..(打下小广告,因为小甲鱼的视频真的很不错).每次看小甲鱼的视频自学都是比较轻松愉快的..我在想,如果小甲鱼出STM32的视频,我会一集不 ...

  3. Python语言中对于json数据的编解码——Usage of json a Python standard library

    一.概述 1.1 关于JSON数据格式 JSON (JavaScript Object Notation), specified by RFC 7159 (which obsoletes RFC 46 ...

  4. 如何用js得到当前页面的url信息方法(JS获取当前网址信息)

    设置或获取对象指定的文件名或路径. alert(window.location.pathname) 设置或获取整个 URL 为字符串. alert(window.location.href); 设置或 ...

  5. 最近在新公司的一些HTML学习

    还是先把代码贴在这  后期再写感想 <!DOCTYPE html> <head> <meta http-equiv="x-ua-compatible" ...

  6. Your awesome titleHH

    Welcome to Jekyll! Your awesome titleHH About Blogging Like a Hacker Welcome to Jekyll! Jan 9, 2016 ...

  7. ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)

    前言 在上篇文章中介绍了如何在 Docker 容器中部署我们的 asp.net core 应用程序,本篇主要是怎么样为我们在 Linux 或者 macOs 中部署的 dotnet 程序创建一个守护进程 ...

  8. docfx组件介绍--MarkdownLite

    在docfx中,最重要的就是生成文档,把markdown文件(gfm语法)转换成html. 为了这一步,我们找了N个.net开源项目,发现要么是common markdown的,要么不容易扩展,没有一 ...

  9. 在MySQL的InnoDB存储引擎中count(*)函数的优化

    写这篇文章之前已经看过了很多数据库方面的优化内容,大部分都是加索引.使用事务.要什么select什么等等.然而,只是停留在阅读的层面上,很少有实践,因为没有遇到真实的项目,一切都是纸上谈兵.实践是检验 ...

  10. ENode框架Conference案例分析系列之 - 业务简介

    前言 ENode是一个应用开发框架.通过ENode,我们可以方便的开发基于DDD+CQRS+EventSourcing+EDA架构的应用程序.之前我已经写了很多关于ENode的架构以及设计原理的文章, ...