Set custom push rules
If a user is logged in on multiple platforms, the user can configure custom push rules to specify the platforms that can or cannot receive offline push notifications.
Prerequisites
Before you implement the custom push rule feature, make sure that the following conditions are met:
- Multi-device login is implemented. For more information, see Multi-device login.
Implementation steps
Notification for offline push rule update
To receive notifications when users customize rules, please listen for the onUserRuleUpdated callback.
// Listen for user-defined rules
@Override
void onUserRuleUpdated(ZIM * /*zim*/, const ZIMUserRule & userRule) {
// Offline push rules
userRule.offlinePushRule;
}Set offline push rules
To support custom push rules, developers need to construct ZIMUserOfflinePushRule to specify the platforms that do not receive offline push notifications (notToReceiveOfflinePushPlatforms) when the user is online on specified platforms (onlinePlatforms).
To set the above rules, call the updateUserOfflinePushRule interface.
// Construct ZIMUserOfflinePushRule
zim::ZIM::ZIMUserOfflinePushRule offlineRule;
// When the user logs in on Windows, macOS, and Linux platforms.
offlineRule.onlinePlatforms = {ZIM_PLATFORM_TYPE_WIN, ZIM_PLATFORM_TYPE_MACOS, ZIM_PLATFORM_TYPE_LINUX};
// The user does not receive offline push on the iPhoneOS, iPadOS, and Android platforms.
offlineRule.notToReceiveOfflinePushPlatforms = {ZIM_PLATFORM_TYPE_IPHONEOS, ZIM_PLATFORM_TYPE_IPADOS, ZIM_PLATFORM_TYPE_ANDROID};
// Call the updateUserOfflinePushRule method
zim::ZIM::ZIM.getInstance()->updateUserOfflinePushRule(offlineRule, [](const zim::ZIM::ZIMUserOfflinePushRule& updatedOfflinePushRule, const zim::ZIM::ZIMError& errorInfo) {});Query user-defined push rules
By calling querySelfUserInfo, you can get the current user-defined offline push rules in the selfUserInfo.userRule.offlinePushRule field in the callback.
zim::ZIM::ZIM.getInstance()->querySelfUserInfo([](const zim::ZIM::ZIMSelfUserInfo& selfUserInfo, const zim::ZIM::ZIMError& errorInfo) {
selfUserInfo.userRule.offlinePushRule; // Current user-defined offline push rules
});