openfire Android学习(一)----实现用户注册、登录、修改密码和注销等
以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后台服务器代码就比较复杂,对于我这新手来讲就比较难了。后来在网上看到用openfire做服务器,利用强大的Smack API库来实现IM聊天就简单多了。
网上也有很多关于这方面的资料,我就在这里把网上的资料和自己的理解总结一下和大家一起交流学习。
需要用到以下几个工具:
Openfire 最新版本(openfire 3.8.1)
下载地址:http://www.igniterealtime.org/downloads/index.jsp
安装配置可参考:http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html
Spark 最新版本(Spark 2.6.3)
下载地址:http://www.igniterealtime.org/downloads/index.jsp
ASmack 最新版本 (asmack-jse-buddycloud-2010.12.11.jar)
由于在Android平台下开发 所以我们用到的是 aSmack,与Smack没有很大的区别
下载地址1:http://download.csdn.net/detail/h7870181/6372585 (现在用的就是这个,修改了一些BUG)
下载地址2:http://code.google.com/p/asmack/downloads/list
需要安装的安装好,需要下载的下载好(这里就不多作介绍)。创建项目工程,导入ASmack jar包,OK,下面就一起去学习怎么实现 用户注册、登录、修改密码和注销等一些功能!
首先第一、与服务器建立好连接
关键代码:127.0.0.1为服务器IP,5222为服务器端口号
- /**
- * 连接服务器
- *
- * @return
- */
- public boolean conServer() {
- ConnectionConfiguration config = new ConnectionConfiguration(
- 127.0.0.1, 5222);
- /** 是否启用安全验证 */
- config.setSASLAuthenticationEnabled(false);
- /** 是否启用调试 */
- // config.setDebuggerEnabled(true);
- /** 创建connection链接 */
- try {
- connection = new XMPPConnection(config);
- /** 建立连接 */
- connection.connect();
- return true;
- } catch (XMPPException e) {
- e.printStackTrace();
- }
- return false;
- }
第二、实现注册
关键代码:
以下代码注释都很清楚了,如有不懂的地方可以留言,这里就不多做解释了。
- /**
- * 注册
- *
- * @param account 注册帐号
- * @param password 注册密码
- * @return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败
- */
- public String regist(String account, String password) {
- if (connection == null)
- return "0";
- Registration reg = new Registration();
- reg.setType(IQ.Type.SET);
- reg.setTo(ClientConServer.connection.getServiceName());
- reg.setUsername(account);// 注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。
- reg.setPassword(password);
- reg.addAttribute("android", "geolo_createUser_android");// 这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!
- PacketFilter filter = new AndFilter(new PacketIDFilter(
- reg.getPacketID()), new PacketTypeFilter(IQ.class));
- PacketCollector collector = ClientConServer.connection
- .createPacketCollector(filter);
- ClientConServer.connection.sendPacket(reg);
- IQ result = (IQ) collector.nextResult(SmackConfiguration
- .getPacketReplyTimeout());
- // Stop queuing results
- collector.cancel();// 停止请求results(是否成功的结果)
- if (result == null) {
- Log.e("RegistActivity", "No response from server.");
- return "0";
- } else if (result.getType() == IQ.Type.RESULT) {
- return "1";
- } else { // if (result.getType() == IQ.Type.ERROR)
- if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
- Log.e("RegistActivity", "IQ.Type.ERROR: "
- + result.getError().toString());
- return "2";
- } else {
- Log.e("RegistActivity", "IQ.Type.ERROR: "
- + result.getError().toString());
- return "3";
- }
- }
- }
第三、实现登录
关键代码: 代码很简单不做太多解释
- /**
- * 登录
- *
- * @param a 登录帐号
- * @param p 登录密码
- * @return
- */
- public boolean login(String a, String p) {
- try {
- if (connection == null)
- return false;
- /** 登录 */
- connection.login(a, p);
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
第四、修改密码
关键代码:同样很简单
- /**
- * 修改密码
- * @param connection
- * @return
- */
- public static boolean changePassword(XMPPConnection connection,String pwd)
- {
- try {
- connection.getAccountManager().changePassword(pwd);
- return true;
- } catch (Exception e) {
- return false;
- }
- }
第五、更改用户状态
关键代码:好吧,代码有点多,不过很清晰
- /**
- * 更改用户状态
- */
- public void setPresence(int code) {
- if (connection == null)
- return;
- Presence presence;
- switch (code) {
- case 0:
- presence = new Presence(Presence.Type.available);
- connection.sendPacket(presence);
- Log.v("state", "设置在线");
- break;
- case 1:
- presence = new Presence(Presence.Type.available);
- presence.setMode(Presence.Mode.chat);
- connection.sendPacket(presence);
- Log.v("state", "设置Q我吧");
- System.out.println(presence.toXML());
- break;
- case 2:
- presence = new Presence(Presence.Type.available);
- presence.setMode(Presence.Mode.dnd);
- connection.sendPacket(presence);
- Log.v("state", "设置忙碌");
- System.out.println(presence.toXML());
- break;
- case 3:
- presence = new Presence(Presence.Type.available);
- presence.setMode(Presence.Mode.away);
- connection.sendPacket(presence);
- Log.v("state", "设置离开");
- System.out.println(presence.toXML());
- break;
- case 4:
- Roster roster = connection.getRoster();
- Collection<RosterEntry> entries = roster.getEntries();
- for (RosterEntry entry : entries) {
- presence = new Presence(Presence.Type.unavailable);
- presence.setPacketID(Packet.ID_NOT_AVAILABLE);
- presence.setFrom(connection.getUser());
- presence.setTo(entry.getUser());
- connection.sendPacket(presence);
- System.out.println(presence.toXML());
- }
- // 向同一用户的其他客户端发送隐身状态
- presence = new Presence(Presence.Type.unavailable);
- presence.setPacketID(Packet.ID_NOT_AVAILABLE);
- presence.setFrom(connection.getUser());
- presence.setTo(StringUtils.parseBareAddress(connection.getUser()));
- connection.sendPacket(presence);
- Log.v("state", "设置隐身");
- break;
- case 5:
- presence = new Presence(Presence.Type.unavailable);
- connection.sendPacket(presence);
- Log.v("state", "设置离线");
- break;
- default:
- break;
- }
- }
第六:注销
关键代码:很简单吧!
- /**
- * 删除当前用户
- * @param connection
- * @return
- */
- public static boolean deleteAccount(XMPPConnection connection)
- {
- try {
- connection.getAccountManager().deleteAccount();
- return true;
- } catch (Exception e) {
- return false;
- }
- }
好吧,这篇就先介绍到这!
openfire Android学习(一)----实现用户注册、登录、修改密码和注销等的更多相关文章
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
http://blog.csdn.net/h7870181/article/details/8653865 以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后 ...
- FastAPI(六十九)实战开发《在线课程学习系统》接口开发--修改密码
之前我们分享了FastAPI(六十八)实战开发<在线课程学习系统>接口开发--用户 个人信息接口开发.这次我们去分享实战开发<在线课程学习系统>接口开发--修改密码 我们梳理一 ...
- mysql 登录修改密码与数据库备份
1.mysql首次登录修改密码 mysql -uroot -p(首次登录无密码,按回车即可:如果无法登陆,修改mysql配置文件,在[mysqld]最后一行加skip-grant-tables即可登录 ...
- openfire Android学习(六)----总结
Xmpp的一些方法整理到一个工具类中了 XmppConnection.java [java] view plaincopy [java] view plaincopy import java.io.B ...
- Linux强制用户首次登录修改密码
一个执着于技术的公众号 地方 前言 Linux强制用户首次登陆修改密码,这应该是RHCE认证中用户管理部分, 属于很基础的内容了.可是我忘记了,所以就有了下面的记录~ 实验过程 1.创建用户并设置登录 ...
- openfire Android学习---android客户端聊天开发之登录 和 注销登录
一切就绪,新建一个android测试工程: 上网权限配置,界面绘制啥的,这里就不说了. 首先 导入一个smark包.这个是用来维护长连接的,也可以是asmark.我用的是asmark 先普及一些基本知 ...
- openfire Android学习(三)----会议室创建、加入以及查询会议室中所有成员等
openfire 中的会议室不像QQ群一样,不能保存那些离线用户,加入会议室后,一旦断开连接,就会离开会议室. 虽然如此,但如果要实现也不是不可能,我们可以自己做后台来保存,有兴趣的可以去试着实现一下 ...
- openfire Android 学习(四)----单人聊天和多人聊天(发送消息、接收消息)
一.单人聊天 1)发送消息: 首先要获取一个聊天窗口,getConnection()为获取连接connection的方法,调用getFriendChat()获取 [java] view plainco ...
- openfire Android学习(五)------连接断开重连
首先要创建连接监听器,用来监听连接状态,这里我写了一个类 继承了ConnectionListener,重写了里面5个方法,最重要的两个方法connectionClosed()和connectionCl ...
随机推荐
- STVP烧录教程
可以运行独立的烧录软件ST Visual Programmer (STVP)进行STM8芯片烧录.运行“开始”->ST Toolset->Development Tools -> S ...
- UVa 12299 线段树 单点更新 RMQ with Shifts
因为shift操作中的数不多,所以直接用单点更新模拟一下就好了. 太久不写线段树,手好生啊,不是这错一下就是那错一下. PS:输入写的我有点蛋疼,不知道谁有没有更好的写法. #include < ...
- 【ZABBIX】Linux下安装ZABBIX
说明:搭建ZABBIX所需的软件列表为:RHEL6.5+Nginx+MySQL+PHP+ZABBIX. 一.软件包 软件名称 版本 下载地址 nginx 1.10.3 http://nginx.org ...
- STF 连接其它操作系统上的安卓设备实操介绍【转】
功能简介:https://www.jianshu.com/p/464fadaeb1d7 搭建教程:https://blog.csdn.net/xl_lx/article/details/7944586 ...
- spoj104 HIGH - Highways 矩阵树定理
欲学矩阵树定理必先自宫学习一些行列式的姿势 然后做一道例题 #include <iostream> #include <cstring> #include <cstdio ...
- Jayrock.Json读取json数据(net)
1 : 首 先 下 载 Jayrock.Json.dll 文 件 , 放 入 bin 目 录 中 : 地 址 : http://www.filediag.com/down/Jayrock.Json.d ...
- 一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境)
使用前提 查询表必须有ID字段,且该字段不能重复,建议为自增主键 背景 如果使用ADO.NET进行开发,在查询分页数据的时候一般都是使用分页存储过程来实现的,本文提供一种通用的分页存储过程,只需要传入 ...
- 前端AI切图技巧
AI的基本使用 1.选中多个不同图层. 首先在AI右边工具栏找到“图层” 然后选择需要切图的图层(按住“ctrl”点击) 最后拖到PS里面的新建的图层. 还有个问题,就是图层关联太多,无法拖动某些图层 ...
- [python学习篇][廖雪峰][1]高级特性--创建生成器 方法1 a = (x for x in range(1,3))
创建一个生成器的方法: for x in range(1,10000000) ,先生成一个列表[1........9999999] 如果我们只想要后面的几个元素,会发现浪费很多空间.所以,如果列表元素 ...
- hdu2094 stl之set的应用
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...