在微信小程序里實現聊天室?
拍拍二手閑置平臺,可以將自己的閑置物品進行轉讓或者捐贈。想和賣家達成共識就需要涉及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 支持用戶自定義參數傳遞
會話列表如何實現?答: 通過接口獲取環信的群組列表,通過自己的服務器端補全對應的會話信息。
回顧整個環信接入,整體圍繞 假設-->猜想-->實踐完成的。仔細閱讀官網,會為大姐節約很多時間
作者:賈慧斌鏈接:https://www.jianshu.com/p/8919316d26b8來源:簡書簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。