You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Airship 7.1.2:如何获取用户推送通知的真实选择

解决Flutter Airship插件获取用户真实推送授权状态的问题

你遇到的问题核心在于:Airship.push.isUserNotificationsEnabled获取的是Airship SDK内部的配置值,并非系统层面用户实际的推送授权结果。setUserNotificationsEnabled(true)只是告知Airship你希望启用推送功能,但不会直接同步系统的授权选择。

要获取用户真实的系统授权状态,需调用Airship提供的getNotificationStatus方法,它会返回包含系统授权信息的完整状态对象:

Airship.push.getNotificationStatus().then((status) {
  // 系统授权状态存储在authorizationStatus字段中
  debugPrint("系统推送授权状态: ${status.authorizationStatus}");
  // 可选:同时查看Airship内部的推送启用设置
  debugPrint("Airship内部启用状态: ${status.userNotificationsEnabled}");
});

authorizationStatus的取值对应系统授权结果:

  • AuthorizationStatus.notDetermined: 用户尚未做出授权选择
  • AuthorizationStatus.authorized: 用户允许接收推送
  • AuthorizationStatus.denied: 用户拒绝接收推送
  • AuthorizationStatus.provisional: 临时授权(仅iOS平台)
  • AuthorizationStatus.ephemeral: 临时授权(仅iOS App Clip场景)

另外,你提到设置setUserNotificationsEnabled(true)后,用户点击拒绝仍能接收推送,这是因为Airship内部设置与系统授权是分离的逻辑。如果系统已拒绝授权,即使Airship内部设置为启用,实际也无法下发推送,若测试环境出现异常,建议结合系统授权状态判断实际推送能力。

若需要监听用户授权状态的实时变化,可注册状态变更监听:

Airship.push.onNotificationStatusChange.listen((status) {
  debugPrint("推送授权状态更新: ${status.authorizationStatus}");
});

内容的提问来源于stack exchange,提问作者Anna R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:24:52