微信小程序集成騰訊雲 IM SDK
一、背景
因業務功能需求須要接入IM(即時聊天)功能,一開始想到的是使用 WebSocket 來實現這個功能,然天意捉弄(哈哈)服務器版本過低不支持 wx 協議(也就不支持 WebSocket了)不得不尋找第三方服務了,因客戶端目前採用微信小程序來開發,那想到的確定就是使用他們自家的IM功能了。至此就有了本篇文章了。html
二、文檔地址
1)騰訊雲即時聊天:https://cloud.tencent.com/document/product/269git
2)微信小程序Demo:https://github.com/tencentyun/TIMSDK/tree/master/WXMini(官方採用的是MPVUE 來開發)這點已提了建議(自家的小程序竟然採用了別家的框架 哈哈 有點打臉的感受,不得不說 MPVUE 我還沒入門 哈哈,看來得學習下這個框架了,騰訊的工程師都使用它了,不得不說它是一個優秀的小程序框架了)github
3)IM SDK :https://imsdk-1252463788.file.myqcloud.com/IM_DOC/Web/Message.html?_ga=1.163142140.1311859679.1566291063npm
三、IM SDK 集成
3.一、導入 SDK
導入SDK,也就是引入他們的js 文件,下載地址:https://github.com/tencentyun/TIMSDK/tree/master/WXMini/sdk,或者使用npm工具導入。這裏就不在囉嗦了,默認你們都會哦。小程序
(爲了你們看的清楚,將其餘不用的包抹掉)微信小程序
3.二、初始化
import TIM from 'tim-wx-sdk'; // 發送圖片、文件等消息須要的 COS SDK import COS from "cos-wx-sdk-v5";//若是聊天發送的是純文字,這裏沒必要要導入 let options = { SDKAppID: 0 // 接入時須要將0替換爲您的即時通訊應用的 SDKAppID }; // 建立 SDK 實例,TIM.create() 方法對於同一個 SDKAppID 只會返回同一份實例 let tim = TIM.create(options); // SDK 實例一般用 tim 表示 // 註冊 COS SDK 插件 tim.registerPlugin({'cos-wx-sdk': COS});//若是聊天發送的是純文字,這裏不須要註冊
設置日誌級別:api
tim.setLogLevel(1);
3.三、登陸
登陸以前,須要瞭解 UserSig以及在服務器端生成UserSig,數組
UserSing:UserSig 是用戶登陸即時通訊 IM 的密碼,其本質是對 UserID 等信息加密後獲得的密文,本文將指導您如何生成 UserSig。promise
服務端生成 UserSig:(咱們的服務器採用的是C#,其餘語言請查看官網:https://cloud.tencent.com/document/product/269/32688)服務器
因咱們服務端採用的是C#,因此這裏只給出C#服務端生成UserSig的代碼
NuGet 命令行集成
PM> Install-Package tls-sig-api-v2
使用
using tencentyun; TLSSigAPIv2 api = new TLSSigAPIv2(1400000000, "5bd2850fff3ecb11d7c805251c51ee463a25727bddc2385f3fa8bfee1bb93b5e"); string sig = api.GenSig("userId");//userId:應該是您的 userId System.Console.WriteLine(sig);
tim 登陸
tim.login({ userID: userId, userSig:userSig//經過服務端得到 }).then((imResponse) => { console.log(imResponse.data); // 登陸成功 app.globalData.isImLogin = true }).catch((imError) => { console.warn('login error:', imError); // 登陸失敗的相關信息 })
3.四、消息的收發
發(以純文字爲例):
// 發送文本消息,Web 端與小程序端相同 // 1. 建立消息實例,接口返回的實例能夠上屏 let message = tim.createTextMessage({ to: 'user1', conversationType: TIM.TYPES.CONV_C2C payload: { text: 'Hello world!' } }); // 2. 發送消息 let promise = tim.sendMessage(message); promise.then(function(imResponse) { // 發送成功 console.log(imResponse); }).catch(function(imError) { // 發送失敗 console.warn('sendMessage error:', imError); });
收:
let onMessageReceived = function(event) { // event.data - 存儲 Message 對象的數組 - [Message] }; tim.on(TIM.EVENT.MESSAGE_RECEIVED, onMessageReceived);
*注意*:
這裏的 tim.on(TIM.EVENT.MESSAGE_RECEIVED,function(event){}) 這個接口是全局的,無論您寫在那裏,小程序首次啓動的時候都會調用它,每當有新消息來是這個接口也會監聽到。
在進入聊天界面後,調用tim.getMessageList()接口獲取歷史聊天記錄。
建議:在進入聊天界面後,請將本次的會話上報爲已讀,只有這樣設置後(上面所說的 小程序首次啓動是監聽的 tim.on(TIM.EVENT.MESSAGE_RECEIVED,function(event){}) 纔會不會收到已讀的消息 )
已讀上報:
// 將某會話下全部未讀消息已讀上報 tim.setMessageRead({conversationID: '會話ID'});
3.五、退出
tim.logout()
四、完成
說明:
1:若有疑問,能夠與我取得聯繫
2:已官方文檔爲主,頗有可能過些時間後文檔及SDK會發生變化
3:官方文檔已在上文中給出
4:文章首發於公衆號
5:服務端使用的小程序包是盛派的SDK(https://weixin.senparc.com)