Skip to content

fix(permission): 修复定位权限状态误判与前后台权限引导流程 #328

Description

@LUPENGHAN

背景

当前客户端存在以下问题:

  • 用户已经授予定位权限,但 App 仍反复弹出定位权限提示。
  • 语音握手或地理围栏注册时会触发权限申请,导致权限提示时机不一致。
  • 前台定位和后台定位使用的是不同权限要求,但当前引导流程没有区分。
  • 权限被拒绝后跳转的系统设置页面不准确。
  • 从系统设置返回后,如果权限没有变化,仍会重复弹窗。
  • Development Build 中动态加载 expo-location 可能失败,导致权限状态被误判为未授权。

目标

统一并修复定位权限流程:

  1. 静态加载 expo-location,确保真实 Development Build 可以正确读取权限状态。
  2. 在 App 启动阶段集中处理权限申请。
  3. 前台提醒只申请前台定位权限。
  4. 后台提醒和地理围栏只在需要时申请后台定位权限。
  5. 根据当前缺少的权限跳转到对应的系统设置页面。
  6. 从系统设置返回后,如果权限状态未改变,不重复提示同一权限。
  7. 定位 Provider、地理围栏 Monitor 和语音握手只读取权限状态,不主动申请权限。

验收标准

  • 已授予前台定位权限时,重新打开 App 不再弹出定位权限提示。
  • 已授予后台定位权限时,创建后台地理提醒不再重复提示。
  • 前台提醒和后台提醒分别进入正确的权限申请或系统设置流程。
  • 用户拒绝权限后,可以看到明确的设置入口,不会出现无限弹窗。
  • 从系统设置返回且权限未改变时,不会再次立即弹出相同提示。
  • 语音握手不会因为定位模块而触发权限申请。
  • 地理围栏注册失败时能够返回明确的权限状态或错误原因。
  • 现有录音、语音对话和提醒创建流程不受影响。
  • 相关单元测试、类型检查、Lint 和格式检查通过。

PR 范围

涉及:

  • 启动时权限协调逻辑
  • 原生设备权限能力读取
  • 前台/后台定位 Provider
  • 地理围栏 Monitor
  • 权限与定位相关测试

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions