XMPP用户登录


技术博客http://www.cnblogs.com/ChenYilong/ 
新浪微博http://weibo.com/luohanchenyilong 

Fullscreen

 















XMPP用户登录
 
XMPP核心文件,基于TCPXML流的传输 

• XMPPStream:是开发过程中最主要交互的类,所有扩展和自定义代 
码均要基于此类进行 
• XMPPParser:供XMPPStream解析使用 
• XMPPJID:提供了一个不可变JID的实现,遵守NSCopying协议和 NSCoding协议 
• XMPPElement:以下三个XMPP元素的基类 
• XMPPIQ :请求(加好友) 
• XMPPMessage :消息 
• XMPPPresence :出席(标示用户的在线状态) 
• XMPPModule:开发XMPP扩展时使用 
• XMPPLogging:XMPP的日志框架 
• XMPPInternal:整个XMPP框架内部使用的核心和高级底层内容 



XMPP用户登录的实现步骤
,JID字符串中需要包含服 务器的域名 
• 3. 在完成连接的代理方法中验证用户密码,连接完成后XMPPStream 的isConnect属性为YES 
• 4. 在验证代理方法中判断用户是否登录成功 
• 5. 上线或者下线成功后,向服务器发送Presence数据,以更新用户在 服务器的状态 


AppDelegate.h
• 为了简化开发,XMPP的引用程序通常会将XMPPStream放置在
AppDelegate中,以便于全局访问• 在AppDelegate中添加以下属性和方法定义
@property (strong, nonatomic, readonly)XMPPStream *xmppStream; - (void)connect;
- (void)disconnect; 


XMPPStream私有方法--设置代理及通知状态
)]; 


// XMPPStream上线 - (void)goOnline XMPPPresence[_xmppStream

{
*presence = [XMPPPresence presence];sendElement:presence]; 
// XMPPStream离线 
- (void)goOffline { 
XMPPPresence *presence = [XMPPPresencepresenceWithType:@"unavailable"]; 
[_xmppStream sendElement:presence]; } 

connect方法
- (void)connect {
// 1. 设置XMPPStream [self setupStream];
// 2. 设置用户名、密码及服务器 // 3. 设置XMPPStream信息 
[_xmppStream setMyJID:[XMPPJIDjidWithString:userName]]; [_xmppStreamsetHostName:server]; 
_myPassword = password;
// 4. 连接至服务器,如果没有指定jid和hostName,连接才会报错 
NSError *error = nil;
[_xmppStreamconnectWithTimeout:XMPPStreamTimeoutNoneerror:&error]; if (error) { 
NSLog(@"连接错误:%@", error.localizedDescription); } 



disconnect方法
- (void)disconnect { 
// 1. 发送离线状态 [self goOffline];
// 2. XMPPStream断开连接 [_xmppStreamdisconnect]; 



XMPP代理方法
#pragma mark - XMPPStream代理方法 
#pragma mark 连接到服务器 
- (void)xmppStreamDidConnect:(XMPPStream *)sender { 
// 1. 验证密码 NSError *error = nil; 
[_xmppStream authenticateWithPassword:_myPassworderror:&error]; if (error) { 
NSLog(@"身份验证错误:%@", error.localizedDescription); } 

#pragma mark 通过验证 
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender { 
[self goOnline]; } 
#pragma mark 验证失败 
- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error { 
NSLog(@"验证失败:%@", error); } 

在应用程序状态切换时连接或断开连接
#pragma mark 应用程序注销激活状态 - (void)applicationWillResignActive:(UIApplication *)application { 
// 断开连接 
[self disconnect]; } 

#pragma mark 应用程序重新被激活 
- (void)applicationDidBecomeActive:(UIApplication *)application { 
// 连接 
[self connect]; } 

AppDelegate中添加访问助手方法
#pragma mark - AppDelegate访问助手方法 /** 
AppDelegate的访问助手 
*/ 
- (AppDelegate *)appDelegte { 
return (AppDelegate *)[[UIApplicationsharedApplication] delegate]; 

/** AppDelegate的XMPPStream属性访问助手 */ 
- (XMPPStream *)xmppStream { 
return [[self appDelegte] xmppStream]; } 

© chenyilong. Powered by Postach.io

XMPP用户登录的更多相关文章

  1. iOS开发——网络编程OC篇&(二)XMPP实现用户登录与注销

    XMPP实现用户登录与注销 登录: 步骤: * 在AppDelegate实现登录 1. 初始化XMPPStream 2. 连接到服务器[传一个JID] 3. 连接到服务成功后,再发送密码授权 4. 授 ...

  2. 【iOS XMPP】使用XMPPFramewok(二):用户登录

    转自:http://www.cnblogs.com/dyingbleed/archive/2013/05/10/3069397.html 用户登录 准备工作 比较知名的开源XMPP服务器:一个是Ope ...

  3. PHP验证用户登录例子-学习笔记

    1.基本流程: 2.UML类图: 3.PHP代码: 3.1 index.php <?php /** * Created by PhpStorm. * User: andy * Date: 16- ...

  4. Ubuntu设置root用户登录图形界面

    Ubuntu默认的是root用户不能登录图形界面的,只能以其他用户登录图形界面.这样就很麻烦,因为权限的问题,不能随意复制删除文件,用gedit编辑文件时经常不能保存,只能用vim去编辑. 解决的办法 ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录

    系列目录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先完成了,要不权限是讲不下去了 把我们之前的表更新到EF中去 登录在Account控制器,所以我们要添加Account ...

  6. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  7. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

  8. MySQL 用户登录密码和远程登录权限问题

    1.mysql数据库,忘记root用户登录密码. 解决如下: a.重置密码 #/etc/init.d/mysqld stop #mysqld_safe --user=mysql --skip-gran ...

  9. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

随机推荐

  1. Java收发邮件过程中具体的功能是怎么实现的

    SMTP协议 用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的. 因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为 ...

  2. 微软职位内部推荐-Senior Software Engineer - Front End

    微软近期Open的职位: SharePoint is a multi-billion dollar enterprise business that has grown from an on-prem ...

  3. Notes of Daily Scrum Meeting(12.17)

    我们会尽量安排好时间,在其他作业不受影响的情况下加快项目的进度,在Deadline之前完成Beta阶段的工作. 今天的团队工作总结如下: 团队成员 今日团队工作 陈少杰 调试网络连接,补充后端代码 王 ...

  4. Daily Scrumming* 2015.12.11(Day 3)

    一.团队scrum meeting照片 二.今日总结 姓名 WorkItem ID 工作内容 签入链接以及备注说明  江昊 任务945 学习使用sass,学习的主要难点在于ruby环境的搭建.sass ...

  5. Vue 和 angular

    vue适合移动端的项目,而angular更适合运用于Pc端的项目.

  6. CMS垃圾回收过程

    1.总体介绍: CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器.对于要求服务器响应速度的应用上,这种垃圾回收器非常适合.在启动JVM参数加上 ...

  7. RDM 使用与破解

    RDM 的下载地址 https://cdn.devolutions.net/download/Setup.RemoteDesktopManager.13.6.2.0.msi#_ga=2.2471513 ...

  8. List元素删除不会导致越界但有问题的写法

    今天在论坛里看到一段请教list删除的问题,下面先看代码: public static void main(String[] args) { List<Integer> list = ne ...

  9. 【设计模式】—— 备忘录模式Memento

    前言:[模式总览]——————————by xingoo 模式意图 这个模式主要是想通过一个对象来记录对象的某种状态,这样有利于在其他需要的场合进行恢复. 该模式还有跟多可以扩展的地方,比如可以记录多 ...

  10. 【BZOJ1044】[HAOI2008]木棍分割(动态规划,贪心)

    [BZOJ1044][HAOI2008]木棍分割(动态规划,贪心) 题面 BZOJ 洛谷 题解 第一问随便二分一下就好了,贪心\(check\)正确性显然. 第二问随便前缀和+单调队列优化一下\(dp ...