提醒、免打擾與舉報
本頁講使用者的提醒設定(全域性免打擾、夜間免打擾、通知預覽)、會話免打擾、App 在前臺時的訊息提示,以及舉報。
注意區分兩個物件:
im.push:使用者儲存在服務端的提醒設定,在使用者的所有裝置間同步。沒有引入im-push也能使用。DRPush.of(im):這臺 Android 裝置上的系統通知控制器,見離線推送。
| 要做什麼 | 看哪裡 |
|---|---|
| 全域性免打擾、夜間免打擾、通知顯示的內容 | 全域性設定 |
| 某個單聊或群免打擾 | 會話免打擾 |
| App 在前臺時提示新訊息 | 前臺訊息提示 |
| 舉報使用者、訊息、群或聊天室 | 舉報 |
全域性設定
kotlin
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表示不修改這一項。- 夜間免打擾按 IANA 時區計算,
start、end為HH:mm;跨過午夜時end小於start。 settings是StateFlow。PushSettings中,全域性免打擾分為是否開啟dndEnabled和到期時間dndUntil;預覽方式有使用者自己選的preview和實際生效的effectivePreview,取值為FULL(顯示內容)、SENDER_ONLY(只顯示傳送者)、NONE(都不顯示)。
會話免打擾
kotlin
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"))MuteMode.NONE表示“不提醒”,不是“取消免打擾”;MENTION_ONLY只在有人 @ 我時提醒,只用於群。duration設定到期時間,不傳則一直有效。getMute讀取本地的設定,unmute取消免打擾。
前臺訊息提示
MessageReceived 事件帶有 notify(這條訊息是否應該提醒)和 alert;也可以用 im.push.shouldNotify(message) 自己判斷。App 在前臺時,只對應該提醒的訊息顯示提示,以免和系統推送重複。是否提醒綜合考慮了已讀狀態、頁面是否正在檢視、會話免打擾和全域性設定,不要收到事件就提示。
免打擾不會刪除訊息:訊息和未讀數照常同步。關閉通知渠道也不會退出 IM 登入。
舉報
kotlin
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)。- 舉報使用者和群時最多附 5 條證據訊息:舉報使用者的必須是他發的,舉報群的必須是這個群裡的,都不能是已撤回的。
- 原因
ReportReason:AD(廣告)、FRAUD(詐騙)、PORN(色情)、POLITICS(涉政)、TERRORISM(暴恐)、ABUSE(辱罵)、ILLEGAL(違法)、INFRINGEMENT(侵權)、MINOR(涉及未成年人)、OTHER(其他)。 - 是否允許舉報、提交的頻率限制由應用的執行配置決定。
完整引數見 PushModule、ReportsModule。
