本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
iOS 移动设备追踪 SDK
Amazon Location 移动追踪SDK提供实用工具,可帮助轻松进行身份验证、捕获设备位置以及向亚马逊位置追踪器发送位置更新。SDK支持使用可配置的更新间隔对位置更新进行本地筛选。这可以降低数据成本,并优化 iOS 应用程序的间歇性连接。
iOS 追踪功能SDK可在以下网址获得 GitHub:iOS 版亚马逊定位移动追踪SDK
本节涵盖了 Amazon Location 移动追踪 iOS 的以下主题SDK:
安装
使用以下步骤安装 iOS 版移动SDK追踪功能:
-
在 Xcode 项目中,转到 “文件”,然后选择 “添加 Package 依赖关系”。
-
在搜索栏中键入以下内容URL:https://github.com/aws-geospatial/amazon-location-mobile-tracking-sdk-ios/
,然后按回车键。 -
选择
amazon-location-mobile-tracking-sdk-ios
包裹,然后单击 Add Packag e。 -
选择
AmazonLocationiOSTrackingSDK
套餐产品并点击 Add Packag e。
使用量
以下过程向您展示如何使用来自 Cognito 的凭据创建身份验证助手。
-
安装库后,您需要在
info.plist
文件中添加一个或两个描述:Privacy - Location When In Use Usage Description Privacy - Location Always and When In Use Usage Description
-
接下来, AuthHelper 在你的课堂中导入:
import AmazonLocationiOSAuthSDKimport AmazonLocationiOSTrackingSDK
-
然后,您将使用来自 Amazon Cognito 的 AWS SDK凭证创建身份验证助手来创建一个
AuthHelper
对象并将其与一起使用。let authHelper = AuthHelper() let locationCredentialsProvider = authHelper.authenticateWithCognitoUserPool(identityPoolId: "
My-Cognito-Identity-Pool-Id
", region: "My-region
") //example: us-east-1 let locationTracker = LocationTracker(provider: locationCredentialsProvider, trackerName: "My-tracker-name
") // Optionally you can set ClientConfig with your own values in either initialize or in a separate function // let trackerConfig = LocationTrackerConfig(locationFilters: [TimeLocationFilter(), DistanceLocationFilter()], trackingDistanceInterval: 30, trackingTimeInterval: 30, logLevel: .debug) // locationTracker = LocationTracker(provider: credentialsProvider, trackerName: "My-tracker-name",config: trackerConfig) // locationTracker.setConfig(config: trackerConfig)
筛选条件
Amazon Location 移动追踪 iOS SDK 有三个内置的位置过滤器。
-
TimeLocationFilter
:根据定义的时间间隔筛选当前要上传的位置。 -
DistanceLocationFilter
:根据指定的距离阈值过滤位置更新。 -
AccuracyLocationFilter
:通过将自上次更新以来的移动距离与当前位置的精度进行比较来筛选位置更新。
此示例在创建时LocationTracker
在中添加过滤器:
val config = LocationTrackerConfig( trackerName = "MY-TRACKER-NAME", logLevel = TrackingSdkLogLevel.DEBUG, accuracy = Priority.PRIORITY_HIGH_ACCURACY, latency = 1000, frequency = 5000, waitForAccurateLocation = false, minUpdateIntervalMillis = 5000, locationFilters = mutableListOf(TimeLocationFilter(), DistanceLocationFilter(), AccuracyLocationFilter()) ) locationTracker = LocationTracker( applicationContext, locationCredentialsProvider, config, )
此示例使用以下命令在运行时启用和禁用过滤器:LocationTracker
// To enable the filter locationTracker?.enableFilter(TimeLocationFilter()) // To disable the filter locationTracker?.disableFilter(TimeLocationFilter())
iOS 手机SDK追踪功能
iOS 版的 Amazon L SDK ocation 移动追踪包括以下功能:
-
班级:
LocationTracker
init(provider: LocationCredentialsProvider, trackerName: String, config: LocationTrackerConfig? = nil)
这是一个用于创建
LocationTracker
对象的初始化函数。它需要的实例LocationCredentialsProvider
trackerName
,也可以需要一个实例LocationTrackingConfig
。如果未提供配置,则将使用默认值对其进行初始化。 -
班级:
LocationTracker
setTrackerConfig(config: LocationTrackerConfig)
这会将 Tracker 的配置设置为在位置跟踪器初始化后的任何时候生效
-
班级:
LocationTracker
getTrackerConfig()
这将获取位置跟踪配置,以便在您的应用程序中使用或修改。
退货:
LocationTrackerConfig
-
班级:
LocationTracker
getDeviceId()
获取位置追踪器生成的设备 ID。
退货:
String?
-
班级:
LocationTracker
startTracking()
启动访问用户位置并将其发送到 AWS 跟踪器的过程。
-
班级:
LocationTracker
resumeTracking()
恢复访问用户位置并将其发送到 AWS 跟踪器的过程。
-
班级:
LocationTracker
stopTracking()
停止跟踪用户位置的过程。
-
班级:
LocationTracker
startBackgroundTracking(mode: BackgroundTrackingMode)
启动访问用户位置的过程,并在应用程序处于后台时将其发送到 AWS 跟踪器。
BackgroundTrackingMode
有以下选项:-
Active:
此选项不会自动暂停位置更新。 -
BatterySaving:
此选项会自动暂停位置更新 -
None:
此选项总体上会禁用后台位置更新
-
-
班级:
LocationTracker
resumeBackgroundTracking(mode: BackgroundTrackingMode)
当应用程序处于后台时,恢复访问用户位置并将其发送到 AWS 跟踪器的过程。
-
班级:
LocationTracker
stopBackgroundTracking()
当应用程序处于后台时,停止访问用户位置并将其发送到 AWS 跟踪器的过程。
-
班级:
LocationTracker
getTrackerDeviceLocation(nextToken: String?, startTime: Date? = nil, endTime: Date? = nil, completion: @escaping (Result<GetLocationResponse, Error>)
检索用户设备在开始和结束日期和时间之间上传的跟踪位置。
退货:
Void
-
班级:
LocationTrackerConfig
init()
这将 LocationTrackerConfig 使用默认值初始化。
-
班级:
LocationTrackerConfig
init(locationFilters: [LocationFilter]? = nil, trackingDistanceInterval: Double? = nil, trackingTimeInterval: Double? = nil, trackingAccuracyLevel: Double? = nil, uploadFrequency: Double? = nil, desiredAccuracy: CLLocationAccuracy? = nil, activityType: CLActivityType? = nil, logLevel: LogLevel? = nil)
这将
LocationTrackerConfig
使用用户定义的参数值初始化。如果未提供参数值,则会将其设置为默认值。 -
班级:
LocationFilter
shouldUpload(currentLocation: LocationEntity, previousLocation: LocationEntity?, trackerConfig: LocationTrackerConfig)
LocationFilter
是用户可以为其自定义过滤器实现实现的协议。用户需要实现shouldUpload
函数来比较以前和当前的位置,并返回是否应上传当前位置。
示例
本节详细介绍了使用适用SDK于 iOS 的 Amazon 定位移动追踪的示例。
注意
确保在info.plist
文件中设置了必要的权限。这些权限与本使用量节中列出的权限相同。
以下示例演示了跟踪设备位置和检索追踪位置的功能:
Privacy - Location When In Use Usage Description Privacy - Location Always and When In Use Usage Description
开始追踪地点:
do { try locationTracker.startTracking() } catch TrackingLocationError.permissionDenied { // Handle permissionDenied by showing the alert message or opening the app settings }
继续追踪地点:
do { try locationTracker.resumeTracking() } catch TrackingLocationError.permissionDenied { // Handle permissionDenied by showing the alert message or opening the app settings }
停止追踪地点:
locationTracker.stopTracking()
开始后台跟踪:
do { locationTracker.startBackgroundTracking(mode: .Active) // .Active, .BatterySaving, .None } catch TrackingLocationError.permissionDenied { // Handle permissionDenied by showing the alert message or opening the app settings }
恢复背景跟踪:
do { locationTracker.resumeBackgroundTracking(mode: .Active) } catch TrackingLocationError.permissionDenied { // Handle permissionDenied by showing the alert message or opening the app settings }
要停止背景跟踪,请执行以下操作:
locationTracker.stopBackgroundTracking()
从追踪器中检索设备的追踪位置:
func getTrackingPoints(nextToken: String? = nil) { let startTime: Date = Date().addingTimeInterval(-86400) // Yesterday's day date and time let endTime: Date = Date() locationTracker.getTrackerDeviceLocation(nextToken: nextToken, startTime: startTime, endTime: endTime, completion: { [weak self] result in switch result { case .success(let response): let positions = response.devicePositions // You can draw positions on map or use it further as per your requirement // If nextToken is available, recursively call to get more data if let nextToken = response.nextToken { self?.getTrackingPoints(nextToken: nextToken) } case .failure(let error): print(error) } }) }