即时通讯
  • iOS : Objective-C
  • Android
  • macOS
  • Windows
  • Web
  • 小程序
  • Flutter
  • Unity3D
  • uni-app
  • React Native
  • 产品简介
  • 下载
  • 快速开始
    • 跑通示例源码
    • 实现基本消息收发
  • 用户相关
  • 房间相关
  • 群组相关
  • 消息相关
  • 呼叫邀请
  • 会话管理
  • 缓存管理
  • 离线推送
  • 语音组件
  • 客户端 API
  • 服务端 API
  • 迁移方案
  • SDK 错误码
  • 常见问题
  • 文档中心
  • 即时通讯
  • 离线推送
  • 自定义推送规则

自定义推送规则

更新时间:2024-04-01 15:12

多端登录场景下,如果用户希望当某些平台的账号在线时,部分其他平台上的账号不收到离线推送通知,可以通过自定义推送规则实现。

前提条件

在实现“自定义推送规则”功能之前,请确保:

实现流程

用户离线推送规则变化通知

如需用户自定义规则后收到通知,请注册 ZIMEventHandler 回调代理,并监听 userRuleUpdated

// 监听用户自定义规则
- (void)zim:(ZIM *)zim userRuleUpdated:(ZIMUserRule *)userRule{
    // 离线推送规则
    userRule.offlinePushRule;
}

设置离线推送规则

如需支持用户自定义推送规则时,开发者需要构造 ZIMUserOfflinePushRule,规定用户在哪些平台上在线(onlinePlatforms)时,哪些平台无需接收离线推送(notToReceiveOfflinePushPlatforms)。

调用 updateUserOfflinePushRule 接口,设置上述规则。

// 设置离线推送规则

// 构造 ZIMUserOfflinePushRule
ZIMUserOfflinePushRule *offlineRule = [[ZIMUserOfflinePushRule alloc] init];
// 当用户 win、MacOS、Linux 平台登录时
offlineRule.onlinePlatforms = @[@(ZIMPlatformTypeWin),@(ZIMPlatformTypeMacOS),@(ZIMPlatformTypeLinux)];
// 用户在 iPhoneOS、iPadOS、Android 上不收到离线推送
offlineRule.notToReceiveOfflinePushPlatforms = @[@(ZIMPlatformTypeIPhoneOS),@(ZIMPlatformTypeIPadOS),@(ZIMPlatformTypeAndroid)];

[[ZIM getInstance] updateUserOfflinePushRule:offlineRule callback:^(ZIMUserOfflinePushRule * _Nonnull offlinePushRule, ZIMError * _Nonnull errorInfo) {
}];

查询用户定义的推送规则

通过调用 querySelfUserInfo,即可在回调中的 selfUserInfo.userRule.offlinePushRule 获取当前用户自定义的离线推送规则。

[[ZIM getInstance] querySelfUserInfo:^(ZIMSelfUserInfo * _Nonnull selfUserInfo, ZIMError * _Nonnull errorInfo) {
    selfUserInfo.userRule.offlinePushRule; // 当前用户定义的离线推送规则
}];
本篇目录