系统通知概述
更新时间: 2024/03/14 16:36:31
系统通知概述
系统通知是云信系统内建的通知,包括预定义的内置系统通知和自定义系统通知两类。
云信 IM 支持下发 30 天内最近 10000 条系统通知(单个发起方最多 100 条)。
系统通知没有漫游概念即一条通知仅投递一次。例如,接收方多端登录在线,会同时收到;但是,发送方多端登录在线,不会同步到其他端;而且,只要接收方账号在线接收过,或者登录后接收过,后续任何设备再登录该账号,都不会再次收到。
内置系统通知
内置系统通知,其对应的数据结构为 SystemMessage
。由云信服务器推送给用户或群组的系统类的事件通知。内置系统通知由 SDK 负责接收和存储,并提供较简单的未读数管理。
目前内置系统通知主要包括高级群和超大群相关事件变动的通知,例如入群申请,入群邀请等。如果第三方应用还托管了好友关系,则好友的添加、删除也属于该类型的通知。具体推送的事件类型请参见SystemMessageType
内置系统通知通常在验证消息列表中展现。例如:某某某请求加你为好友等。
内置系统通知与通知消息的区别
在群组,超大群以及聊天室场景中,会通过通知的方式传递成员的具体操作。部分通知会通过通知消息接收,部分则通过内置系统通知接收。
例如:在群组中,用户申请入群(ApplyJoinTeam)和邀请他人入群(TeamInvite)会通过内置系统通知来通知群组成员。而同意入群申请(PassTeamApply)和同意入群邀请(AcceptInvite)则通过群通知消息的形式来通知。
IM SDK 区分两者的主要依据是,该通知是否归属于群会话。例如:用户申请入群,该消息仅需要群主或管理员处理,因此不属于群会话内容。而同意入群申请,该消息会通知群会话中的所有成员,因此属于群通知消息。
通知消息属于会话内的一种消息(消息类型为 MsgTypeEnum.notification
),有在线、离线、漫游。目前用于(已操作完成的)高级群、超大群和聊天室相关的通知消息(具体通知类型请参见 NotificationType
),不计入消息未读数。没有推送和通知栏提醒。通知消息一般位于聊天界面的中间。例如:群名称更新、某某某退出了群聊等。
自定义系统通知
自定义系统通知,其对应的数据结构为 CustomNotification
。自定义系统通知既可以由客户端发起,也可以由开发者服务器发起。SDK 仅透传自定义系统通知,不负责解析和存储。通知内容由第三方 APP 自由扩展。
开发者可以根据其业务逻辑自定义一些事件状态的通知,来实现各种业务场景。例如实现单聊场景中的对方“正在输入”的功能。
自定义系统通知不支持聊天室,仅支持点对点和高级群。
自定义系统通知与自定义消息的区别
自定义消息属于会话内的一种消息(消息类型为 MsgTypeEnum.custom
),主要提供给开发者定制消息使用,有在线、离线、漫游、通知栏提醒。自定义消息一般与普通文本,语音消息相同,位于聊天界面的左右两侧。例如,猜拳、贴图、阅后即焚均可以采用自定义消息来实现。
系统通知功能
类型 | 消息本地存储 | 未读计数 | 在线消息 | 离线消息 | 漫游消息 | 消息推送 |
---|---|---|---|---|---|---|
内置系统通知 | 有 | 有 | 有 | 有 | 没有 | 没有 |
自定义系统通知 | 没有 | 没有 | 有 | 有 | 没有 | 有 |
系统通知对象
- 内置系统通知由
SystemMessage
类定义。该接口的内置方法说明如下:
返回值类型 | SystemMessage 函数 | 说明 |
---|---|---|
String | getAttach() | 获取系统通知的附件内容 |
Object | getAttachObject() | 获取系统通知附件内容解析后的对象 |
String | getContent() | 获取系统通知的内容 |
String | getCustomInfo() | 获取自定义信息,目前只有拉人入群时可以设置 |
String | getFromAccount() | 该系统通知的发起方帐号 |
long | getMessageId() | 获取系统通知 ID |
SystemMessageStatus |
getStatus() | 获取系统通知的处理状态 |
String | getTargetId() | 获取系统通知的目标 ID |
long | getTime() | 获取系统通知的发出时间,单位为 ms |
SystemMessageType |
getType() | 获取系统通知类型 |
boolean | isUnread() | 判断该系统通知是否已读 |
void | setAttach(String attach) | 设置系统通知的附件内容 |
void | setAttachObject(Object object) | 设置解析后的附件对象 |
void | setContent(String content) | 设置系统通知的内容 |
void | setFromAccount(String fromAccount) | 设置发起方帐号 |
void | setMessageId(long messageId) | 设置系统通知 ID |
void | setStatus(SystemMessageStatus status) |
设置系统通知的处理状态 |
void | setTargetId(String targetId) | 设置系统通知的目标 ID |
void | setTime(long time) | 设置系统通知的发出时间 |
void | setType(int type) | 设置系统通知类型 |
void | setUnread(boolean unread) | 设置改系统通知已读/未读 |
- 自定义系统通知由
CustomNotification
类定义。该接口的内置方法说明如下:
返回值类型 | CustomNotification 函数 | 说明 |
---|---|---|
String | getApnsText() | 获取推送文案 |
CustomNotificationConfig |
getConfig() | 自定义通知的配置选项 |
String | getContent() | 获取消息具体内容 |
String | getFromAccount() | 获取该通知的发出者帐号 |
NIMAntiSpamOption |
getNIMAntiSpamOption() | 获取反垃圾配置 |
Map | getPushPayload() | 获取推送属性 |
String | getSessionId() | 获取聊天对象的 Id(好友帐号,群 ID 等) |
SessionTypeEnum |
getSessionType() | 获取会话类型 |
long | getTime() | 获取消息时间,单位为 ms |
boolean | isSendToOnlineUserOnly() | 该消息是否只发送当前在线的用户/群组 |
void | setApnsText(String apnsText) | 设置推送文案 |
void | setConfig(CustomNotificationConfig config) | 设置自定义通知的配置选项 |
void | setContent(String content) | 设置消息内容 |
void | setFromAccount(String fromAccount) | 设置该通知的发起者帐号 |
void | setNIMAntiSpamOption(NIMAntiSpamOption antiSpamOption) | 设置反垃圾配置项 |
void | setPushPayload(Map pushPayload) | 设置推送属性 |
void | setSendToOnlineUserOnly(boolean sendToOnlineUserOnly) | 设置该消息是否只发送给当前在线的用户/群组 |
void | setSessionId(String sessionId) | 设置聊天对象ID |
void | setSessionType(SessionTypeEnum sessionType) | 设置会话类型 |
void | setTime(long time) | 设置消息时间 |
系统通知类型
目前云信的内置系统通知类型如下:
通知类型 | 说明 |
---|---|
TeamInvite |
邀请用户加入高级群 |
ApplyJoinTeam |
用户申请加入高级群 |
DeclineTeamInvite |
用户拒绝加入高级群邀请 |
RejectTeamApply |
拒绝用户的加入高级群申请 |
SuperTeamInvite |
邀请用户加入超大群 |
SuperTeamApply |
用户申请加入超大群 |
SuperTeamInviteReject |
用户拒绝加入超大群邀请 |
SuperTeamApplyReject |
拒绝用户的加入超大群申请 |
AddFriend |
对方(请求/已经)加你为好友 |
undefined |
自定义事件 |
系统通知 API 概述
SDK 的 SystemMessageService
提供系统通知操作相关接口, SystemMessageObserver
提供系统通知相关观察者通知接口。