Jack Jiang

          我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
          posts - 494, comments - 13, trackbacks - 0, articles - 1

          置頂隨筆

          相關鏈接:

          一、理論知識準備

          您需要對鴻蒙Next和ArkTS開發有所了解:

          您需要對WebSocket技術有所了解:

          HTML5的標準WebSocket協議文檔、API手冊:

          鴻蒙Next的WebSocket文檔和手冊:

          小提示:鴻蒙Next中的WebSocket API跟標準HTML5中的WebSocket接口及用法略有不同,但主要API都能一一對應,相差不大。

          二、開發工具準備

          1)DevEco-Studio:

          JackJiang 使用的版本號如上圖所示,為了方便直接引用工程,建議你也使用此版或較新版本

          2)一站式下載地址:鴻蒙官網下載地址 點此進入。(需要注冊成為開發者才能下載喲!

          3)DevEco-Studio效果預覽:

          三、SDK 文件用途說明

          3.1文件概覽

          純ArkTS實現,無任何第3方庫依賴,更無本地原生代碼混編:

          MobileIMSDK-鴻蒙端SDK本身只是ets文件源碼的集合,自帶的Demo代碼只是為了方便隨時測試SDK代碼,目的主要是用于演示SDK的API調用,Demo代碼不屬于SDK框架的一部分。

          大致的目錄說明:

          3.2詳細說明

          SDK 各模塊/文件作用說明:

          四、主要API接口和用途說明

          * 主要API文檔地址是:http://docs.52im.net/extend/docs/api/mobileimsdk/harmony/

          1)ClientCoreSDK.getInstance().loginHasInit:

          • 用途:是否已經完成過首次登陸。
          • 說明 :用戶一旦從自已的應用中完成登陸IM服務器后,本方法就會一直返回true(直到退出登陸IM)。
          • 返回值:{boolean},true表示已完成首次成功登陸(即已經成功登陸過IM服務端了,后面掉線時不影響此標識),否則表示尚未連接IM服務器。

          2)ClientCoreSDK.getInstance().connectedToServer:

          • 用途:是否在線。
          • 說明 :表示網絡連接是否正常。
          • 返回值:{boolean},true表示網絡連接正常,否則表示已掉線,本字段只在this._logined=true時有意義(如果都沒有登陸到IM服務器,怎么存在在線或掉線的概念呢)。

          3)ClientCoreSDK.getInstance().currentLoginInfo:

          4)ClientCoreSDK.getInstance().init(eventHub: common.EventHub): void:

          • 用途:初始化SDK核心。
          • 說明:不同于MobileIMSDK的iOS和Java客戶端,本方法需要由開發者調用,以確保MobileIMSDK核心已被初始化完成。
          • 本方法被調用后, #isInitialed() 將返回true,否則返回false。

          5)ClientCoreSDK.getInstance().release(): void:

          • 用途:保釋放MobileIMSDK框架資源統一方法。
          • 說明 :本方法建議在退出登陸(或退出APP時)時調用。調用時將嘗試關閉所有MobileIMSDK框架的后臺守護線程并同設置核心框架init=false、loginHasInit=false、connectedToServer=false。

          6)LocalDataSender.getInstance().sendLogin(loginInfo: PLoginInfo | undefined): number:

          • 用途:發送登陸(連接)信息給服務端。
          • 說明 :不同于其它IM框架,本框架的登錄和連接高度封裝在了一個sendLogin方法中,無需單獨再去connect服務器,大大簡化了SDK的使用。loginInfo登陸信息各字段定義見:http://docs.52im.net/extend/docs/api/mobileimsdk/harmony/#1697

          7)LocalDataSender.getInstance().sendLoginout(): number:

          • 用途:發送注銷登陸信息。
          • 說明:此方法的調用將被本庫理解為退出庫的使用,本方法將會額外調用資源釋放方法 ClientCoreSDK#release() ,以保證資源釋放。本方法調用后,除非再次進行登陸過程,否則核心庫將處于初始未初始化狀態。

          8)LocalDataSender.getInstance().sendCommonDataPlain(dataContentWidthStr: string, to_user_id: string, QoS: boolean = true, fingerPrint: string = '', typeu: number = -1): number:

          • 用途:向某人發送一條消息。
          • 參數dataContentWidthStr:要發送的數據內容(字符串方式組織)。
          • 參數to_user_id:要發送到的目標用戶id。
          • 參數QoS :true表示需QoS機制支持,否則不需要。
          • 參數fingerPrint:QoS機制中要用到的指紋碼(即消息包唯一id),可設為null,生成方法見 Protocal.genFingerPrint()。
          • 參數typeu:應用層專用字段——用于應用層存放聊天、推送等場景下的消息類型。注意:此值為-1時表示未定義。MobileIMSDK框架中,本字段為保留字段,不參與框架的核心算法,專留作應用層自行定義和使用。
          • 返回值:0表示數據發出成功,否則返回的是錯誤碼,see ErrorCode。

          9)LocalDataSender.getInstance().sendCommonData(p: Protocal): number:

          • 用途:通用數據協議包的發送根方法。
          • 參數p:{Protocal} 要發送的消息協議包對象,Protocal詳情請見“/module/mb_constants.js”下的createCommonData函數說明。
          • 返回值:0表示數據發出成功,否則返回的是錯誤碼,see ErrorCode。

          10)SocketEvent.SOCKET_EVENT_ON_RECIEVE_MESSAGE事件通知:

          11)SocketEvent.SOCKET_EVENT_ON_LOGIN_RESPONSE事件通知:

          • 用途:本地用戶的登陸結果回調事件通知(此事件發生時表示客戶端已登陸/連接或重連完成)。
          • 推薦用法:開發者可在此事件中處理登錄連接和掉線重連響應反饋。
          • 參數1: {PLoginInfoResponse}:API文檔詳見:http://docs.52im.net/extend/docs/api/mobileimsdk/harmony/#1434

          12)SocketEvent.SOCKET_EVENT_ON_LINK_CLOSE事件通知:

          • 用途:與服務端的通信斷開的回調事件通知(此事件發生時表示客戶端已掉線)。
          • 該消息只有在客戶端連接服務器成功之后網絡異常中斷之時觸發。導致與與服務端的通信斷開的原因有(但不限于):無線網絡信號不穩定、WiFi與2G/3G/4G/5G等同開情況下的網絡切換、手機系統的省電策略等。
          • 推薦用法 :開發者可在此通知中處理掉線時的界面狀態更新等,比如設置將界面上的“在線”文字更新成“離線”。

          13)SocketEvent.SOCKET_EVENT_PING事件通知:

          • 用途:本地發出心跳包后的回調通知(本回調并非MobileIMSDK-鴻蒙端核心邏輯,開發者可以不需要實現!)。
          • 推薦用法 :開發者可在此回調中處理底層網絡的活動情況。

          14)SocketEvent.SOCKET_EVENT_PONG事件通知:

          • 用途:收到服務端的心跳包反饋的回調通知(本回調并非MobileIMSDK-鴻蒙端核心邏輯,開發者可以不需要實現!)。
          • 推薦用法 :開發者可在此回調中處理底層網絡的活動情況。

          15)SocketEvent.SOCKET_EVENT_KICKOUT事件通知:

          16)SocketEvent.SOCKET_EVENT_ON_ERROR_RESPONSE事件通知:

          17)SocketEvent.SOCKET_EVENT_RECONNECT_ATTEMPT事件通知:

          • 用途:“自動重連嘗試中”事件(本回調并非MobileIMSDK-鴻蒙端核心邏輯,開發者可以不需要實現!)。
          • 參數 code :{numeric}:0:已停止,1:持續運行中,2:單次脈搏

          18)SocketEvent.SOCKET_EVENT_MESSAGE_LOST事件通知:

          • 用途:消息未送達的回調事件通知。
          • 發生場景:比如用戶剛發完消息但網絡已經斷掉了的情況下,表現形式如:就像手機qq或微信一樣消息氣泡邊上會出現紅色圖標以示沒有發送成功)。
          • 建議用途:應用層可通過回調中的指紋特征碼找到原消息并可以UI上將其標記為“發送失敗”以便即時告之用戶。
          • 參數1:{Array}:由框架的QoS算法判定出來的未送達消息列表。

          19)SocketEvent.SOCKET_EVENT_MESSAGE_BE_RECIEVED事件通知:

          • 用途:消息已被對方收到的回調事件通知。
          • 說明 :目前,判定消息被對方收到是有兩種可能:1) 對方確實是在線并且實時收到了;2) 對方不在線或者服務端轉發過程中出錯了,由服務端進行離線存儲成功后的反饋(此種情況嚴格來講不能算是“已被收到”,但對于應用層來說,離線存儲了的消息原則上就是已送達了的消息:因為用戶下次登陸時肯定能通過HTTP協議取到)。
          • 建議用途:應用層可通過回調中的指紋特征碼找到原消息并可以UI上將其標記為“發送成功”以便即時告之用戶。
          • 參數1:{String}:已被收到的消息的指紋特征碼(唯一ID),應用層可據此ID找到原先已發的消息并可在UI是將其標記為”已送達“或”已讀“以便提升用戶體驗。

          五、如何引入SDK庫文件

          5.1方法一:源碼形式

          第一步:先將整個sdk源碼module復制到您的鴻蒙工程中:

          第二步:配置您的工程,確保正確引用了MobileIMSDK鴻蒙SDK的源碼module:

           

          5.2方法二:.har包形式

          第一步:先將MobileIMSDK鴻蒙端SDK的.har包放入您的鴻蒙Next主module中(比如新建的libs目錄下):

          第二步:配置您的工程,確保正確引用了MobileIMSDK鴻蒙SDK的.har包:

          六、如何調用SDK代碼

          6.1第一步:設置ws/wss連接URL

          設置您自已部署的MobileIMSDK服務端IP或域名的示例詳見Demo中的 IMClientManager.ets 文件):

          提示:MobileIMSDK的服務端Demo部署指南請見 http://www.52im.net/thread-63-1-1.html

          6.2第二步:初始化SDK

          調用ClientCoreSDK中的init()方法進行初始化(示例詳見Demo中的I MClientManager.ets 文件):

          6.3第三步:注冊框架事件

          注冊MobileIMSDK框架級的事件監聽(示例詳見Demo中的 IMClientManager.ets 文件):

          6.4第四步:調用登錄方法(框架內部會自動啟動connect全過程)

          調用登錄方法(示例詳見Demo中的 LoginPage.ets 文件):

          提示:不同于其它IM框架,本框架的登錄和連接高度封裝在了一個sendLogin方法中,無需單獨再去connect服務器,大大簡化了SDK的使用。

          七、Demo運行效果和功能說明

          八、Demo運行方法

          8.1重要說明

          特別說明:MobileIMSDK的鴻蒙端工程(包括Demo代碼),不依賴任何第3方庫,也不存在任何Native代碼混編,完全使用ArkTS、ArkUI官方標準API實現,所以你在拿到MobileIMSDK的鴻蒙端工程后直接開箱即可運行,切莫搞復雜、不要私自加戲!

          8.2配置要連接的MobileIMSDK服務器IP

          注意:下圖中登陸連接的IP地址請設置為您自已的MobileIMSDK服務器地址哦。

          友情提示: MobileIMSDK的服務端該怎么部署就不是本手冊要討論的內容了,你可以參見《即時通訊框架MobileIMSDK的Demo使用幫助:Server端》。

          ▲ 配置要連接的服務器IP(以上代碼詳見IMClientManager.ets文件

          8.3啟動模擬器

          注意:如果沒有新建模擬器可以自已新建一個。另外也可以使用支持鴻蒙Next的真機,打開“開發者模式”并插入USB線即可使用。

           

          ▲ 點擊綠色箭頭,立即啟動模擬器!

          8.4一鍵運行

          如下圖所示,點擊綠色“運行”按鈕后,將自動在模擬器或真機里顯示自帶的Demo界面了:

          8.5運行效果

          1)Demo的登陸界面運行截圖:

          2)Demo的主界面運行截圖:

          3)Demo運行的同時,可以查看詳細的log輸出(方便調試):

          九、引用資料

          [1] 鴻蒙Next官方開發資料

          [2] MobileIMSDK開源框架的API文檔

          [3] MobileIMSDK開源IM框架源碼Github地址點此

          [4] MobileIMSDK-鴻蒙Next端發布公告

          [5] MobileIMSDK-鴻蒙Next端詳細介紹

          [6] MobileIMSDK-鴻蒙Next端開發手冊* 精編PDF版

          [7] MobileIMSDK的Server端Demo使用幫助

          posted @ 2024-12-30 12:08 Jack Jiang 閱讀(79) | 評論 (0)編輯 收藏

               摘要: 本文的上篇我們討論了在線實時消息的投遞,如果接收方用戶B不在線,系統是如何保證離線消息的可達性的呢?這就是本文要討論的問題。  閱讀全文

          posted @ 2016-11-18 14:39 Jack Jiang 閱讀(3083) | 評論 (0)編輯 收藏

               摘要: 雖然C10K問題已被妥善解決,但對于即時通訊應用(或其它網絡編程方面)的開發者而言,研究C10K問題仍然價值巨大,因為技術的發展都是有規律和線索可循的,了解C10K問題及其解決思路,通過舉一反三,或許可以為你以后面對類似問題提供更多可借鑒的思想和解決問題的實踐思路。而這,也正是撰寫本文的目的所在。  閱讀全文

          posted @ 2016-10-21 16:02 Jack Jiang 閱讀(2674) | 評論 (0)編輯 收藏

               摘要: 本文將以新手的視角引導你閱讀相關文章,以便為從零開發一個移動端IM做好方方面面的知識準備:包括但不限于網絡編程基礎、通信協議的選型、IM的架構設計等等。  閱讀全文

          posted @ 2016-08-29 17:42 Jack Jiang 閱讀(3204) | 評論 (0)編輯 收藏

               摘要: 本文將簡要介紹TeamTalk開源的過去和現在,為打算研究和采用TeamTalk的同行提供一定程度的參考。  閱讀全文

          posted @ 2016-08-09 17:25 Jack Jiang 閱讀(2844) | 評論 (0)編輯 收藏

               摘要: 本文基于作者的實踐以及相關資料的整理,總結了自已對Android進程和Service保活的理解,希望能為你的應用開發帶來啟發。  閱讀全文

          posted @ 2016-08-02 22:43 Jack Jiang 閱讀(2562) | 評論 (0)編輯 收藏

               摘要: 本文將介紹如何在現有的技術基礎上選擇合適的方案開發一個“服務器推”(Comet技術)的應用,最優的方案還是取決于應用需求的本身。相對于傳統的 Web 應用, 開發 Comet 應用具有一定的挑戰性。  閱讀全文

          posted @ 2016-07-28 11:07 Jack Jiang 閱讀(1505) | 評論 (0)編輯 收藏

               摘要: 本文對服務器推送技術(SSE)進行了詳細的介紹,包含瀏覽器端和服務器端的相應實現細節,為在實踐中使用該技術提供了指南  閱讀全文

          posted @ 2016-07-22 18:03 Jack Jiang 閱讀(1209) | 評論 (0)編輯 收藏

               摘要: Web端即時通訊技術因受限于瀏覽器的設計限制,一直以來實現起來并不容易,主流的Web端即時通訊方案大致有4種:傳統Ajax短輪詢、Comet技術、WebSocket技術、SSE(Server-sent Events)。本文將簡要介紹這4種技術的原理,并指出各自的異同點、優缺點等。  閱讀全文

          posted @ 2016-07-15 15:08 Jack Jiang 閱讀(1879) | 評論 (2)編輯 收藏

               摘要: Web端的IM應用,由于瀏覽器的兼容性以及其固有的“客戶端請求服務器處理并響應”的通信模型,造成了要在瀏覽器中實現一個兼容性較好的IM應用,其通信過程必然是諸多技術的組合,本文的目的就是要詳細探討這些技術并分析其原理和過程。   閱讀全文

          posted @ 2016-07-12 15:59 Jack Jiang 閱讀(5591) | 評論 (0)編輯 收藏

               摘要: 文演示的是一個Android客戶端程序,通過UDP協議與兩個典型的NIO框架服務端(分別用MINA2和Netty4來實現),實現跨平臺雙向通信的完整Demo。  閱讀全文

          posted @ 2016-06-30 16:57 Jack Jiang 閱讀(762) | 評論 (0)編輯 收藏

               摘要: 本文將演示一個iOS客戶端程序,通過UDP協議與兩個典型的NIO框架服務端(將分別用MINA2和Netty4來實現),實現跨平臺雙向通信的完整Demo。  閱讀全文

          posted @ 2016-06-28 22:11 Jack Jiang 閱讀(1400) | 評論 (0)編輯 收藏

               摘要: 本文是《NIO框架入門》系列文章中的第2篇,將演示的是一個基于MINA2的UDP服務端和一個標準UDP客戶端(Java實現)雙向通信的完整例子。  閱讀全文

          posted @ 2016-06-24 14:38 Jack Jiang 閱讀(855) | 評論 (0)編輯 收藏

               摘要: 本文將演示的是一個基于Netty4的UDP服務端和一個標準UDP客戶端(Java實現)雙向通信的完整例子。實際上,Netty4的UDP例子非常難找,官方的代碼演示里只有一個簡單的UDP廣播例子,不足以用于演示Netty4的UDP通信最佳實踐。  閱讀全文

          posted @ 2016-06-20 14:48 Jack Jiang 閱讀(1527) | 評論 (0)編輯 收藏

               摘要: MobileIMSDK是一套專為移動端開發的原創即時通訊框架:超輕量級、高度提煉,lib包50KB以內;完全基于UDP協議實現;客戶端支持iOS、Android、標準Java平臺;可應用于跨設備、跨網絡的聊天APP、企業OA、消息推送等各種場景。  閱讀全文

          posted @ 2015-12-14 15:18 Jack Jiang 閱讀(2787) | 評論 (0)編輯 收藏

               摘要: MobileIMSDK是專為移動端開發的原創即時通訊開源框架:超輕量級、高度提煉,lib包50KB以內;完全基于UDP協議實現;客戶端支持iOS、Android、標準Java平臺;可應用于跨設備、跨網絡的聊天APP、企業OA、消息推送等各種場景。  閱讀全文

          posted @ 2015-12-01 16:06 Jack Jiang 閱讀(3379) | 評論 (2)編輯 收藏

          Jack Jiang的 Mail: jb2011@163.com, 聯系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 开远市| 剑阁县| 微山县| 郑州市| 稷山县| 仪征市| 当涂县| 汶上县| 山阴县| 江口县| 大庆市| 临沂市| 尼玛县| 大名县| 行唐县| 阳东县| 延安市| 广安市| 错那县| 昆明市| 道孚县| 兴仁县| 泸州市| 临沂市| 阿鲁科尔沁旗| 南城县| 武夷山市| 鄂尔多斯市| 滨州市| 彰武县| 玛曲县| 含山县| 平潭县| 玉龙| 荥经县| 宿迁市| 井研县| 务川| 英山县| 库尔勒市| 高州市|