微信小程序接入腾讯云IM即时通讯(获取聊天历史记录开发步骤)

微信小程序接入腾讯云IM即时通讯(获取聊天历史记录开发步骤)

1.先看文档

在这里插入图片描述-------------------

拉取历史记录代码

//获取最新的 C2C 历史消息,用于切换好友聊天,重新拉取好友的聊天消息
function getC2CHistoryMsgs() {
  currentMsgsArray = [];
    if (selType == webim.SESSION_TYPE.GROUP) {
        alert('当前的聊天类型为群聊天,不能进行拉取好友历史消息操作');
        return;
    }
    
    if (selType == webim.SESSION_TYPE.GROUP) {
      alert('当前的聊天类型为群聊天,不能进行拉取好友历史消息操作');
      return;
    }
    var lastMsgTime = 0; //第一次拉取好友历史消息时,必须传0
    var msgKey = wx.getStorageSync('msgKey') || '';
    var reqMsgCount = 5 ;
    var options = {
      'Peer_Account': id, //好友帐号
      'MaxCnt': reqMsgCount, //拉取消息条数
      'LastMsgTime': lastMsgTime, //最近的消息时间,即从这个时间点向前拉取历史消息
      'MsgKey': msgKey
    };
    selSess = null;
    webim.MsgStore.delSessByTypeId(selType, id);
    webim.getC2CHistoryMsgs(
        options,
        function (resp) {
            var complete = resp.Complete; //是否还有历史消息可以拉取,1-表示没有,0-表示有
            if (resp.MsgList.length == 0) {
                return
            }
            //拉取消息后,要将下一次拉取信息所需要的东西给存在缓存中
            wx.setStorageSync('lastMsgTime', resp.LastMsgTime);
            wx.setStorageSync('msgKey', resp.MsgKey);
            var msgList = resp.MsgList;
            for (var j in msgList) { //遍历新消息
                var msg = msgList[j];
                if (msg.getSession().id() == id) { //为当前聊天对象的消息
                    selSess = msg.getSession();
                    handlderMsg(msg,false)                    
                }
            }
            // 设置双方头像
            getMyAvatar(id, agent_member_id,function(){
              
              var myMessages = that.setDatas(currentMsgsArray)
              that.setData({
                myMessages: myMessages,
                complete: complete
              })
              console.log(currentMsgsArray)
              setTimeout(function(){
                that.pageScrollToBottom()
              },100)
            });  
         
        },
    )
}

向上翻页,获取更早的好友历史消息


//向上翻页,获取更早的好友历史消息(callOk,成功回调),(callNoData,没有历史记录回调)
function getPrePageC2CHistoryMsgs() {

    //获取下一次拉取的c2c消息时间和消息Key
    var lastMsgTime = wx.getStorageSync('lastMsgTime')
    var msgKey = wx.getStorageSync('msgKey');
    var reqMsgCount = 5;
    var options = {
        'Peer_Account': id, //好友帐号
        'MaxCnt': reqMsgCount, //拉取消息条数
        'LastMsgTime': lastMsgTime, //最近的消息时间,即从这个时间点向前拉取历史消息
        'MsgKey': msgKey
    };
    webim.getC2CHistoryMsgs(
        options,
        function (resp) {
          var complete = resp.Complete; //是否还有历史消息可以拉取,1-表示没有,0-表示有
          if (resp.MsgList.length == 0) {
            //获取七天之前的聊天历史记录
            that.getc2cmsg()
              return;
          }
         
          wx.setStorageSync('lastMsgTime', resp.LastMsgTime);
          wx.setStorageSync('msgKey', resp.MsgKey);
          // 下拉历史记录回调
          getHistoryMsgCallback(resp.MsgList, true, function (data) {
              var myMessages = that.setDatas(data)
              myMessages = myMessages.map((item, index) => {

                if (item.isSelfSend) {
                  item.avatar = friendAvatar
                }else{
                  item.avatar = myAvatar
                }
                return item;
              })
              wx.hideLoading();
              that.setData({
                myMessages: myMessages
              })
              
          });
        }
    );
};

腾讯云的历史记录只保留7天,7天之前的历史记录需要后台提供接口返回给前端

发布了14 篇原创文章 · 获赞 12 · 访问量 4万+
展开阅读全文

微信小程序 即时聊天IM,怎么将接受的消息渲染到UI上?

11-23

``` // pages/person/person.js var app = getApp() import TIM from 'tim-wx-sdk'; import COS from "cos-wx-sdk-v5"; let options = { SDKAppID: // 接入时需要将0替换为您的即时通信应用的 SDKAppID }; // 创建 SDK 实例,TIM.create() 方法对于同一个 SDKAppID 只会返回同一份实例 let tim = TIM.create(options); // SDK 实例通常用 tim 表示 Page({ /** * 页面的初始数据 */ data: { p_identity: "", message: "" }, onGotUserInfo: function(e) { var that = this; // console.log(e.detail.errMsg) console.log(e.detail.userInfo) // console.log(e.detail.rawData) if (e.detail) { getApp().globalData.userInfo = e.detail.userInfo; that.setData({ userInfo: e.detail.userInfo, userInfoFlag: true, modalHidden: true }) } else console.log(1234); wx.navigateTo({ url: '../register/register', }) }, goto_upload_ps_info: function(e) { wx.navigateTo({ url: '../Upload_personal_information/Upload_personal_information', }) }, tim_login: function(e) { wx.request({ url: 'https://www.ffgbookbar.cn/zhaopin/public/index.php/index', //仅为示例,并非真实的接口地址 data: { id: app.globalData.userid }, header: { 'content-type': 'application/json' // 默认值 }, method: 'get', success(res) { console.log(res) //从服务器返回 console.log(app.globalData.userid); console.log("123"); app.globalData.usersig = res.data.split("verify ")[0]; let promise = tim.login({ userID: app.globalData.userid, userSig: app.globalData.usersig }); promise.then(function (imResponse) { console.log(imResponse.data); // 登录成功 }).catch(function (imError) { console.warn('login error:', imError); // 登录失败的相关信息 }); } }) }, send_payload:function(e){ // 发送文本消息,Web 端与小程序端相同 // 1. 创建消息实例,接口返回的实例可以上屏 let message = tim.createTextMessage({ to: 'user0', conversationType: TIM.TYPES.CONV_C2C, payload: { text: 'nihao!!!!!!' } }); // 2. 发送消息 let promise = tim.sendMessage(message); promise.then(function (imResponse) { // 发送成功 console.log("send success!"); console.log(imResponse); }).catch(function (imError) { // 发送失败 console.warn('sendMessage error:', imError); }); }, /** * 生命周期函数--监听页面加载 */ onLoad: function(options) { console.log(app.globalData.identity == '面试官') this.setData({ p_identity: getApp().globalData.identity }) }, }) let onMessageReceived = function (event) { // event.data - 存储 Message 对象的数组 - [Message] console.log("收到即时消息!"); console.log(event.data); console.log(event.data[0].payload.text); }; tim.on(TIM.EVENT.MESSAGE_RECEIVED, onMessageReceived); var i=0; let onConversationListUpdated = function (event) { console.log("收到离线消息!"); console.log(event.data); console.log(event.data[i].lastMessage.messageForShow);// 包含 Conversation 实例的数组 i++; }; tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, onConversationListUpdated); ``` 怎么将 ``` let onConversationListUpdated = function (event) { console.log("收到离线消息!"); console.log(event.data); console.log(event.data[i].lastMessage.messageForShow);// 包含 Conversation 实例的数组 i++; }; tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, onConversationListUpdated); ``` 里的数据渲染到UI上。setdata()都不能用,用了会报错 问答

微信小程序 腾讯云 即时通讯IM GenerateTestUserSig的开源模块怎么使用?

11-23

这是GenerateTestUserSig.js的代码 ``` global.webpackJsonpMpvue([16],{ /***/ "dutN": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _SDKAPPID; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return genTestUserSig; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lib_generate_test_usersig_es_min_js__ = __webpack_require__("n7IX"); /*eslint-disable*/ const _SDKAPPID = 0; const _SECRETKEY = ''; /* * Module: GenerateTestUserSig * * Function: 用于生成测试用的 UserSig,UserSig 是腾讯云为其云服务设计的一种安全保护签名。 * 其计算方法是对 SDKAppID、UserID 和 EXPIRETIME 进行加密,加密算法为 HMAC-SHA256。 * * Attention: 请不要将如下代码发布到您的线上正式版本的 App 中,原因如下: * * 本文件中的代码虽然能够正确计算出 UserSig,但仅适合快速调通 SDK 的基本功能,不适合线上产品, * 这是因为客户端代码中的 SECRETKEY 很容易被反编译逆向破解,尤其是 Web 端的代码被破解的难度几乎为零。 * 一旦您的密钥泄露,攻击者就可以计算出正确的 UserSig 来盗用您的腾讯云流量。 * * 正确的做法是将 UserSig 的计算代码和加密密钥放在您的业务服务器上,然后由 App 按需向您的服务器获取实时算出的 UserSig。 * 由于破解服务器的成本要高于破解客户端 App,所以服务器计算的方案能够更好地保护您的加密密钥。 * * Reference:https://cloud.tencent.com/document/product/647/17275#Server */ function genTestUserSig(userID) { /** * 腾讯云 SDKAppId,需要替换为您自己账号下的 SDKAppId。 * * 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ) 创建应用,即可看到 SDKAppId, * 它是腾讯云用于区分客户的唯一标识。 */ var SDKAPPID = _SDKAPPID; /** * 签名过期时间,建议不要设置的过短 * <p> * 时间单位:秒 * 默认时间:7 x 24 x 60 x 60 = 604800 = 7 天 */ var EXPIRETIME = 604800; /** * 计算签名用的加密密钥,获取步骤如下: * * step1. 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ),如果还没有应用就创建一个, * step2. 单击“应用配置”进入基础配置页面,并进一步找到“帐号体系集成”部分。 * step3. 点击“查看密钥”按钮,就可以看到计算 UserSig 使用的加密的密钥了,请将其拷贝并复制到如下的变量中 * * 注意:该方案仅适用于调试Demo,正式上线前请将 UserSig 计算代码和密钥迁移到您的后台服务器上,以避免加密密钥泄露导致的流量盗用。 * 文档:https://cloud.tencent.com/document/product/647/17275#Server */ var SECRETKEY = _SECRETKEY; var generator = new __WEBPACK_IMPORTED_MODULE_0__lib_generate_test_usersig_es_min_js__["a" /* default */](SDKAPPID, SECRETKEY, EXPIRETIME); var userSig = generator.genTestUserSig(userID); return { sdkappid: SDKAPPID, userSig: userSig }; } /***/ }) }); ``` 我该怎么去引用GenerateTestUserSig.js, 使用里面的function genTestUserSig(userID) ``` var GenerateTestUserSig=require("../../debug/GenerateTestUserSig.js"); ``` 是这么引用吗?这么引用就会报错 ``` Uncaught TypeError: global.webpackJsonpMpvue is not a function at GenerateTestUserSig.js? [sm]:1 at require (VM167 WAService.js:1) at VM167 WAService.js:1 at person.js? [sm]:5 at require (VM167 WAService.js:1) at <anonymous>:92:7 at HTMLScriptElement.scriptLoaded (appservice?t=1574470090358:1736) at HTMLScriptElement.script.onload (appservice?t=1574470090358:1748) ``` 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览