• android XMPP实现IM聊天一(登录和注册)


         其实对于android基于openfire+asmack+spark的有关于IM聊天的源码、网上已经可以找出一大堆这些资料了,但是每个人的项目经历不同,对XMPP的体验也不同,多少都会有些感悟的,现在我就把我项目中用到XMPP的流程贴出来,也算是自己的一个项目经历吧。

         对于openfire服务器的搭建与安装这里我就不介绍了,自己也可以去网上下载一个服务器,安装方法也很简单,直接下一步就行,数据库用自带的,如果服务器安装错误的话只需要将你openfire的路径下一个文件改掉,该服务器就会自动从新配置,比如我的openfire路径:C:Program FilesOpenfireconf,找到该配置文件openfire.xml,把  <setup>true</setup>,去掉就行了,当再次重启openfire服务器的时候,就会重新配置。

        对于asmack,其实是smack针对android兴起所制定的一个jar包,更好的配合android开发,这些我也懂的不多,都是从网上了解的....

    而spark则是完全是用openfire+asmack实现的一个客户端软件,这里只是为了方便测试使用。

        好了话也不多说了,直接切入主题吧,刚刚开始做的时候还是以登陆注册为主,这是最基本的功能。首先,先连接服务器

    1、定义一些变量

    1     private int server_port=5222;//端口
    2     public XMPPConnection connection=null;//连接
    3     private String server_name = "ubuntuserver4java";//服务器名称
    4     private CccallConnectionListener connectionlistener;//断开连接监听
    5     private String server_host = "192.168.1.140";//服务器ip
    6     
    7     public static XmppUtil xmpputil=new XmppUtil();

    2、打开连接

     1 /   /打開連接
     2     public boolean openConnection(){
     3         try {
     4             if (null == connection || !connection.isAuthenticated()) {
     5                 // 配置连接
     6                 ConnectionConfiguration config = new ConnectionConfiguration(
     7                         server_host, server_port, server_name);
     8                 config.setReconnectionAllowed(true);
     9                 config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    10                 config.setSendPresence(true); // 状态设为离线,目的为了取离线消息
    11                 config.setSASLAuthenticationEnabled(false); // 是否启用安全验证
    12                 config.setTruststorePath("/system/etc/security/cacerts.bks");
    13                 config.setTruststorePassword("changeit");
    14                 config.setTruststoreType("bks");
    15                 connection = new XMPPConnection(config);
    16                 connection.connect();// 连接到服务器
    17                 // 配置各种Provider,如果不配置,则会无法解析数据
    18                 configureConnection(ProviderManager.getInstance());
    19                 return true;
    20             }
    21         } catch (XMPPException xe) {
    22             xe.printStackTrace();
    23             connection = null;
    24         }
    25         return false;
    26     }

    3、定义的方法

     1 //單例模式
     2     synchronized public static XmppUtil getinstance(){
     3         return xmpputil;
     4     }
     5     
     6     //創建連接
     7     public  XMPPConnection getconnection(){
     8         if(connection==null){
     9             openConnection();
    10         }
    11         return connection;
    12     }

    4、关闭连接

     1 //關閉連接
     2     public void closeConnection(){
     3         if(connection!=null){
     4             if(connection.isConnected())
     5                 connection.disconnect();
     6             //移除监听
     7             connection.removeConnectionListener(connectionlistener);
     8             connection=null;
     9         }    
    10     }

    5、登陆(直接传入用户名和密码就可以了,注意这里的用户名和密码是openfire上面的)

     1 //登錄方法
     2     public boolean login(String name,String pwd){
     3         try {
     4             if(getconnection()==null)
     5                 return false;
     6             
     7             //服务器断开重连的监听方法(移除)
     8             if(connectionlistener!=null)
     9                 connection.removeConnectionListener(connectionlistener);
    10             getconnection().login(name, pwd);//登录方法
    11             
    12             //更改在線狀態
    13             Presence pre=new Presence(Presence.Type.available);
    14             getconnection().sendPacket(pre);
    15             
    16             //服务器断开重连的监听方法(添加)
    17             connectionlistener=new CccallConnectionListener();
    18             getconnection().addConnectionListener(connectionlistener);
    19             
    20             return true;
    21         } catch (Exception e) {
    22             e.printStackTrace();
    23         }
    24         return false;
    25     }    

    6、注册(添加用户名和密码就可以了)

     1 //实现注册(1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败 )
     2     public String register(String loginName,String pwd){
     3         System.out.println("===================开始注册到openfire中去了=======================");
     4         if(connection==null)
     5             XmppUtil.getinstance().getconnection();
     6         
     7         Registration re=new Registration();
     8         re.setType(IQ.Type.SET);
     9         re.setTo(connection.getServiceName());
    10         
    11         re.setPassword(pwd);
    12         re.setUsername(loginName);
    13         re.addAttribute("android", "geolo_createUser_android");//不能为空
    14         
    15         System.out.println("注册到openfire中的姓名是====="+loginName+"密码是====="+pwd);
    16         
    17         PacketFilter filter=new AndFilter(new PacketIDFilter(re.getPacketID()),new PacketTypeFilter(IQ.class));
    18         PacketCollector collector=connection.createPacketCollector(filter);
    19         
    20         connection.sendPacket(re);
    21         IQ result=(IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
    22         
    23         collector.cancel();//停止请求result(是否成功的结果)
    24         if(result==null)
    25             return "0";
    26         else if(result.getType()==IQ.Type.RESULT){
    27             return "1";
    28         }else{
    29             if(result.getError().toString().equalsIgnoreCase("conflict(409)")){
    30                 return "2";
    31             }else{
    32                 return "3";
    33             }
    34         }
    35     }    
    View Code


    方法就这些了,下面讲讲如何使用上面的方法了

    登陆:我的数据都是从Mysql上读取过来的,所以先在后台判断了一次登陆,然后再登陆上openfire中

    1 boolean loginFlag=XmppUtil.getinstance().login(user.getuId(), upwd);

    注册:根据返回来的res判断状态

    1  String res=XmppUtil.getinstance().register(uid, repwd);


    登陆、注册就先到这里吧,下一篇....期待吧!!!!

  • 相关阅读:
    记一次大数据量后台服务的性能优化(转载)
    javascript void(0)
    IE11浏览器设置为兼容不同IE版本
    Asp.net WebForm(4) Server对象、跳转分析、验证控件和站点导航
    http请求错误码(转载)
    windows系统和IE的兼容性问题
    Lombok常用注解
    Typora配置图床PicGo,使用阿里云Oss 存储
    Picgo +sm.ms打造免费图床个人工具
    OSS —— 对象存储介绍
  • 原文地址:https://www.cnblogs.com/yrhua/p/3515156.html
Copyright © 2020-2023  润新知