Expo React Native iOS已授权仍提示相机权限缺失问题求助
问题背景
我正在开发一个已完成预构建的Expo React Native应用(拥有独立的iOS和Android文件夹),按照expo-image-picker SDK 50的要求配置了Info.plist权限,但在iOS设备上即使手动允许权限,仍收到错误[Error: Missing camera or camera roll permission]。调用getCameraPermissionsAsync()查询权限状态,返回结果始终为{"canAskAgain": false, "expires": "never", "granted": false, "status": "denied"}。
依赖版本:
"expo": "50.0.6", "react-native": "0.73.2", "expo-image-picker": "14.7.1",
相机调用代码:
async captureImageFromCamera(): Promise<ImagePicker.ImagePickerAsset[] | null> { const permissionStatus = await ImagePicker.requestCameraPermissionsAsync(); console.log(permissionStatus) if (permissionStatus.granted) { const response = await ImagePicker.launchCameraAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images }); if (response.canceled) { throw new OperationCancelledError('Operation was cancelled by the user'); } return response?.assets; } console.log(permissionStatus) throw new PermissionDeniedError('Camera Permissions are denied'); }
解决建议
检查Info.plist权限配置完整性
确保iOS项目的Info.plist中同时添加相机和相册的权限描述,SDK 50版本的expo-image-picker调用相机时可能依赖相册权限:<key>NSCameraUsageDescription</key> <string>需要访问相机拍摄照片</string> <key>NSPhotoLibraryUsageDescription</key> <string>需要访问相册保存或选择照片</string>注意:必须直接检查
ios/[你的项目名称]/Info.plist文件,而非仅依赖expo的配置同步。重置应用权限缓存
前往iOS系统设置→你的应用→权限,手动关闭并重新开启相机/相册权限;或直接卸载应用后重新安装,清除旧的权限状态缓存。优化权限请求逻辑
在发起权限请求前,先判断当前权限状态,如果canAskAgain为false,直接引导用户前往系统设置开启权限:const currentStatus = await ImagePicker.getCameraPermissionsAsync(); if (!currentStatus.granted && !currentStatus.canAskAgain) { Alert.alert('权限提示', '请前往系统设置开启相机权限', [ { text: '取消' }, { text: '去设置', onPress: () => Linking.openSettings() } ]); return null; } // 再执行权限请求逻辑更新依赖版本
尝试将expo-image-picker升级到SDK 50兼容的最新版本,或同步更新expo到最新补丁版本,修复已知的权限判定类bug。
内容的提问来源于stack exchange,提问作者SVG

