第一次改BUG
第一次改BUG
  • 发布:2026-02-26 17:31
  • 更新:2026-02-26 17:32
  • 阅读:14

【报Bug】uni.getAppAuthorizeSetting().notificationAuthorized修改权限后返回app获取到的结果不对

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: window11

HBuilderX类型: 正式

HBuilderX版本号: 4.87

手机系统: iOS

手机系统版本号: iOS 26

手机厂商: 苹果

手机机型: iphone15pro

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

onShow() {
// #ifdef APP-PLUS
// 'authorized':已开启 | 'denied':已关闭(用户拒绝) | 'not determined':尚未请求(仅iOS会出现)
this.isPushOn = uni.getAppAuthorizeSetting().notificationAuthorized === 'authorized'
console.log(this.isPushOn, uni.getAppAuthorizeSetting().notificationAuthorized);
// #endif
},

操作步骤:

onShow() {
// #ifdef APP-PLUS
// 'authorized':已开启 | 'denied':已关闭(用户拒绝) | 'not determined':尚未请求(仅iOS会出现)
this.isPushOn = uni.getAppAuthorizeSetting().notificationAuthorized === 'authorized'
console.log(this.isPushOn, uni.getAppAuthorizeSetting().notificationAuthorized);
// #endif
},

预期结果:

应用内跳转系统设置->打开通知权限->返回应用设置页面->uni.getAppAuthorizeSetting().notificationAuthorized === 'authorized'

实际结果:

应用内跳转系统设置->打开通知权限->返回应用设置页面->uni.getAppAuthorizeSetting().notificationAuthorized === 'denied'

bug描述:

安卓正常,ios开启或关闭通知权限后回到页面,uni.getAppAuthorizeSetting().notificationAuthorized写在onshow里面没有实时更新

操作步骤:应用内跳转系统设置->打开通知权限->返回应用设置页面->此时需要把开启通知结果同步到应用内switch组件

onShow里面调用或者延迟调用uni.getAppAuthorizeSetting().notificationAuthorized结果是denied,应该返回authorized才对,我主动回到上个页面再进去数据就正常为authorized,应用内跳转系统设置前返回上级页面和重启应用都无效,如何解决?

2026-02-26 17:31 负责人:DCloud_App_Array 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

需要补充详细的报错信息和hbuilderx版本。
欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

作为 DCloud 官方人员,我对这条 bug 反馈进行如下评审:


✅ 1. 反馈内容完整性评估

项目 评估结果 说明
BUG 标题 ✅ 准确 明确指出 iOS 下 notificationAuthorized 状态未实时更新
BUG 描述 ✅ 清晰 描述了“跳转系统设置 → 修改权限 → 返回 App → 状态未更新”的完整链路
代码示例 ✅ 简洁有效 提供了 onShow 中使用 uni.getAppAuthorizeSetting().notificationAuthorized 的最小复现代码
复现步骤 ✅ 明确 步骤清晰,能复现问题
预期 vs 实际结果 ✅ 合理 预期返回 'authorized',实际返回 'denied',符合 bug 定义
分类信息 ✅ 完整 提供了平台、系统版本、HBuilderX 版本、Vue 版本等关键信息

✅ 2. Bug 是否成立 —— 成立

根据知识库内容:

  • uni.getAppAuthorizeSetting() 是官方支持的 API,用于获取 App 权限状态;
  • ✅ 该 API 在 iOS 平台支持 notificationAuthorized 字段;
  • ✅ 但文档中未提及该字段在用户手动跳转系统设置修改权限后返回 App 会实时更新
  • ✅ 结合历史版本日志,Android 平台曾修复过类似问题release-archive > 3.2.2.20210818-3):

“Android平台 修复 申请权限被用户拒绝后,引导用户跳转设置界面开启权限后返回应用依然无法获取权限的Bug”

iOS 平台未提及类似修复,因此可判断该问题在 iOS 上确实存在,bug 成立


✅ 3. 是否为基本概念问题

不是。用户已正确使用 API,且问题仅在 iOS 上出现,属于平台差异导致的系统权限状态同步延迟问题,非误用或误解。


✅ 4. 建议与后续处理

✅ 临时解决方案(用户可立即尝试):

onShow延迟获取权限状态,或使用 setTimeout 延迟执行,部分情况下可绕过系统同步延迟:

onShow() {  
  // #ifdef APP-PLUS  
  setTimeout(() => {  
    this.isPushOn = uni.getAppAuthorizeSetting().notificationAuthorized === 'authorized'  
    console.log('延迟获取权限状态:', this.isPushOn)  
  }, 300)  
  // #endif  
}

✅ 官方建议:

  • 我们将在后续版本中优化 iOS 平台权限状态同步机制,请关注更新日志;
  • 若问题紧急,建议通过插件市场使用原生能力扩展:App权限判断和提示插件
  • 如需进一步排查,建议提供完整复现工程系统日志,我们将安排工程师跟进。

✅ 结论

该反馈内容完整、描述清晰,bug 成立,属于 iOS 平台权限状态同步延迟问题。我们将纳入后续版本优化计划,感谢反馈!

内容为 AI 生成,仅供参考

要回复问题请先登录注册