接下来继续翻,真正符合我需求的还是文档常规集成这一块
//IM小程序SDKnpminstalltim-wx-sdk--save//发送图片、文件等消息需要的COSSDKnpminstallcos-wx-sdk-v5--save依赖安好,引用,搞到这里我就出现了第一个问题,搞得我头痛,我引用依赖后报了个错误
接下来就是按部就班初始化im了(直接把文档的扒下来就行)
看到这一串大宝贝儿,我就舒了口气,成功了嘛,那接下来我就登陆嘛!
引用
import{genTestUserSig}from'../../utils/GenerateTestUserSig'输出
onLoad:function(){console.log(genTestUserSig('TEST-1'));},打印
OJBK!成了,总算了给他登进去了--------更新割----------
接下来就是收发消息了,看了下文档,这就比较简单跑通了直接调接口,官方文档还是写得很通俗易懂了
HTML
wx.event.on('conversationRender',(e,nextReqMessageID,isCompleted)=>{letlist=[...e];//下面要进行页面赋值,这里的数组一定要深拷贝下来,不然直接给下面赋值e就会出现错误this.setData({'msgList':list,'nextReqMessageID':nextReqMessageID,'isCompleted':isCompleted},()=>{that.scrollToBottom()})})二、腾讯音视频实时互动我这里项目需求是语音聊天,所以我这里写的是语音功能集成,视频应该也差不多,请大家参考
1.依旧一样的需要一个腾讯云账号,然后创建一个运用,可以新建一个,也可以直接用集成IM实时通讯时的运用SDKAppID和密钥
(注意:这个音视频功能只有在真机上调试才可以哈,开发者工具不支持,必须要预览,然后真机扫码测试)
重头戏来了,上面两个功能都已经成功的集成,测试也没有问题,完全可以正常使用,于是这边我需要将两个功能集成在一起,就会有以下问题:
首先我们集成即时通讯IM会初始化一个tim实例
tim=TIM.create(options)//这一步初始化SDK实例然后在这个实例上监听各种事件(例举几个,全部事件请查看官方文档)
tim.on(TIM.EVENT.SDK_READY,function(event){//收到离线消息和会话列表同步完毕通知,接入侧可以调用sendMessage等需要鉴权的接口//event.name-TIM.EVENT.SDK_READY});tim.on(TIM.EVENT.MESSAGE_RECEIVED,function(event){//收到推送的单聊、群聊、群提示、群系统通知的新消息,可通过遍历event.data获取消息列表数据并渲染到页面//event.name-TIM.EVENT.MESSAGE_RECEIVED//event.data-存储Message对象的数组-[Message]});tim.on(TIM.EVENT.MESSAGE_REVOKED,function(event){//收到消息被撤回的通知//event.name-TIM.EVENT.MESSAGE_REVOKED//event.data-存储Message对象的数组-[Message]-每个Message对象的isRevoked属性值为true});tim.on(TIM.EVENT.MESSAGE_READ_BY_PEER,function(event){//SDK收到对端已读消息的通知,即已读回执。使用前需要将SDK版本升级至v2.7.0或以上。仅支持单聊会话。//event.name-TIM.EVENT.MESSAGE_READ_BY_PEER//event.data-event.data-存储Message对象的数组-[Message]-每个Message对象的isPeerRead属性值为true});然后我们在集成音视频TRTCCalling的组件并进行初始化
那么解决方案就是肯定只能实例化一个,那么就是要么让他封装的TRTCCallingzu组件使用我初始化的TIM实例,但是他组件中做了很多封装,要实现是很困难的,那么就只有我们使用它的实例.
不过最大的问题来了,他这里面的SDK_READY这个事件没有监听到,这个地方不会给到我反馈进入回调函数给我消息说SDKready,而即时通讯IM中tim.getMessageList这个初始化获取历史消息列表的方法必须要在SDKready状态后才能使用,我如果没办法监听到他SDK_READY就没办法初始化历史消息呀.目前卡在这一步,发了官方工单,等待解决中...
兄弟们有什么更好的方法能够解决吗或者其它的集成方式欢迎大家讨论
上述问题在与官方大佬沟通之后,有几个结果:
1:封装的TRTCCalling.js中他们监听的事件中SDK_READY确实无法给到反馈,进入回调函数2:上述截图中我们可以看出我们已经拿到了它组件实例化出来的tim实例:
"usingComponents":{"TRTCCalling":"/components/TRTCCalling/TRTCCalling"}然后在XXX.wxml中引用组件模板
更新---------------------------
a.constants.js//定义了我们需要用到的常量信息(订阅TIM事件名/TRTC事件名/默认用户配置)b.user-controller.js//封装了用户操作(在音视频房间的用户操作)c.tsignaling-wx.js//注意!!这是最关键的封装了以即时通讯tim为基础的各种信令操作,通过不同的信令操作驱动不同的音视频房间TRTC进行音视频互动的各种操作
通过上面简单的分析我们可以得出:
TRTCCalling组件的实现实际就是通过以即时通讯TIM为基础,发送不同的特定自定义即时通讯消息TIMCustomElem来模拟封装成不同的信令,而用户端通过识别不同的信令来调用音视频房间的加入/退出/接受邀请等等操作,从而实现了这么一个组件
实现:
找到组件的生命周期函数lifetimes下的created
这里找到了tsignaling实例的初始化语句
this.tsignaling=newTSignaling({SDKAppID:你的ID})我们将它进行修改成如下
注:这是我自己摸索捣鼓出来的一个笨拙的解决方案,我相信一定有更好的方案,如果大家有好的方法,请提出来指正,谢谢