我在 React Native iOS 应用程序中遇到位置权限问题。当出现权限提示时,我选择“使用时”进行位置访问,但当我稍后检查“始终”权限时,它也被授予,即使我从未选择它。
这是我的代码:
if (Platform.OS === 'ios') {
console.log('Requesting "When In Use" location permission for iOS...');
const whenInUseStatus = await request(PERMISSIONS.IOS.LOCATION_WHEN_IN_USE);
console.log('whenInUseStatus:', whenInUseStatus);
if (whenInUseStatus === RESULTS.GRANTED) {
// Checking for "Always" permission
const alwaysStatus = await check(PERMISSIONS.IOS.LOCATION_ALWAYS);
console.log('alwaysStatus:', alwaysStatus);
if (alwaysStatus !== RESULTS.GRANTED) {
Alert.alert(
'Enable "Always" Location Access',
'To provide a better experience, please enable "Always" location access in the app settings.',
[
{
text: 'Go to Settings',
onPress: () => {
Linking.openURL('app-settings:');
},
},
{ text: 'Cancel', style: 'cancel' },
]
);
}
}
}
在 Info.plist 中,我添加了这些:
NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription
NSLocationAlwaysAndWhenInUseUsageDescription
弹出窗口显示“使用时”、“仅一次”和“从不”的正确选项。但是,当我选择 “使用时” 时,我发现该应用程序还获得了 “始终” 授予的权限,这不是我所期望的。
是否有人遇到过类似的问题,选择 “使用时” 也授予 “始终” 权限?为什么会发生这种情况,如何确保仅在明确选择时才授予“始终”?
如有任何指导,我们将不胜感激!
我预计当我在弹出窗口中选择“使用时”位置权限时,只会授予该权限。然而,选择“使用时”后,我检查了“始终”权限,也被授予了,这不是我所期望的。我尝试使用 request 和 check 检查两个权限的状态,但我仍然看到这种行为。
更新:我发现选择“使用时”可以在iOS上临时授予“始终”权限。库文档表明,如果选择“使用应用程序时”,请求“始终”也会授予临时后台访问权限。我想要的:我需要在应用程序启动时明确提示“始终”位置访问,而不仅仅是在后台。我怎样才能实现这个目标?