基於Openfire Smack開發即時通訊應用、Spark安裝,註冊,登入,退出登入(二)

Code-Porter發表於2017-03-10

上一篇已經把伺服器的Openfire環境搭建好了,現在我們就可以來搭建應用App的環境了這樣就可以使用Smack的API來與伺服器進行通訊了。

一:繼續去igniterealtime下載Smack的jar包和Spark.exe

這裡寫圖片描述

二:Spak,第一次使用需要設定點東西,不然登入不上。

這裡寫圖片描述

  1. 點選進入高階,將倒數第三,第二個勾上這樣就可以登入了(至於為什麼自己領悟吧 ^_^)
    這裡寫圖片描述

  2. 現在我們隨便登入一個帳號,域名填寫你伺服器的ip地址(要是沒有可以進入後臺手動建立一個)
    這裡寫圖片描述

  3. 安裝好了這個,在開發的時候就非常方便測試了。

三:應用開發所需要的jar包(缺一不可^_^)

這裡寫圖片描述

jxmpp的兩個jar包igniterealtime官網並沒有下載,這裡給出下載連結jxmpp

四:搞了這麼久終於可以開始敲程式碼了,先來個登入:

這裡有幾點需要注意的地方:

  1. XMPPTCPConnection connection //全域性就只能有一個,所有的操作基本上都是基於connection
  2. 由於使用的是TCP連線,所以還得保證connection不死所以最好就放在服務中進行
  3. 第一步就是讓你的應用連線上Openfire伺服器

private XMPPTCPConnection connection;
     /**
     * 獲得與伺服器的連線
     *
     * @return
     */
    public XMPPTCPConnection getConnection() {
        try {
            if (connection == null) {
                XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
                        //伺服器IP地址
                        .setHost("119.29.193.12")
                        //伺服器埠
                        .setPort(5222)
                        //伺服器名稱(管理介面的 主機名)
                        .setServiceName("izqhrnmkjn55syz")
                        //是否開啟安全模式
                        .setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled)
                        //是否開啟壓縮
                        .setCompressionEnabled(false)
                        //開啟除錯模式
                        .setDebuggerEnabled(true).build();
                connection = new XMPPTCPConnection(config);
                connection.connect();
            }
            return connection;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

四:註冊使用者,Map中對應一些使用者資料;由於方法沒有返回值所以操作是否成功就看會不會拋異常若不會則成功了。

   /**
     * 建立一個新使用者
     *
     * @param username 使用者名稱
     * @param password 密碼
     * @param attr     一些使用者資料
     * @see AccountManager
     */
    public boolean registerAccount(String username, String password, Map<String, String> attr) {
        AccountManager manager = AccountManager.getInstance(connection);
        try {
            if (attr == null) {
                manager.createAccount(username, password);
            } else {
                manager.createAccount(username, password, attr);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

attr對應的一些屬性值 name;email;first;last;city;state;zip;
phone;url;date;misc;text;remove(可以檢視AccountManager中的getAccountAttributes()函式註釋)

五: 登入操作,檢視結果同上。

    /**
     * 登入
     *
     * @param userName 使用者名稱
     * @param password 密碼
     */
    public void login(final String userName, final String password) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    connection.login(userName, password);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

六:退出登入

    /**
     * 退出登入
     *
     * @return code
     * @code true 退出成功
     * @code false 退出失敗
     */
    public boolean logout() {
        try {
            connection.instantShutdown();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

七:修改使用者密碼

    /**
     * 修改密碼
     *
     * @param newPassword  新密碼
     * @return code
     * @code true 修改成功
     * @code false 修改失敗
     */
    public boolean changePassword(String newPassword) {
        try {
            AccountManager manager = AccountManager.getInstance(connection);
            manager.changePassword(newPassword);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

結語:Smack的Api還是相對比較簡單的,這個版本的Api基本上都是使用的單例模式所以也非常好些

相關文章