本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
iOS Mobile Tracking SDK
Amazon Location 行動追蹤SDK提供公用程式,可協助輕鬆驗證、擷取裝置位置,以及傳送位置更新至 Amazon Location Trackers。SDK 支援以可設定的更新間隔對位置更新進行本機篩選。這可降低資料成本,並最佳化 iOS 應用程式的間歇性連線。
iOS 追蹤SDK可在 上取得 GitHub:適用於 iOS SDK的 Amazon Location Mobile Tracking
本節涵蓋 Amazon Location 行動追蹤 iOS 的下列主題SDK:
安裝
使用下列程序安裝 iOS SDK 的行動追蹤:
-
在您的 Xcode 專案中,前往 檔案,然後選取新增套件相依性 。
-
在搜尋列中輸入下列 URL:https://github.com/aws-geospatial/amazon-location-mobile-tracking-sdk-ios/
,然後按 Enter 鍵。 -
選取
amazon-location-mobile-tracking-sdk-ios
套件,然後按一下新增套件 。 -
選取
AmazonLocationiOSTrackingSDK
套件產品,然後按一下新增套件 。
用量
下列程序說明如何使用 Cognito 的憑證建立身分驗證協助程式。
-
安裝程式庫後,您需要將一個或兩個描述新增至您的
info.plist
檔案:Privacy - Location When In Use Usage Description Privacy - Location Always and When In Use Usage Description
-
接下來,在您的 類別 AuthHelper 中匯入 :
import AmazonLocationiOSAuthSDKimport AmazonLocationiOSTrackingSDK
-
然後,您將建立
AuthHelper
物件,並透過使用來自 Amazon Cognito 的憑證建立身分驗證協助程式 AWS SDK,將其與 搭配使用。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 Mobile SDK追蹤函數
適用於 iOS SDK的 Amazon Location 行動追蹤包含下列功能:
-
類別:
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
函數來比較先前和目前的位置,如果應該上傳目前的位置,則需要傳回 。
範例
本節詳細說明使用 iOS SDK版 Amazon Location Mobile Tracking 的範例。
注意
確保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) } }) }