Flutter应用因使用geolocator遭双平台拒审,求解决方案
Flutter应用App Store/Google Play拒审整改方案
Android端整改方案
针对Google Play的后台定位权限审核要求,分两种场景处理:
场景1:应用确实需要后台定位功能
- 完善Play Console权限声明
- 登录Play Console,进入目标应用的「政策合规」>「权限声明」页面
- 选择「位置权限」,明确填写后台定位的具体业务场景(例如:"用于实时追踪外卖配送进度,用户在后台也能收到配送位置更新提醒"),禁止模糊描述
- 提交声明后,重新打包应用,确保代码中后台定位的调用逻辑完全匹配声明的场景
- 权限配置优化
- 若尚未添加,在
AndroidManifest.xml中补充后台定位权限:<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> - 确保代码中仅在必要时机请求后台定位,避免无意义的权限调用
- 若尚未添加,在
场景2:应用不需要后台定位功能
- 移除所有与后台定位相关的权限配置(若未添加
ACCESS_BACKGROUND_LOCATION则跳过) - 检查geolocator的调用逻辑:仅使用前台定位模式,例如调用
requestWhenInUsePermission()而非requestAlwaysPermission() - 删除代码中所有后台定位相关的逻辑(如后台位置更新监听)
- 重新打包提交
iOS端整改方案
针对App Store的权限描述模糊问题,核心是把权限说明写具体:
- 修改
Info.plist的定位权限描述- 替换
NSLocationWhenInUseUsageDescription为带具体场景和用户收益的描述,例如:<key>NSLocationWhenInUseUsageDescription</key> <string>为您推荐周边的优质商家,快速获取附近的专属优惠活动</string> - 若确实需要后台定位,将
NSLocationAlwaysUsageDescription(建议替换为iOS 11+兼容的NSLocationAlwaysAndWhenInUseUsageDescription)修改为:<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>后台实时更新您的运动轨迹,生成完整的跑步路线报表</string> - 注意:描述必须明确说明「为什么需要权限」和「用户能获得什么价值」,禁止使用空泛表述
- 替换
- 权限逻辑精简
- 若不需要后台定位,直接删除
NSLocationAlwaysUsageDescription相关配置 - 代码中仅请求必要的权限:使用
Geolocator.requestWhenInUsePermission()替代全时段权限请求
- 若不需要后台定位,直接删除
通用验证步骤
- 测试权限触发时机:确保应用仅在用户触发相关功能时(如点击「附近商家」按钮)才弹出权限请求,而非启动即弹
- 检查geolocator版本:升级到最新稳定版,避免插件自带的权限配置漏洞
- 同步隐私政策:若应用收集位置数据,需在隐私政策中明确说明数据用途、存储周期、共享范围,两个应用商店都会核查隐私政策的一致性
内容的提问来源于stack exchange,提问作者sermed
相关产品推荐
相关产品推荐

