Flutter外卖APP因后台定位权限未声明遭Google Play拒审,求解决方案
我用Flutter开发了一款包含商家端、用户端、骑手端的外卖应用,核心功能之一是骑手位置实时追踪。该功能需要在应用后台且Google Maps打开时持续更新骑手位置,但因使用后台定位权限,导致应用更新被Google Play拒审。Android 14系统下,后台定位需依赖前台服务定位权限,目前不清楚如何合规实现该功能。
Google Play拒审邮件内容
发现问题:未声明后台定位访问权限
我们检测到您的应用包含至少一项请求后台定位访问的功能,但您的权限声明表单未体现这一点。请登录Play Console重新提交定位权限声明表单。您可以移除应用中的后台定位功能,或者在表单中声明该后台使用场景。问题详情
我们在以下区域发现问题:
版本号26
关于访问敏感信息的权限与API政策
请求访问敏感信息的权限与API需让用户清晰理解用途。您只能请求对实现应用当前核心功能或服务必要的敏感信息权限与API,且这些功能需在Google Play列表中有所展示。不得将此类权限与API用于未披露、未实现或被禁止的功能或用途。通过此类权限与API获取的个人或敏感数据不得出售,也不得为促成销售而共享。
应在合适场景下逐步请求访问敏感信息的权限与API,让用户理解请求权限的原因。仅可将数据用于用户已同意的用途。若后续需将数据用于其他用途,必须征得用户明确同意。*
当前AndroidManifest.xml中的定位权限声明
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
定位功能实现代码(使用Location包)
Future<void> _listenLocation() async { model.location.enableBackgroundMode(enable: true); locationStream = model.location.onLocationChanged.listen((event) async { logger.w("Is it Working....."); await FirebaseFirestore.instance .collection('location') .doc(widget.orderId.toString()) .set({ 'latitude': event.latitude, 'longitude': event.longitude, 'dishOrderId': widget.orderId.toString() }, SetOptions(merge: true)); }); }
后台定位权限申请提示语
我们需要获取您的设备定位权限以确保订单精准配送。您可随时在设备设置中管理该权限。
已完成操作
- 已在Play Console上传骑手实时追踪功能的演示视频
求助需求
目前该功能依赖ACCESS_BACKGROUND_LOCATION权限(始终允许),但不符合Google Play政策要求。我尝试过参考资料,但未找到在Flutter中仅使用前台定位权限,实现骑手在应用后台(打开Google Maps时)持续更新位置的方案,恳请提供合规的实现方法。
内容的提问来源于stack exchange,提问作者Arnab Ghosh

