实现实时消息和个人属性设置

387 阅读2分钟

开发前提条件

- 有效的 开发者账号

- 支持 RTM SDK 的主流浏览器:

下载 SDK

  • 官网下载中心找到 「RTM SDK 下载」 的 Web 端

  • 前往阿里云 OSSctrl + scommand + s 下载

  • 前往 github cloneDownload ZIP 下载

  • 通过 npm 市场下载

导入 SDK

  • script 标签引入

    使用 <script> 标签引入的 SDK ,window 对象中会暴露一个 ArRTM 的全局变量。

    <script src="/<YOUR_PATH>/to/ArRTM@latest.js"></script>
    
  • ES6 方式引入

    import ArRTM from '/<YOUR_PATH>/to/ArRTM@latest.js';
    
  • CommonJS 方式引入

    var ArRTM = require('/<YOUR_PATH>/to/ArRTM@latest.js');
    
  • npm 方式引入

    import ArRTM from 'ar-rtm-sdk';
    

初始化rtm实例

client = await ArRTM.createInstance(APPID);

登录并监听连接状态

// 登录
await client.login({ uid });
// 监听连接状态
client.on('ConnectionStateChanged', (newState, reason) => {
    if (reason == 'REMOTE_LOGIN') {
        // reason == 'REMOTE_LOGIN' 说明此用户在别处登录
    };
});

监听点对点消息

client.on('MessageFromPeer',  (message,  peerId) => {
    // 对方发来的消息
    const content = message.text;
    // 订阅该用户
    client.subscribePeersOnlineStatus([peerId]);
});

监听远端用户在线状态

// 订阅状态回调
client.on('PeersOnlineStatusChanged', (status) => {
    var peerId = null;
    var value = null;
    // status 为一个对象 [key: string]: string
    // key 是用户名,值是状态
    // 'ONLINE' 为在线状态
    for (var key in status) { 
        peerId = key;
        value = status[key];
    };
    // 处理ui变化,不是必须
    oldMsgList.forEach((item, index) => {
        if(item.peerId == peerId){
            item.login_status = value == 'ONLINE'? true : false;
        };
    });
});

发送消息

// 要发送的消息
const message = '你好,我是xxx';
// 这条消息发送给谁
const userid = '123456';
// 配置选项
const options = {
    enableHistoricalMessaging: true, // 是否启用历史消息
    enableOfflineMessaging: true // 是否启用离线消息
}
// 开始发送消息
client.sendMessageToPeer({text: message}, userid, options).then(() => {
    // 处理代码逻辑
});

属性设置

// 属性名
const key = 'name';
// 属性值
const value = '小花猫';
// 添加属性
client.addOrUpdateLocalUserAttributes({[key]: value});
// 修改属性
var findUser = userSettingList.find(item => item.key == key);
if(findUser){
    alert('不允许修改键');
    return;
};
await client.addOrUpdateLocalUserAttributes({[key]: value});
// 删除属性
await client.deleteLocalUserAttributesByKeys(key);

获取用户属性

// 获取谁的属性
const userid = '123456';
// 获取该用户下所有属性
var AttributesMap = await client.getUserAttributes(userid);
// 遍历属性
var AttributesList = [];
for(var key in AttributesMap){
    AttributesList.push({
        key: key, 
        value: AttributesMap[key], 
    });
};

登录频道

// 频道号
const Channelid = '888888';
// 创建频道
const channel = await client.createChannel(Channelid);
// 加入频道
await channel.join();
// 监听频道消息
channel.on('ChannelMessage', ({ text }, peerId) => { 
    // 消息处理代码逻辑
});

发送频道消息

// 要发送的消息
const message = '你好,我是xxx';
// 开始发送频道消息
channel.sendMessage({text: message}).then(() => {
    // 处理代码逻辑
});

频道属性设置

// 属性名
const key = 'name';
// 属性值
const value = '小花猫';
// 添加 / 修改频道属性
client.addOrUpdateChannelAttributes(Channelid, {[key]: value}).then(() => {
    // 处理逻辑
});

退出登录

client.logout();

Demo 体验

一次体验,胜过无数启迪,轻松成就完美体验 立即体验