我们如何在 Expo SDK 42+ 中获得后台位置权限?

Posted

技术标签:

【中文标题】我们如何在 Expo SDK 42+ 中获得后台位置权限?【英文标题】:How do we get Background Location Permissions in Expo SDK 42+? 【发布时间】:2021-12-18 20:03:37 【问题描述】:

我有一个 React-Native/Expo 托管工作流应用程序,当应用程序在后台运行时,我需要在其中跟踪用户的位置。

我已成功请求并接收到用户的前台位置,但在用户请求其后台位置权限的下一页我收到以下警告:

[Unhandled promise rejection: Error: One of the NSLocation*UsageDescription keys must be present in Info.plist to be able to use geolocation]

这是请求“背景位置”的代码的 sn-p

async function getBackgroundLocationAsync() 
          let  status  = await Location.requestBackgroundPermissionsAsync()
            if(status !=='granted')
              setErrorMsg('Permission to access background location was denied')
              return;
            
          let backgroundLocation = await Location.getBackgroundPositionAsync();
          setBackgroundLocation(backgroundLocation);
        


   getBackgroundLocationAsync()

【问题讨论】:

【参考方案1】:

该错误准确地说明了您需要做什么:在 ios.infoPlist 的 package.json 中添加 NSLocation 属性。您还需要添加 UIBackgroundMode。

您可以在此处查看完整文档:https://docs.expo.dev/versions/latest/sdk/location/#configuration

【讨论】:

所以,我之前看到了这个方法并按照说明的字符串,它声称我们需要使用“自定义构建”来获得后台权限,这似乎已经被贬值了。是这样吗?还是我误会了? 我目前在 app.json 文件中定义了NSLocationAlwaysUsageDescription,但我收到了这个错误。它指定它是NSLocations 之一,但没有指定是哪一个。是否可以确定我需要哪一个? NSLocationAlwaysUsageDescription 已弃用:developer.apple.com/documentation/bundleresources/…。你应该使用我认为“NSLocationAlwaysAndWhenInUseUsageDescription”,但我没有测试自己。 当我使用这个键时,我仍然收到警告

以上是关于我们如何在 Expo SDK 42+ 中获得后台位置权限?的主要内容,如果未能解决你的问题,请参考以下文章

找不到变量:用户。我正在使用 firebase auth 和最新的 SDK、expo SDK 42、react navigation 6.x.x

Expo React Native Simulator 错误:Facebook SDK 尚未初始化

由于我更新了 expo-sdk,我无法运行我的 expo 项目

React Native expo-location:如何让后台位置服务更新更频繁?

Expo SDK 需要 Expo 才能运行。似乎本机 Expo 模块不可用,并且此代码未在 Expo 上运行。我想生成apk

这是在 sdk 39 中使用 expo 裸工作流在 infoplist 文件中添加字符串的方法吗? #ReactNative