提醒、免打扰与举报
im.push 是用户在服务端保存的提醒设置,即使没有配置 im-push 也可以管理;DRPush.of(im) 则是当前 Android 设备的原生通知控制器,两者的作用范围不同。
全局设置
import com.deeprespond.im.*
import kotlin.time.Duration.Companion.hours
im.push.updateSettings(
dnd = DndChange.On(8.hours),
quietHours = QuietHoursChange.Set(QuietHours("22:00", "08:00", "Asia/Shanghai")),
preview = PreviewChange.Set(PushPreview.SENDER_ONLY),
)DndChange.Off 关闭全局免打扰;QuietHoursChange.Off 删除时段,PreviewChange.UseDefault 使用应用默认预览。null 表示不修改对应设置。quietHours 按 IANA 时区执行,start、end 使用 HH:mm,跨午夜时 end 小于 start。
settings 是 StateFlow;PushSettings 区分 dndEnabled / dndUntil,以及本人 preview 和实际 effectivePreview。预览模式为 FULL、SENDER_ONLY、NONE。
会话免打扰
import com.deeprespond.im.*
im.push.mute(MuteTarget.single("bob"), MuteMode.NONE)
im.push.mute(MuteTarget.group(groupId), MuteMode.MENTION_ONLY)
im.push.unmute(MuteTarget.single("bob"))NONE 表示不提醒,不是“关闭免打扰”;MENTION_ONLY 只提醒 @我,限群聊。duration 可设置到期时间,不给为持续生效;getMute 读本地设置,unmute 解除。
前台消息提示
MessageReceived 带 notify 和 alert,im.push.shouldNotify(message) 也能计算提醒决策。业务在前台只对允许提醒的消息显示提示,避免后台推送和前台提示重复。已读状态、页面是否正在查看、静音和全局策略共同影响决策,不能只看“收到了事件”。
免打扰不删除消息;服务端仍同步消息和未读,通知渠道关闭也不等于退出 IM 登录。
举报
import com.deeprespond.im.*
val result = im.reports.submit(
ReportTarget.User("bob"),
ReportReason.ABUSE,
description = "持续发送侮辱消息",
)
val mine = im.reports.mine()
println(result)
println(mine.items.size)ReportTarget 支持 Message(messageId)、User(username, evidenceMessageIds?)、Group(groupId, evidenceMessageIds?)、Chatroom(roomId)、ChatroomMessage(roomId, messageId)。用户 / 群的证据消息最多五条,必须满足服务端归属与有效性要求。
原因包括 AD、FRAUD、PORN、POLITICS、TERRORISM、ABUSE、ILLEGAL、INFRINGEMENT、MINOR、OTHER。是否开放举报及提交限制由应用运行配置决定。完整参数见PushModule、ReportsModule。
