使用Airship推送:如何禁用应用内通知并保留通知中心通知?
解决Airship禁用应用内通知但保留通知中心推送的问题
你遇到的问题在于PrivacyManager.FEATURE_IN_APP_AUTOMATION的作用范围并不覆盖所有应用内通知场景——这个开关仅控制自动化触发的应用内流程(比如基于用户行为、事件自动弹出的应用内消息),而非所有类型的应用内消息展示。要完全禁用应用内通知同时保留系统通知中心的推送,需要直接控制Airship的应用内消息模块:
正确实现方式
1. 全局禁用所有应用内消息
直接关闭Airship应用内消息模块的总开关,这样所有应用内消息(无论自动还是手动触发)都不会展示,而推送通知会正常进入系统通知中心:
Kotlin代码:
// 确保在Airship初始化完成后调用,比如在onAirshipReady回调中 UAirship.shared().inAppMessaging.isEnabled = false
Java代码:
// 初始化完成后执行 UAirship.shared().getInAppMessaging().setEnabled(false);
2. 仅禁用自动展示的应用内消息(保留手动触发能力)
如果需要保留手动触发应用内消息的能力,只是不想让系统自动弹出,可以通过设置展示权限代理来拦截自动展示请求:
Kotlin代码:
UAirship.shared().inAppMessaging.setDisplayPermissionDelegate { message, _ -> // 返回false阻止自动展示,手动触发时可忽略此代理 false }
注意事项
- 确保这些设置在Airship初始化完成后执行,比如放在
Airship.onReadyCallback中,避免因实例未初始化导致设置无效。 - 检查
airshipconfig.properties配置文件,若其中in_app_messaging_enabled被设为true,代码中的设置依然会覆盖配置值,但建议保持配置与代码逻辑一致。
内容的提问来源于stack exchange,提问作者NewCoder19
相关产品推荐
相关产品推荐

