我有一个使用
react-native-permissions
的应用程序。基本上,我的 App.js
上有一个关于位置的模式,只要用户没有在设备设置中选择“始终允许”选项,它就会显示。它在 Android 上运行良好,但是模式始终显示在 ios 模拟器中,因为我知道我已经选择了“始终允许”。
这是我的代码:
useEffect(() => {
checkLocationPermission();
}, []);
const checkLocationPermission = async () => {
const permission =
Platform.OS === 'android'
? PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION
: PERMISSIONS.IOS.LOCATION_ALWAYS;
const permissionStatus = await check(permission);
if (
permissionStatus !== RESULTS.GRANTED &&
permissionStatus !== RESULTS.BLOCKED
) {
setCustomModal(true);
}
我尝试
console.log(permissionStatus)
,发现它返回了unavailable
请注意,我已经在我的
info.plist
中添加了以下内容
<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
在我的
podfile
permissions_path = '../node_modules/react-native-permissions/ios'
pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
所以我通过在我的
Podfile
中添加这些命令来解决这个问题
pod 'Permission-LocationWhenInUse', :path => "../node_modules/react-native-permissions/ios/LocationWhenInUse/Permission-LocationWhenInUse.podspec"
pod 'Permission-LocationAlways', :path => "../node_modules/react-native-permissions/ios/LocationAlways/Permission-LocationAlways.podspec"
注意:
.podspec
文件有时具有不同的文件名,具体取决于版本,因此请务必签入 node_modules
以避免 pod install
问题。
应用代码更改后,我运行这些命令。
rm -rf /Library/Caches/CocoaPods && rm -rf Pods && rm -rf /Library/Developer/Xcode/DerivedData/* && cd ios && pod cache clean --all && pod deintegrate && pod setup && pod install --verbose && cd ..
然后重新运行我的项目。
我在 iOS 上遇到同样的问题,在 Android 上运行完美。但在 iOS 上却不是,当我尝试记录位置时,它会在控制台中显示此信息
'当前权限状态:', '不可用' 正在请求位置许可... '权限结果:', '不可用'
在我的node_modules 的iOS 目录中,我找到Locationalways 和LocationWhenInUse 文件夹。但没有这样的文件
权限-LocationWhenInUse.podspec 权限-LocationAlways.podspec
我已经在我的 podfile 中添加了这些行
# Use the function to require react-native's and this package's scripts
node_require('react-native/scripts/react_native_pods.rb')
node_require('react-native-permissions/scripts/setup.rb')
但在 ios 上仍然无法显示位置