回覆列表
  • 1 # 使用者7916214281179

    拍拍二手閒置平臺,可以將自己的閒置物品進行轉讓或者捐贈。想和賣家達成共識就需要涉及IM聊天。拍拍二手閒置平臺目前接入的是環信IM聊天。下面我將從三個階段帶大家玩轉環信IM會話。

    前期初識IM聊天帶著問題去調研必須接入環信嗎?除了環信是否可以接入其他即時通訊?環信目前有哪些功能呢?支援微信小程式嗎?如何接入小程式呢?調研分析必須接入環信嗎?除了環信是否可以接入其他即時通訊?

    現狀: 微信小程式API 提供了WebSocket 方法。擴充套件: 如果服務端支援scoket通訊,ios\android\H5 也全都支援Im聊天了備註:專業第三方Im有融雲、環信、雲之訊等,底層實現均是基於scoket 通訊。明白scoket通訊後也可以自己寫即時通訊。

    環信目前有哪些功能呢?支援微信小程式嗎?錯誤想法: 環信就是做im聊天的,咱們上去按照接入文件,開發就能搞定!!!

    這種想法是很致命的。在所有的第三方元件接入中,如果我們不能跳出來看待問題,只是為了完成任務而完成任務。那麼我們永遠是最底層的低階碼農。環信目前是同行業裡面做的算不錯的。那麼他的官網、接入規範都應該有的。微信小程式也是支援的。在後面小編會帶領大家一切怎麼去閱讀一個官網

    如何接入小程式?

    接入小程式是否需要申請一個賬號呢?我直接執行他們的demo可以嗎? 怎麼去測試呢? 此時我們可以有很多的猜想。我認為在開始接入之前我們應該很好的進行一些思考,答案顯而易見。

    環信接入思考篇快即時慢

    在工作中,大家會經常遇到第三方元件的接入。當接收到任務後,為了儘快完成任務。上來就google,找攻略,找技巧。往往認為這樣做速度是最快的。結果適得其反,做了很多無用的功。我們意識中的快,結果卻變成了慢

    慢即時快image

    逆向思維: 任何一個第三方的元件,特別是一個大點的平臺,他們為了推出自己的產品,一定會有各種各樣的功能支援,接入文件說明。我們放慢速度,將這些資源用上半天的時間進行簡單的梳理。後期的開發進度會有很大的提升。上圖是我在接入環信Im後進行的反思。因為在接入環信之前,其他團隊成員用了很長的時間聯調。假如他們在接入環信聊天之前,瞭解環信擁有自己的後臺,可以直接給使用者端傳送測試訊息;可以直接建立使用者、建立聊天室、建立群組。他們還會花費那麼久的時間去聯調嗎?完全不用依賴服務端。不用依賴ios,依賴android。自己使用環信後臺,輕輕鬆鬆完成各種測試。

    環信接入

    環信官網註冊自己的即時通訊雲,並登陸後臺

    image

    建立自己的應用,並記錄關鍵資訊

    image

    以下是關鍵資訊哦!!!

    image

    備註:

    應用標識 應用接入時會使用IM 使用者 可以建立、刪除使用者、傳送訊息群組 可以建立、刪除群組資訊、傳送訊息聊天室 可以建立、刪除聊天室、傳送訊息tip 透過這個後臺管理系統,就可以玩轉環信的接入測試了。

    從環信下載小程式demo,替換 appkey 進行聯調測試

    image測試走起

    使用者測試 在環信後臺建立使用者,在小程式端登入 (使用者demo1 密碼:123456)

    image

    一對一會話測試① 在環信後臺建立使用者demo2② 點選操作,檢視使用者好友將demo1和demo2 新增為好友。③ 在小程式端用demo1給demo2傳送測試訊息。④ 退出demo1使用者,登入demo2檢視是否會接收到demo1傳送的會話

    image

    由於環信工程師們相信碼農的實力,在群組測試和聊天室測試這塊為大家留下了想象空間。demo 中群組測試和聊天室測試為明確寫出。讓我繼續帶大家飛

    群組測試① 建立群組記錄群組id,並給群組新增成員(demo2)

    image

    ② 環信後臺給群組傳送測試訊息

    image③ 控制檯能收到群組測試訊息,怎麼展示呢? 請閱讀原始碼解析篇聊天室測試① 建立聊天室記錄聊天室id,將demo1 設定為超級管理員,demo2設定為管理員② 聊天室這裡沒有聊天室訊息的傳送。請閱讀原始碼解析篇

    透過以上4個簡單的測試,android、ios、h5、小程式的聊天測試均可以參照以上4點進行順利的測試。初期就此結束。下面帶代價進行原始碼的解析

    中期看原始碼前期思考image核心原始碼閱讀image

    以上是環信sdk 基礎程式碼結構。 透過簡單閱讀會發現:

    環信的scoket 通訊也使用了微信小程式暴露的scoket 通訊 (猜想 android、ios 其他端也有對應的scoket通訊)環信的api包裝在connection.js 元件中,如果某些api沒有,咱們可以擴充套件connection 中的方法

    環信核心程式碼閱讀完成後,發現沒有涉及到快取。看來快取的處理是在對應的業務邏輯中。

    設想:

    訊息應該在哪裡快取哪裡進行會話連結的監聽註冊環信demo 程式碼閱讀會話、群組

    透過前面提到的方式,大家可以在小程式控制臺抓取到使用者收到的會話和群組訊息

    會話

    app.js

    環信scoket 註冊監聽程式碼在app.js 中核心程式碼如下:

    實際開發過程中,在微信中,退出小程式,重新進入時,webscoket 通訊並沒有重新建立連結。存在使用者收到不到訊息的情況。可以將以上程式碼封裝,例如addHXLIstener(...)。當用戶重新開啟後,再次註冊環信監聽即可。拍拍二手閒置交易平臺,主要整合的是文字聊天功能。

    環信登入 例如 initLoginHX();

    chat 會話

    環信的會話列表儲存在本地,並沒有呼叫伺服器端資料

    透過以上程式碼得出結論: 環信的會話是透過遍歷使用者id+對方id 構成的資料。

    那群組和聊天室的怎麼處理呢?環信小程式demo中只提供了聊天室列表的獲取介面我們可以輕鬆實現聊天室列表,並沒有提供群組列表的獲取方式。我們需要在conection中擴充套件呼叫群組列表的介面,來實現群組列表。參照聊天室列表獲取即可實現。聊天室列表實現方式如下:

    chatroom

    從本地快取中獲取聊天記錄,並展示

    環信聊天頁面,聊天資料全部儲存在快取當中,跟進聊天型別的不同,主要需要調整快取的key。詳情如下:

    單對單聊天 對方uin+自己的uin群組聊天(針對某個商品,不需要好友關係,只需要臨時聊天) 群組id+對方uin+自己的uin聊天室(同群組聊天)問題大雜燴群組聊天快取如何儲存?

    答: 快取key 設定為 群組id+對方uin+自己的uin

    聊天時,如何在聊天中攜帶擴充套件資訊

    答: 訊息內容中,ext 支援使用者自定義引數傳遞

    會話列表如何實現?

    答: 透過介面獲取環信的群組列表,透過自己的伺服器端補全對應的會話資訊。

    回顧

    整個環信接入,整體圍繞 假設-->猜想-->實踐完成的。仔細閱讀官網,會為大姐節約很多時間

  • 中秋節和大豐收的關聯?
  • 學習asp.net(C#)開發要學習哪些相關知識?