XMPP实现登陆注销功能
XMPP框架的下载与导入等问题请参照 —— XMPP框架的分析、导入及问题解决
2>
首先我们要引用XMPPFramework.h头文件,设置代理,添加成员变量,为了方便理解,在这里将登录分别放到5个方法内(其中初始化、连接服务器、连接成功后发送密码、授权成功后发送在线消息为私有方法,而注销则为公共方法方便外界调用)。然后在XMPP代理方法中适当调用
#pragma mark - XMPP
// 初始化XMPPStream
- (void)setupXMPPStream
{
_xmppStream = [[XMPPStream alloc] init];
// 设置代理
[_xmppStream addDelegate:selfdelegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)];
}
初始化完成后我们就要和服务器进行连接
// 连接服务器
- (void)connectToHost
{
// 连接服务器
if (!_xmppStream)
{
[self setupXMPPStream];
}
// 设置JID resource标记登录的客户端
XMPPJID *myJID
= [XMPPJID jidWithUser:@"wangwu"domain:@"xxxxxxxxxxxxxxx.local" resource:@"iOS"];
_xmppStream.myJID =
myJID;
// 设置服务器域名 可设置域名或者IP地址
_xmppStream.hostName = @"xxxxxxxxxxxxxx.local";
// 设置端口(默认的话可省略)
_xmppStream.hostPort = 5222;
// 连接
NSError *error = nil;
if (![_xmppStream connectWithTimeout:XMPPStreamTimeoutNoneerror:&error])
{
NSLog(@"%@",error);
}
}
有登录对应的就有注销功能,所以我们先来完成注销
// 注销
- (void)disConnectToHost
{
// 发送离线消息,在DEMO里面我们可以清楚看到"unavailable"表示离线的意思
XMPPPresence *offline = [XMPPPresence presenceWithType:@"unavailable"];
[_xmppStream sendElement:offline];
// 与服务器断开连接
[_xmppStream disconnect];
}
连接成功后,我们需要获得授权,所以把密码发送给服务器
// 发送密码
- (void)sendPwdTOHost
{
NSError *error = nil;
[_xmppStream authenticateWithPassword:@"123456" error:&error];
if (error)
{
NSLog(@"%@", error);
}
}
授权成功后,我们需要告诉服务器,谁在线,所以给服务器发送一条在线的消息
// 发送在线消息
- (void)sendOnlineTOHost
{
XMPPPresence *presence = [XMPPPresence presence];
// 发送
[_xmppStream sendElement:presence];
}
#pragma mark - XMPPStream代理
// 连接成功
- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
NSLog(@"与服务器连接成功!");
// 成功后发送密码进行授权操作
[self sendPwdTOHost];
}
// 连接失败
- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError*)error
{
NSLog(@"与主机断开连接%@",error);
}
// 授权成功
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
NSLog(@"授权成功");
// 发送在线消息
[self sendOnlineTOHost];
}
// 授权失败
- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error
{
NSLog(@"授权失败");
}
XMPP实现登陆注销功能的更多相关文章
- JavaWeb的登陆与注销功能
JavaWeb 登录与注销 大致流程 一般我们在Web应用中 登录页面一般是以 login.jsp的首页 大致流程如下: 当我们在前台写入用户名和密码之后,点击登录按钮 会将表单提交给一个LoginS ...
- XMPP框架下微信项目总结(2)授权登陆/注销/注册/打印日志
xmpp授权登陆步骤1 初始化xmppstream 连接服务器 传递属性jid(IP地址 端口号)2 连接成功后 传递“登”陆密码授权 3 授权后,发送在线消息xmpp所有的代理都是子线程中调用的,处 ...
- JS实现注销功能
JS实现注销功能,代码如下: <script> window.history.forward(1); </script> 这个代码的用法就是: 比如,我们此时有两个页面:Log ...
- 「小程序JAVA实战」小程序我的个人信息-注销功能(42)
转自:https://idig8.com/2018/09/06/xiaochengxujavashizhanxiaochengxuwodegerenxinxi-zhuxiaogongneng40/ 注 ...
- 装饰器实现session登陆 验证功能
装饰器 登陆验证功能 1.装饰器模板 from django.shortcuts import render, redirect, HttpResponse from django.conf impo ...
- MVC会员注销功能Cookie的应用
我们实现了<MVC应用程序实现会员登录功能>http://www.cnblogs.com/insus/p/3466512.html 有登录就会有注销功能.此次Insus.NET练习一个MV ...
- 1_python小程序之实现用户的注册登陆验证功能
python小程序之实现用户的注册登陆验证功能 程序扼要简述: 一.程序流程:1.程序开始2.判断本地文件/数据库是否已存在用户信息,存在则跳转到登陆,否则跳转到注册,注册成功后后跳转到登陆3.判断 ...
- 29、Flask实战第29天:cms用户名渲染和注销功能实现
这节来完成用户名渲染和注销的功能,目前用户名在前端页面是写死的,我们需要动态的展示出来 用户名渲染 实现用户名动态展示,其中一种方法就是在视图函数,根据session信息,获取到user id,通过该 ...
- Android Studio实现登陆注册功能之手机号验证
我们平常写的登陆注册功能,就是很普通的注册一个账号,设置密码,然后登录.这次,想写一个与之前稍微不一样的登陆注册界面,于是想到了手机号验证的方式. 现在我们市面上出现的很多app,都是采用的手机号注册 ...
随机推荐
- SQL Server代理(5/12):理解SQL代理错误日志
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...
- 30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集
一:泛型 关于泛型我自己也不是很好的理解,但是具体的运用还是可以的,可以这样的理解,我们定义一个数组,但是不知道将来它是保存什么类型的值,很是矛盾,这个时候泛型就出现了,它可以解决这个场景,li ...
- Web API应用架构设计分析(1)
Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端(包括浏览器,手机和平板电脑等移动设备)的框架, ASP.NET Web API 是一种用于在 .NET Framewor ...
- PHP条件语句语法与示例
一.if…else语句 语法: 1 if(条件){ …… } else{ …… } 2 if(条件){ …… } elseif(条件){ …… } else{ …… } 示例1: <?php & ...
- WinForm对话框
WinForm 对话框控件colorDialog - 颜色选择对话框 使用代码如下: private void 字体颜色ToolStripMenuItem_Click(object sender, E ...
- 【UWP】UI适配整理
做UWP有几个月了,期间发布了几个应用,在这里整理一下适配相关的一些东西,UWP关于UI的适配主要有两种方式: 1.VisualState+Trigger:通过触发器出发界面更变,通常在Desktop ...
- 关于JQuery(最后一点动画效果*)
1,$(':radio').val(['1','2','3']);//特殊写法,把值为1 2 3的都选中. 2,math.abs(len)取绝对值 3,按钮高亮显示,一般是配置两个按钮,一个普通的,一 ...
- python sqlite中通过字段名获取查询结果
在连sqlite数据库时,用fetchall()查询结果,是用row[0],row[1]这样的方式来打印每列的结果 但是我想用row[“字段名”]方式查询怎么办? import sqlite3 con ...
- linq 实现动态 orderby
class Pet { public string Name{get;set;} public int Age{get;set;} } void Main() { Pet[] pets = { }, ...
- 2013ACM/ICPC亚洲区南京站现场赛---Poor Warehouse Keeper(贪心)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4803 Problem Description Jenny is a warehouse keeper. ...