Expo/EAS开发React Native应用App Store审核遭拒及位置权限描述不生效问题
Expo/EAS开发RN应用App Store审核被拒及位置权限弹窗异常解决方法
问题背景
App Store审核拒绝原因:
我们发现您的应用请求获取用户位置权限,但未在用途字符串中充分说明位置信息的使用场景。为帮助用户充分了解数据使用方式,权限请求弹窗需解释并举例说明应用将如何使用所请求的信息。
我用Expo/EAS开发了一款小型React Native应用,提交App Store时被拒,同时还遇到一个问题:明明在app.json里配置了位置权限的用途字符串,但弹窗显示的根本不是我设置的内容。以下是app.json中的iOS属性配置:
"ios": { "config":{ "googleMapsApiKey":"MyGoogleMapsApiKey" }, "supportsTablet": false, "icon": "./assets/icon.png", "bundleIdentifier": "com.goethedeveloper.apprecuerdos", "infoPlist": { "NSLocationAlwaysAndWhenInUseUsageDescription": "AppRecuerdos uses your real-time location only to detect the checkpoint you are in.", "NSLocationUsageDescription": "AppRecuerdos uses your real-time location only to detect the checkpoint you are in." }, "buildNumber": "12" },
权限授权弹窗截图:
解决方案
一、解决弹窗内容不匹配的问题
核对权限字段与请求类型是否对应
iOS不同位置权限请求对应不同的Info.plist字段:- 若应用仅在前台使用时请求位置,必须配置
NSLocationWhenInUseUsageDescription - 若需要后台也能获取位置,才需要
NSLocationAlwaysAndWhenInUseUsageDescription NSLocationUsageDescription是iOS 11之前的旧字段,当前版本基本不再生效
你当前的配置可能和实际请求的权限类型不匹配,导致系统显示默认提示,补全对应字段即可。
- 若应用仅在前台使用时请求位置,必须配置
清理EAS缓存后重新构建
Expo/EAS有时会缓存旧配置,执行以下命令彻底清理后重新打包:eas build --clean --platform ios检查第三方库的权限覆盖
若使用了react-native-maps这类位置相关库,部分库会自动添加权限配置,可能覆盖app.json中的设置。可以执行expo prebuild生成原生项目,直接打开ios/[你的项目名]/Info.plist文件,确认权限字段是否为你设置的内容。
二、解决审核拒绝的权限说明问题
苹果要求权限说明必须具体直白,不能笼统。你当前的描述可以优化得更清晰,比如:
"NSLocationWhenInUseUsageDescription": "AppRecuerdos仅在您使用应用时获取实时位置,用来检测您当前所在的打卡点,帮您记录行程回忆,不会在后台收集位置信息。", "NSLocationAlwaysAndWhenInUseUsageDescription": "AppRecuerdos需要获取实时位置(包括后台运行时),用来检测您当前所在的打卡点,帮您自动完成行程回忆的记录。"
重点要说明权限用途(检测打卡点)、使用时机(仅前台/后台也可用),让用户一眼明白位置数据的使用方式。
内容的提问来源于stack exchange,提问作者udiskie
相关产品推荐
相关产品推荐

