为什么要使用推送权限提示?
要发送可以作为横幅显示、在锁屏上显示、播放声音等的推送通知,您的应用程序必须首先获得用户的许可。在 iOS、Android、华为、亚马逊和网页上,这涉及显示系统级权限提示。
requestPermission() SDK 方法随时触发提示,但如果没有适当的上下文,用户更可能拒绝——而在 iOS 上,被拒绝的提示将无法再次显示。
推荐的方法是”软提示”——一个引入请求的自定义应用内消息。如果用户接受,系统提示就会出现。如果他们拒绝,什么都不会发生——您可以稍后再次提问。

设置应用内推送权限提示
移除任何自动权限提示
在开始之前,请确保您的应用没有自动触发原生推送提示:
- 如果您在应用启动时调用
requestPermission()或optIn()方法,请将其移除。 - 移除对
requestAuthorizationWithOptions的原生 iOS 调用以及任何生成推送令牌的方法。 - 移除对
requestPermissions的 Android 调用以及任何生成推送令牌的方法。
创建或编辑应用内消息
前往 消息 > 应用内,然后执行以下操作之一:
将受众设置为显示给所有用户。OneSignal 会根据推送权限提示点击操作,自动过滤此消息,仅向未订阅推送的用户显示。
- 编辑默认的推送权限提示模板,或
- 点击新建消息来创建您自己的。


自定义消息设计
添加推送权限提示点击操作
向消息中的任何按钮或图像添加 推送权限提示 点击操作。点击时,将显示系统提示。

如果用户已经拒绝了权限,按钮将引导他们前往应用的通知设置。


具有”推送权限提示”操作的应用内消息不会向已经允许通知的用户显示。
选择触发器
受众控制谁有资格看到消息。触发器控制何时显示消息。
您可以触发消息:

- 应用打开时
- 经过设定的会话时间后
- 特定用户事件时
- 以编程方式,使用应用内消息 SDK 方法完全控制时机和上下文

以编程方式显示权限提示
您可以使用requestPermission() 或 optIn() SDK 方法手动触发推送权限提示。这对于自定义流程非常有用,例如:
- 偏好中心
- 用户资料屏幕
- 特定应用内事件
跟踪推送权限和提示结果
使用应用内消息提示推送时,您可以使用应用内消息点击监听器跟踪点击操作。 如果应用内消息显示但用户未点击按钮,请使用应用内消息生命周期事件跟踪展示和关闭。 要跟踪系统级权限提示的结果,请使用推送权限监听器。您可以将这些 SDK 事件发送到您选择的后端或分析工具。
常见问题
如果用户拒绝推送权限提示会发生什么?
在 iOS 上,拒绝系统提示会永久禁用您应用的推送通知——提示将无法再次显示。在 Android 上,用户还有一次机会(共两次)。用尽所有机会后,用户必须在设备的设置 > 通知中手动重新启用通知。OneSignal SDK 的requestPermission(fallbackToSettings: true) 方法可以在之前拒绝权限的情况下将用户重定向到其通知设置。
我可以自定义原生系统权限提示吗?
不可以。原生 iOS 和 Android 权限对话框由操作系统控制,无法自定义。您只能控制软提示(系统提示之前显示的应用内消息)。使用软提示来说明通知的价值、设定期望,并提高系统提示上”允许”的可能性。我还能使用临时通知提示用户吗?
可以。如果您使用 iOS 临时推送通知,您仍然可以显示软提示将这些用户转化为完整推送订阅者。在用户从临时通知中看到价值之后,有策略地安排提示时机。如何重新提示之前拒绝了推送的用户?
一旦用户在 iOS 上拒绝(或在 Android 上拒绝两次),您就无法再次显示系统权限提示。请改用requestPermission(fallbackToSettings: true) SDK 方法,它会打开应用的通知设置页面,让用户可以手动启用通知。配合一条说明通知价值的应用内消息使用。
Android 何时开始需要权限提示?
Android 13(API 级别 33)引入了运行时通知权限,需要用户对推送通知的明确同意。- 发布时间: 2022 年 8 月(Pixel 设备)
- 目标 SDK 要求: 截至 2023 年 8 月 31 日,Google Play 上的所有新应用和更新必须以 API 级别 33 或更高版本为目标。
- 来源: Google 的通知权限开发者指南
iOS 临时推送通知
在 iOS 12+ 上无需事先提示权限,即可将通知发送到通知中心。

