Flutter集成Airship时Android端setUserNotificationsEnabled异常问题
在Flutter集成Airship(版本^6.3.2,Flutter 3.10.5)时,调用Airship.setUserNotificationsEnabled(true)出现Android端返回值异常,可能由以下几个原因导致:
Android与iOS权限模型本质差异
iOS的通知授权是通过弹窗让用户直接选择,setUserNotificationsEnabled的返回值就是用户最终的选择结果;但Android的权限请求是异步流程,Airship该方法在Android端的设计并非等待用户完成授权操作后返回结果,而是仅确认"授权请求已发起"就返回true,和实际的系统权限状态无关。Airship SDK版本的行为设计差异
在Airship Flutter SDK6.3.2中,Android端的setUserNotificationsEnabled返回值定义和iOS不同:它返回的是"应用发起授权请求的操作是否成功执行",而非用户是否同意授权。这就导致即使用户拒绝了权限,该方法仍会返回true。未正确获取实际权限状态
Android的通知权限需要主动查询才能得到真实状态,你不能依赖setUserNotificationsEnabled的返回值。正确的做法是在授权请求发起后,调用Airship.getUserNotificationsEnabled()来获取当前实际的权限状态,或者注册Airship的权限变更监听器来接收状态更新。Android版本适配问题
针对Android 13及以上系统,通知权限需要单独申请POST_NOTIFICATIONS权限。如果Airship SDK在该版本下的权限处理逻辑未同步,可能会导致setUserNotificationsEnabled的返回值无法正确反映用户的授权选择。
你的代码示例:
Airship.setUserNotificationsEnabled(true).then((status) => { // Android端此处status始终为'true' // 但打开应用设置可见推送权限实际为false // 我需基于该status变量实现功能,iOS端status会随用户选择正确返回true或false });
内容的提问来源于stack exchange,提问作者Anna R.

