自定义系统通知收发
更新时间: 2024/11/21 16:31:48
NIM SDK 支持自定义系统通知的收发,帮助您快速实现多样化的业务场景。
本文介绍通过网易云信 NIM SDK 实现自定义系统通知的技术原理、具体的实现流程以及典型的应用场景。
技术原理
NIM SDK 提供自定义系统通知,既可以由客户端发起,也可以由开发者服务器发起。SDK 仅透传自定义系统通知,不负责解析和存储。通知内容由第三方 APP 自由扩展。
开发者可以根据其业务逻辑自定义一些事件状态的通知,来实现各种业务场景。例如实现单聊场景中的对方“正在输入”的功能。
实现流程
sequenceDiagram
用户A ->> NIM SDK:监听自定义系统通知事件
用户B ->> NIM SDK:构造自定义系统通知
用户B ->> NIM SDK:向A发送自定义系统通知
NIM SDK ->> 用户A:触发回调接收自定义系统通知
-
注册监听。
- 使用接收系统通知回调模板(
ReceiveSysmsgCallback
)并调用RegSysmsgCb
方法来监听系统通知接收事件。 - 使用接收系统通知回调模板(
SendCustomSysmsgCallback
)并调用RegSendCustomSysmsgCb
监听发送自定义系统通知的回调。
示例代码如下:
//监听系统通知接收事件 SystemMsg::RegSysmsgCb([](const SysMessage& msg) { // process msg }); //监听发送自定义系统通知事件 SystemMsg::RegSendCustomSysmsgCb([](const SendMessageArc& arc) { // process arc });
- 使用接收系统通知回调模板(
-
构造自定义系统通知。
通过调用
CreateCustomNotificationMsg
方法构造自定义系统通知。参数说明:
数 说明 imetag 时间戳 ype 系统通知类型,具体请参见 NIMSysMsgType
ontent 系统通知内容 eceiver_id 接收者 ID lient_msg_id 本地通知 ID sg_setting 系统通知相关配置,如是否需要推送、计数,是否支持离线发送等,具体请参见 SysMessageSetting
示例代码:
std::string sysmsg = SystemMsg::CreateCustomNotificationMsg("receiver_id", kNIMSysMsgTypeCustomTeamMsg, "client_msg_id", "content", SysMessageSetting());
-
发送自定义系统通知。
通过调用
SendCustomNotificationMsg
方法发送自定义系统通知。示例代码如下:void foo() { Json::Value json; Json::FastWriter writer; json["id"] = "1"; nim::SysMessage msg; msg.receiver_accid_ = ; //接收者id msg.sender_accid_ = ; //自己id msg.client_msg_id_ = QString::GetGUID(); //本地定义的消息id msg.attach_ = writer.write(json); //通知附件内容 msg.type_ = nim::kNIMSysMsgTypeCustomP2PMsg; //通知类型 nim::SystemMsg::SendCustomNotificationMsg(msg.ToJsonString()); }
一秒内默认最多调用该接口 100 次。如需上调上限,请在官网首页通过微信、在线消息或电话等方式咨询商务人员。
-
触发回调,收到自定义系统通知。
典型应用场景
这里以实现单聊场景中的对方“正在输入”的功能为例,示例代码如下:
SystemMsg::RegSysmsgCb([](const SysMessage& msg) {
if (msg.type_ == kNIMSysMsgTypeCustomP2PMsg) {
// 自定义点对点消息
Json::Value value;
Json::Reader reader;
if (reader.parse(msg.attach_, value) && value.isObject()) {
auto msg_type = value["msg_type"].asString();
if (msg_type == "typing") {
std::cout << "收到对方正在输入的通知" << std::endl;
// process typing notification
// ...
return;
}
// ...
}
}
// ...
});
void SendTypingNotification(){
Json::Value json;
Json::FastWriter writer;
json["msg_type"] = "typing";
nim::SysMessage msg;
msg.receiver_accid_ = ; //接收者id
msg.sender_accid_ = ; //自己id
msg.client_msg_id_ = QString::GetGUID(); //本地定义的消息id
msg.attach_ = writer.write(json); //通知附件内容
msg.type_ = nim::kNIMSysMsgTypeCustomP2PMsg; //通知类型
nim::SystemMsg::SendCustomNotificationMsg(msg.ToJsonString());
}
此文档是否对你有帮助?