微信小程序 实现实时消息与 uniapp 转码成微信小程序 实现实时消息两者是一样的,区别仅仅是一个是原生小程序一个是 uniapp 转码成小程序。
本文主要简单实现点对点消息与呼叫邀请等相关功能实现。
uniapp转码成小程序逻辑与小程序逻辑基本一致。
引入 RTM SDK
使用 web RTM-SDK 即可,小程序的实时消息与 WEB 的实时消息共用 SDK。
使用 1.0.5 版本,否则转成小程序时可能会无法正常使用
npm i ar-rtm-sdk@1.0.5
// 引入 anyRTM
import ArRTM from "ar-rtm-sdk"
代码封装
你可以在页面里边直接调用,也可单独封装成一个 js。
本人喜欢将 RTM 封装成一个 js 文件。
本地存放
const Store = {
// RTM 客户端
rtmClient: null,
// 主叫邀请实例
localInvitation: null,
// 被叫收到的邀请实例
remoteInvitation: null,
}
回调封装
本文仅进行简单封装,如需更复杂逻辑请自行更改。
// RTM 监听事件
const rtmEvent = {
// 主叫:被叫已收到呼叫邀请
localInvitationReceivedByPeer: () => {
uni.hideToast();
uni.showToast({
title: '被叫已收到呼叫邀请',
icon: 'none',
duration: 2000,
mask: true,
});
},
// 主叫:被叫已接受呼叫邀请
localInvitationAccepted: async (response) => {
console.log("主叫:被叫已接受呼叫邀请", response);
uni.hideToast();
uni.showToast({
title: '被叫接受呼叫邀请',
icon: 'none',
duration: 2000,
mask: true,
});
},
// 主叫:被叫拒绝了你的呼叫邀请
localInvitationRefused: (response) => {
console.log("主叫:被叫拒绝了你的呼叫邀请", response);
uni.hideToast();
uni.showToast({
title: '被叫拒绝呼叫邀请',
icon: 'none',
duration: 2000,
mask: true,
});
},
// 主叫:呼叫邀请进程失败
localInvitationFailure: (response) => {
console.log("主叫:呼叫邀请进程失败", response);
uni.hideToast();
uni.showToast({
title: '呼叫邀请失败',
icon: 'error',
duration: 2000,
mask: true,
});
},
// 主叫:呼叫邀请已被成功取消 (主动挂断)
localInvitationCanceled: () => {
console.log("主叫:呼叫邀请已被成功取消 (主动挂断)");
},
// 被叫:监听收到来自主叫的呼叫邀请
RemoteInvitationReceived: async (remoteInvitation) => {
console.log("监听收到来自主叫的呼叫邀请", remoteInvitation);
// 监听回调
rtmInternal.inviteProcessing(remoteInvitation)
// 显示模态弹窗
uni.showModal({
title: '提示',
content: '收到来自主叫的呼叫邀请',
cancelText: '拒绝',
confirmText: '接听',
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
remoteInvitation.accept();
} else if (res.cancel) {
console.