系统通知
更新时间: 2023/07/05 09:03:34
除消息通道外,SDK 还提供系统通知这种通道用于消息之外的通知分发。目前有两种类型:内置系统通知和自定义系统通知。现在主要包括群变动的相关通知,例如入群申请,入群邀请等,如果第三方应用还托管了好友关系,好友的添加、删除也是这个类型的通知。系统通知由 SDK 负责接收和存储,并提供较简单的未读数管理。发送自定义系统通知可以设置推送相关的参数。
注意:这里的入群申请、入群邀请的通知要区别于群操作的结果通知,比如创建群,解散群、踢人、拉人等群操作的通知。群操作的通知是通过IM消息通道来下发的(详见群通知事件)
NIMSysMessage
参数说明
类型 | 参数 | 说明 |
---|---|---|
ResponseCode | Response | 通知错误码 详见 ResponseCode |
NIMMessageFeature | Feature | 通知属性,区分离线,多端同步,漫游通知等等,详见NIMMessageFeature |
int | TotalUnread | 总计的通知未读数 |
NIMSysMessageContent | Content | 通知内容,详见NIMSysMessageContent |
NIMSysMsgType
通知类型说明
枚举 | 值 | 说明 |
---|---|---|
kNIMSysMsgTypeTeamApply | 0 | 申请入群 |
kNIMSysMsgTypeTeamReject | 1 | 拒绝申请入群 |
kNIMSysMsgTypeTeamInvite | 2 | 邀请入群 |
kNIMSysMsgTypeTeamInviteReject | 3 | 拒绝邀请入群 |
kNIMSysMsgTypeFriendAdd | 5 | 加好友 |
kNIMSysMsgTypeFriendDel | 6 | 删除好友 |
kNIMSysMsgTypeCustomP2PMsg | 100 | 点对点透传消息 |
kNIMSysMsgTypeCustomTeamMsg | 101 | 群透传消息 |
kNIMSysMsgTypeUnknown | 1000 | 未知类型,作为默认 |
NIMSysMessageContent
参数说明
类型 | 参数 | 说明 |
---|---|---|
long | Timetag | 时间戳,选填 |
NIMSysMsgType | MsgType | 通知的类型,如申请入群、邀请入群、添加好友等等,详见NIMSysMsgType |
string | ReceiverId | 接收者id,如果是个人,则是对方用户id,如果是群,则是群id,必填 |
string | SenderId | 发送者id,选填,如发送自定义通知消息时,可选填 |
string | Message | 通知附言,按需填写 |
string | Attachment | 附件,按需填写,类似于普通IM消息的附件内容,查看发送消息 |
long | Id | 服务器消息id(自定义通知消息,必须填0),发送方不需要填写 |
int | SupportOffline | (选填)自定义通知消息是否存离线:0-只发给在线用户,1-可发给离线用户 |
string | PushContent | (选填)自定义通知消息推送文本,不填则不推送 |
NIMSysMsgStatus | Status | 本地定义的系统消息状态,见NIMSysMsgStatus,发送方不需要填写 |
int | NeedPush | (可选)是否需要推送, 0:不需要,1:需要,默认填1,配合PushContent 使用 |
int | NeedPushCount | (可选)推送是否要做消息计数(角标), 0:不需要,1:需要,默认填1,配合PushContent 使用 |
int | NeedPushPrefix | (可选)推送是否需要推送昵称,0:不需要,1:需要,默认填0,配合NeedPush 使用 |
JsonExtension | CustomPushContent | (可选)第三方自定义的推送负载内容,必须为可以解析为json的非格式化的字符串,长度2048 |
bool | AntiSpamEnabled | 是否需要过易盾反垃圾,默认false |
string | AntiSpamContent | (可选)开发者自定义的反垃圾字段,长度限制:5000字符,配合AntiSpamEnabled 使用 |
推送、反垃圾等等消息设置类似IM的消息设置
接收系统通知
注册/注销系统消息接收事件。需要在登录之前先注册。为了保证整个程序逻辑的一致性,APP 需要针对不同类型的系统通知进行相应的操作。
- API 原型
public static EventHandler<NIMSysMsgEventArgs> ReceiveSysMsgHandler;
-
参数说明 暂无
-
示例
//回调
void OnReceiveSysMessage(object sender, NIMSysMsgEventArgs e)
{
//处理通知消息
...
}
//监听事件
NIM.SysMessage.SysMsgAPI.ReceiveSysMsgHandler += OnReceiveSysMessage;
//取消监听
NIM.SysMessage.SysMsgAPI.ReceiveSysMsgHandler -= OnReceiveSysMessage;
发送自定义系统通知
除了内置系统通知外,SDK 也额外提供了自定义系统给开发者,方便开发者进行业务逻辑的通知。这个通知既可以由客户端发起也可以由开发者服务器发起。
客户端发起的自定义通知,该类型通知格式由开发者自定义(Attachment
),SDK 仅负责发送、接收,支持在线或离线发送,且支持点对点通知和群通知,不做任何解析,也不会存储,因此也不会在聊天记录中体现,可以使用的场景例如发送正在输入的状态等。
此外,自定义系统通知内容(NIMSysMessageContent)还提供了属性设置如下:
- 自定义通知消息是否存离线
- 自定义通知消息推送文本
- 第三方自定义的推送属性
- 是否需要推送
- 推送是否要做消息计数
- 推送是否需要推送昵称
SDK 并不负责自定义通知的持久化,APP 需要根据自己的业务逻辑按需进行解析和持久化的工作。
- API 原型
public static void SendCustomMessage(NIMSysMessageContent content);
一秒内默认最多可调用该接口100次。如需上调上限,请在官网首页通过微信、在线消息或电话等方式咨询商务人员。
- 参数说明
参数 | 说明 |
---|---|
content | 消息内容,详见NIMSysMessageContent |
- 示例
//以测试账号test1为例;
NIMSysMessageContent content = new NIMSysMessageContent();
content.ReceiverId = "test1";
content.MsgType = NIMSysMsgType.kNIMSysMsgTypeCustomP2PMsg;
JsonExtension attach = new JsonExtension();
attach.AddItem("id", "2");
attach.AddItem("content", "attachment");
content.Attachment = attach.Value;
content.Timetag = 1520423612222;//当前时间UNIX时间戳 13位(毫秒)
//存离线
content.SupportOffline = NIMMessageSettingStatus.kNIMMessageStatusSetted;
//推送并计数
content.NeedPush = NIMMessageSettingStatus.kNIMMessageStatusSetted;
content.NeedPushCount = NIMMessageSettingStatus.kNIMMessageStatusSetted;
//推送通知有前缀显示,比如mmm:通知内容
content.NeedPushPrefix = NIMMessageSettingStatus.kNIMMessageStatusNotSet;
//推送消息的内容
content.PushContent = "这是一条推送通知消息";
//可以添加推送负载信息
JsonExtension push_content = new JsonExtension();
push_content.AddItem("Content", "这是推送负载信息");
content.CustomPushContent = push_content;
content.ClientMsgId = "uuid";//需要生成唯一uuid
....
//发送消息
NIM.SysMessage.SysMsgAPI.SendCustomMessage(content);
发送自定义系统通知结果
发送自定义通知消息结果通知。
- API 原型
public static EventHandler<MessageArcEventArgs> SendSysMsgHandler;
-
参数说明 暂无
-
示例
//回调
void OnSendSysMsgHandler(object sender, NIMSysMsgEventArgs e)
{
//处理通知消息
...
}
//监听事件
NIM.SysMessage.SysMsgAPI.SendSysMsgHandler += OnSendSysMsgHandler;
//取消监听
NIM.SysMessage.SysMsgAPI.SendSysMsgHandler -= OnSendSysMsgHandler;
通知消息管理
SDK提供接口查询历史消息,查询消息未读数、设置已读、删除通知等功能支持
查询系统通知
查询本地系统消息(按时间逆序起查,逆序排列)。
NIMSysMsgQueryResult
参数说明
类型 | 参数 | 说明 |
---|---|---|
int | count | 消息总数 |
int | UnreadCount | 未读通知消息总数 |
NIMSysMessageContent[] | MsgCollection | 通知消息集合,详见NIMSysMessageContent |
- API 原型
public static void QueryMessage(int limit, long lastTimetag, QuerySysMsgResult cb);
- 参数说明
参数 | 说明 |
---|---|
limit | 一次查询数量,建议20 |
lastTimetag | 上次查询最后一条消息的时间戳(按时间逆序起查,即最小的时间戳),起始查询填0 |
cb | 操作结果回调 |
- 示例
//起始查询
NIM.SysMessage.SysMsgAPI.QueryMessage(20,0,(result)=>{
...
});
//假设起始查询的最后一条消息时间戳是 '1520423612222'
NIM.SysMessage.SysMsgAPI.QueryMessage(20,1520423612222,(result)=>{
...
});
查询未读消息数
- API 原型
public static void QueryUnreadCount(CommomOperateResult cb);
- 参数说明
参数 | 说明 |
---|---|
cb | 操作结果回调 |
- 示例
//查询未读通知数
NIM.SysMessage.SysMsgAPI.QueryUnreadCount((code, count)=>{
...
});
设置消息状态
可以将消息状态设置为通过,拒绝,已读,已失效等状态。
NIMSysMsgStatus
枚举说明
枚举 | 值 | 说明 |
---|---|---|
kNIMSysMsgStatusNone | 0 | 默认,未读 |
kNIMSysMsgStatusPass | 1 | 收到消息,通过 |
kNIMSysMsgStatusDecline | 2 | 收到消息,拒绝 |
kNIMSysMsgStatusRead | 3 | 收到消息,已读 |
kNIMSysMsgStatusDeleted | 4 | 已删 |
kNIMSysMsgStatusInvalid | 5 | 已失效 |
- API 原型
public static void SetMsgStatus(long msgId, NIMSysMsgStatus status, OperateSysMsgExternDelegate cb);
- 参数说明
参数 | 说明 |
---|---|
msgId | 消息id |
status | 消息状态,详见NIMSysMsgStatus |
cb | 操作结果回调 |
- 示例
//设置消息状态
long msgId = 213213111;
NIM.SysMessage.SysMsgAPI.SetMsgStatus(msgId,NIMSysMsgStatus.kNIMSysMsgStatusPass,(code, msg_id, unread_count, json_extension, user_data)=>{
if (code == 200)//成功
{
...
}
});
按消息类型批量设置消息状态
- API 原型
public static void SetMsgStatusByType(NIMSysMsgType type, NIMSysMsgStatus status, OperateSysMsgDelegate cb);
- 参数说明
参数 | 说明 |
---|---|
type | 消息类型,详见NIMSysMsgType |
status | 消息状态,详见NIMSysMsgStatus |
cb | 操作结果回调 |
- 示例
//按类型设置消息状态
NIM.SysMessage.SysMsgAPI.SetMsgStatusByType(NIMSysMsgType.kNIMSysMsgTypeTeamApply,NIMSysMsgStatus.kNIMSysMsgStatusPass,(code, unread_count, json_extension, user_data)=>{
if (code == 200)//成功
{
...
}
});
设置全部消息已读
- API 原型
public static void SetAllMsgRead(OperateSysMsgDelegate cb);
- 参数说明
参数 | 说明 |
---|---|
cb | 操作结果回调 |
- 示例
//设置全部消息已读
NIM.SysMessage.SysMsgAPI.SetAllMsgRead((code, unread_count, json_extension, user_data)=>{
if (code == 200)//成功
{
...
}
});
删除单条通知消息
- API 原型
public static void DeleteByMsgId(long msgId, OperateSysMsgExternDelegate cb);
- 参数说明
参数 | 说明 |
---|---|
msgId | 消息id |
cb | 操作结果回调 |
- 示例
//删除消息
long msgId = 21321311;
NIM.SysMessage.SysMsgAPI.DeleteByMsgId(msgId,(code, msgId,unread_count, json_extension, user_data)=>{
if (code == 200)//成功
{
...
}
});
按消息类型批量删除消息
- API 原型
public static void DeleteMsgByType(NIMSysMsgType type, OperateSysMsgDelegate cb);
- 参数说明
参数 | 说明 |
---|---|
type | 消息类型,详见NIMSysMsgType |
cb | 操作结果回调 |
- 示例
//删除kNIMSysMsgTypeTeamApply类型的所有消息
NIM.SysMessage.SysMsgAPI.DeleteMsgByType(NIMSysMsgType.kNIMSysMsgTypeTeamApply,(code, unread_count, json_extension, user_data)=>{
if (code == 200)//成功
{
...
}
});