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.
相关产品推荐
相关产品推荐

