在 iOS 中获取用户位置

17 Mar 2025 | 5 分钟阅读

人们经常使用基于位置的应用程序,这些应用程序使用用户的位置来为他们提供更好的服务。 例如,Uber、Ola、Flipkart、Amazon 等都在使用用户的位置来获得最好的交易和服务。 但是,在 iOS 中,我们可以使用 CoreLocation 来获取用户的位置。 我们还可以在应用程序在后台运行时更新用户的位置。

本教程将讨论如何在实时获取用户的位置。 我们还将创建一个演示 iOS 应用程序,该应用程序显示获取的用户经度和纬度,并在应用程序中显示结果。

请考虑以下步骤来创建一个基于位置的 iOS 应用程序。

1. 创建一个新的 XCode 项目,命名为 LocationDemo。

Getting user location in iOS

2. 创建一个 UILabel 实例来表示 ViewController 中的位置。

正如我们使用 backgroundColor、numberOfLines、textAlignment 和 font 等属性初始化了 locationLbl。 我们已经在 viewDidLoad() 中更新了 locationLbl 的 frame,并将其添加到视图中。 这将在 ViewController 的中心显示一个带有黑色背景颜色的空标签,如下图所示。

Getting user location in iOS

3. 配置 info.plist 以从用户那里获取权限

我们需要为我们在应用程序中使用的任何第三方设备资源(例如相机、图库等)在 info.plist 文件中创建一个条目。 在这种情况下,我们需要在 info.plist 中添加隐私属性才能访问用户的位置。 为此,请在 XCode 中导航到 info.plist,单击 + 图标并选择以下两个隐私权限。

  1. Privacy - Location Always and When In Use Usage Description,和
  2. Privacy - Location When In Use Usage Description
Getting user location in iOS

但是,如果 info.plist 作为源代码访问,我们也可以将以下代码添加到 info.plist 文件中。

描述文本将显示给用户以获取权限。

4. 使用 CoreLocation 获取位置。

我们需要实例化 CLLocationManager 类来配置、启动和停止 CoreLocation 服务。 CoreLocation 是一个用于获取设备的地理位置和方向的框架。 该框架使用设备上的所有可用组件收集数据,包括 Wi-Fi、GPS、蓝牙、磁力计、气压计和蜂窝硬件。

要使用 CLLocationManager,请在 ViewController 中导入 CoreLocation 框架。 在这个演示项目中,我们实例化了 CLLocationManager,如下所示。

requestAlwaysAuthorization() 方法正在向用户显示权限警报视图。

Getting user location in iOS

一旦用户点击“允许一次”,startUpdatingLocation() 方法就会从设备的 GPS 获取用户的位置。

5. 实现 CLLocationManagerDelegate 协议

为了访问用户在经度和纬度上的实际位置数据,我们需要实现 CLLocationManagerDelegate 协议并使用其 didUpdateLocations() 方法。 为此,我们需要使我们的 ViewController 符合 CLLocationManagerDelegate 并将位置对象的委托属性设置为 self。 最后,定义 didUpdateLocations() 方法,该方法将在每次位置更新时被调用。

将 location 的委托属性设置为 self,并将以下代码添加到 ViewController。

为了在模拟器中显示位置,我们需要导航到模拟器 -> Debug -> Location -> Freeway Drive。

但是,这会将 locationLbl 的文本设置为设备位置的纬度和经度,如下所示。

Getting user location in iOS

6. 在后台模式下更新位置

我们的代码在应用程序保持在前台状态之前都可以完美运行。 每当我们的应用程序进入后台时,位置更新将停止工作。

但是,我们可以通过在 XCode 中添加后台模式功能来启用后台模式功能。 为此,请导航到 Application Target -> Signing and Capabilities,然后在右上角点击 + 图标后选择 Background Modes。

Getting user location in iOS

现在,将 CLLocationManager 对象(location)的 allowsBackgroundLocationUpdates 属性设置为 true。

这也会在后台模式下启用位置更新。 现在,即使应用程序保持在后台模式,我们也会收到位置更新。 为了测试这一点,我们现在可以在模拟器屏幕的左上角看到位置图标闪烁,这表明位置更新处于活动状态。

View Controller 的完整源代码如下。


下一个主题iOS 中的推送通知