android 使用xmpp smack openfire实现即时通讯(一)

介绍:

XMPP :XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。 

smack:是一个开源包,易于使用的XMPP(jabber)客户端类库

openfire :作为服务器提供服务。

openfire 安装:

服务下载地址:http://www.igniterealtime.org/projects/openfire/

安装配置过程https://mp.csdn.net/postedit/84329302

Spark

下载地址:https://spark.en.softonic.com/

spark是一个即时通信客户端可使用spark,可以用来测试openfire安装是否有效,如果有信心,可以不用测试。

如果安装后登陆不上,可以参考:https://blog.csdn.net/oniejianjun/article/details/72673782。

 

有了服务器后我们就可以编写安卓客户端来连接这个服务器登陆了

1、在gradle中配置smack所需要的包。

compile 'org.igniterealtime.smack:smack-android:4.1.4'
compile 'org.igniterealtime.smack:smack-tcp:4.1.4'
compile 'org.igniterealtime.smack:smack-im:4.1.4'
compile 'org.igniterealtime.smack:smack-extensions:4.1.4'

2、测试连接类MyXMPPTCPConnection

public class MyXMPPTCPConnection extends XMPPTCPConnection {
    private static MyXMPPTCPConnection connection;

    private MyXMPPTCPConnection(XMPPTCPConnectionConfiguration config) {
        super(config);
    }

    public static synchronized MyXMPPTCPConnection getInstance() {
        //初始化XMPPTCPConnection相关配置
        if (connection == null) {
            XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
            //设置连接超时的最大时间
            builder.setConnectTimeout(10000);
            //设置登录openfire的用户名和密码
            builder.setUsernameAndPassword("admin", "admin");
            //设置安全模式
            builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
            builder.setResource("Android");
            //设置服务器名称
            builder.setServiceName("127.0.0.1");
            //设置主机地址
            builder.setHost("192.168.10.104");
            //设置端口号
            builder.setPort(5222);
            //是否查看debug日志
            builder.setDebuggerEnabled(true);
            connection = new MyXMPPTCPConnection(builder.build());
        }
        return connection;
    }
}

其中:builder.setHost("192.168.10.104");是本机的ip,你可以在cmd命令中输入ipconfig查询自己的ip。还有一点需要注意的是,我用的本地电脑配的openfire服务器。之前我用真机测试一直报错,连接超时,因为不在一个局域网,用模拟器测试就没有问题。

2、主函数测试连接:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(new Runnable() {
            @Override
            public void run() {
                MyXMPPTCPConnection connection = MyXMPPTCPConnection.getInstance();
                try {
                    connection.connect();
                    Log.i("test==", "connect");
                    connection.login();
                    Log.i("test==", "login");
                } catch (Exception e) {

                }
        }).start();
    }
}

注意:1、主线程直接访问,会报错,需要新启动一个线程。2、记得为app申请网络权限

 

 

如何判断登录成能,在openfire服务器的管理界面:http://127.0.0.1:9090/user-summary.jsp

中看到自己的头像绿了(感觉那里不对),处于登录状态

你可能感兴趣的:(android)