首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android 基于XMPP Smack Openfire 实现用户注册、登录、修改密码跟注销等

2013-12-21 
Android 基于XMPP Smack Openfire 实现用户注册、登录、修改密码和注销等需要安装的安装好,需要下载的下载好

Android 基于XMPP Smack Openfire 实现用户注册、登录、修改密码和注销等
需要安装的安装好,需要下载的下载好(这里就不多作介绍)。创建项目工程,导入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 resultscollector.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;        }    }

好吧,这篇就先介绍到这!

热点排行