/** * tim v2.7.6 */ const TIM = require('./tim-wx.js'); let selToID ,loginInfo ,sdkAppID ,avChatRoomId ,selSess ,tim ; function sdkLogin(userInfo, avChatRoomId, callback, callbackOptions) { tim.login({userID: userInfo.identifier, userSig: userInfo.userSig}) .then(()=> { //登录成功 加入大群 loginInfo = userInfo; avChatRoomId = avChatRoomId; callback & callback({ callback: callbackOptions }); }) .catch((err) => { callback & callback({ errCode: err, errMsg: err.ErrorInfo, callback: callbackOptions }); }); } // 创建群 function createBigGroup(options, callback, callbackOptions) { avChatRoomId = options.roomID; tim.createGroup({ groupID: options.roomID, type: TIM.TYPES.GRP_AVCHATROOM, maxMemberNum:500, name: options.roomName || '', memberList: [], }) .then(()=> { // 创建成功 selToID = options.roomID; tim.joinGroup({ groupID: options.roomID, type: TIM.TYPES.GRP_AVCHATROOM }) .then(function(imResponse) { callback && callback({ errCode: 0, callback: callbackOptions }); }) }) .catch((ret) => { callback && callback({ errCode: ret.ErrorCode, errMsg: ret.err_msg, callback: callbackOptions }); }) } //进入群 function applyJoinBigGroup(groupId, callback, callbackOptions) { selSess = null; tim.joinGroup({ groupID: groupId, type: TIM.TYPES.GRP_AVCHATROOM }) .then(function(imResponse) { console.log(imResponse.data,'申请加群核心回调') switch (imResponse.data.status) { case TIM.TYPES.JOIN_STATUS_WAIT_APPROVAL: // 等待管理员同意 break; case TIM.TYPES.JOIN_STATUS_SUCCESS: // 加群成功 selToID = groupId; callback && callback({ errCode: 0, callback: callbackOptions }); console.log(imResponse.data.group); // 加入的群组资料 break; case TIM.TYPES.JOIN_STATUS_ALREADY_IN_GROUP: // 已经在群中 callback && callback({ errCode: 666, callback: callbackOptions }); break; default: break; } }).catch(function(err){ console.error('进群请求失败', err.ErrorInfo); callback && callback({ errCode: 999, errMsg: err.ErrorInfo || 'IM进群失败', callback: callbackOptions }); console.warn('joinGroup error:', err); // 申请加群失败的相关信息 }); } // 连麦发送自定义消息 function sendC2CCustomMsg(toUserID, msg, callback) { console.log('tim-handler发送自定义',msg,toUserID) let form = { data: msg.data || '', description: msg.desc || '', extension: msg.ext || '' } if ( form.data.length === 0 && form.description.length === 0 && form.extension.length === 0 ) { return } let conversationType = form.data.includes('linkmic') ? TIM.TYPES.CONV_C2C : TIM.TYPES.CONV_GROUP const message = tim.createCustomMessage({ to: toUserID, conversationType: conversationType, payload: { data: form.data, description: form.description, extension: form.extension } }) tim.sendMessage(message,{ // 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。接入侧可自定义离线推送的标题及内容 offlinePushInfo: { disablePush:false, title: '收到一条新消息', // 离线推送标题 description: '请进入APP内查看', // 离线推送内容 androidOPPOChannelID: '' // 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID } }) .then(() => { console.log('发自定义消息成功'); callback && callback({ errCode: 0, errMsg: "" }); }) .catch(err => { console.error('发自定义消息失败:', err); callback && callback({ errCode: -1, errMsg: '发自定义消息失败:' + err.ErrorInfo }); }) Object.assign(form, { data: '', description: '', extension: '' }) } //发送文本消息 function sendTextMessage(msg,userInfo,callback) { console.log('tim-handler普通消息',msg) let message = tim.createCustomMessage({ to: msg.to, conversationType: TIM.TYPES.CONV_GROUP, // 消息优先级,用于群聊(v2.4.2起支持)。如果某个群的消息超过了频率限制,后台会优先下发高优先级的消息,详细请参考:https://cloud.tencent.com/document/product/269/3663#.E6.B6.88.E6.81.AF.E4.BC.98.E5.85.88.E7.BA.A7.E4.B8.8E.E9.A2.91.E7.8E.87.E6.8E.A7.E5.88.B6) // 支持的枚举值:TIM.TYPES.MSG_PRIORITY_HIGH, TIM.TYPES.MSG_PRIORITY_NORMAL(默认), TIM.TYPES.MSG_PRIORITY_LOW, TIM.TYPES.MSG_PRIORITY_LOWEST // priority: TIM.TYPES.MSG_PRIORITY_NORMAL, payload: { description:msg.text, extension: msg.text, data:'{"cmd":"CustomTextMsg","data":{"nickName":"'+userInfo.userName+'","headPic":"'+userInfo.userAvatar+'"}}' } }); // 2. 发送消息 tim.sendMessage(message,{ // 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。接入侧可自定义离线推送的标题及内容 offlinePushInfo: { disablePush:false, title: '收到一条新消息', // 离线推送标题 description: '请进入APP内查看', // 离线推送内容 androidOPPOChannelID: '' // 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID } }) .then(function(imResponse) { // 发送成功 console.log(imResponse,'文本消息发送成功'); callback && callback(); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); }); } //发送文本消息 function sendTextNewMessage(msg,userInfo,callback) { console.log('tim-handler普通消息',msg) let message = tim.createTextMessage({ to: msg.to, conversationType: TIM.TYPES.CONV_GROUP, // 消息优先级,用于群聊(v2.4.2起支持)。如果某个群的消息超过了频率限制,后台会优先下发高优先级的消息,详细请参考:https://cloud.tencent.com/document/product/269/3663#.E6.B6.88.E6.81.AF.E4.BC.98.E5.85.88.E7.BA.A7.E4.B8.8E.E9.A2.91.E7.8E.87.E6.8E.A7.E5.88.B6) // 支持的枚举值:TIM.TYPES.MSG_PRIORITY_HIGH, TIM.TYPES.MSG_PRIORITY_NORMAL(默认), TIM.TYPES.MSG_PRIORITY_LOW, TIM.TYPES.MSG_PRIORITY_LOWEST // priority: TIM.TYPES.MSG_PRIORITY_NORMAL, payload: { text:'{"cmd":"CustomTextMsg","data":{"userName":"'+userInfo.userName+'","nickName":"'+userInfo.userName+'","headPic":"'+userInfo.userAvatar+'","text":"'+msg.text+'"}}' } }); // 2. 发送消息 tim.sendMessage(message,{ // 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。接入侧可自定义离线推送的标题及内容 offlinePushInfo: { disablePush:false, title: '', // 离线推送标题 description: '', // 离线推送内容 androidOPPOChannelID: '' // 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID } }) .then(function(imResponse) { // 发送成功 console.log(imResponse,'文本消息发送成功'); callback && callback(); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); }); } // 解散群 function destroyGroup() { tim.dismissGroup(avChatRoomId) .then(function(imResponse) { // 解散成功 avChatRoomId = ''; console.log(imResponse.data.groupID,'解散成功'); // 被解散的群组 ID }).catch(function(imError) { console.warn('dismissGroup error:', imError); // 解散群组失败的相关信息 }); } //退出群 function quitBigGroup() { if(avChatRoomId){ tim.quitGroup(avChatRoomId) .then(function(imResponse) { console.log(imResponse.data.groupID, 'IM退群成功'); // 退出成功的群 ID }).catch(function(imError){ console.warn('quitGroup error:', imError); // 退出群组失败的相关信息 }) } } //登出 function logout() { //登出 tim.logout() .then(function(imResponse) { console.log(imResponse.data,'IM登出成功'); // 登出成功 if(loginInfo) { loginInfo.identifier = null; loginInfo.userSig = null; } }).catch(function(imError) { console.warn('logout error:', imError); }) } function init(opts){ sdkAppID = opts.sdkAppID; avChatRoomId = opts.avChatRoomId || 0; selToID = opts.selToID; // 初始化 SDK 实例 tim = opts.tim; } module.exports = { init : init, sdkLogin : sdkLogin, createBigGroup : createBigGroup, applyJoinBigGroup : applyJoinBigGroup, sendC2CCustomMsg : sendC2CCustomMsg, sendTextMessage : sendTextMessage, sendTextNewMessage : sendTextNewMessage, quitBigGroup : quitBigGroup, destroyGroup : destroyGroup, logout : logout, };