建立 iOS 應用程式 - Amazon Location Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立 iOS 應用程式

請依照這些程序,使用 Amazon Location Service 建置 iOS 應用程式。

GitHub 複製專案檔案。

您可以在 AWS 帳戶準備就緒後產生 Amazon Location Service 資源。這些資源對於執行提供的程式碼片段至關重要。

注意

如果您尚未建立 AWS 帳戶,請建立 AWS 帳戶

若要開始,您需要建立 Amazon Cognito 身分集區 ID,請使用下列程序:

  1. 在 AWS 主控台中,導覽至 Amazon Cognito 服務,然後從左側選單中選取身分集區,然後選取建立身分集區

  2. 確定已核取訪客存取,然後按下一步繼續。

  3. 接著建立新的 IAM 角色或使用現有的 IAM 角色。

  4. 輸入身分集區名稱,並確保身分集區可以存取您將在下一個程序中建立的映射和追蹤器的 Amazon Location (geo) 資源。

現在您需要在 Amazon Location AWS 主控台中建立地圖並建立樣式,請使用下列程序:

  1. 導覽至 Amazon Location 主控台中的映射區段,然後選取建立映射以預覽可用的映射樣式。

  2. 為新的映射資源命名描述。記錄您指派給映射資源的名稱,因為它稍後會在教學課程中使用。

  3. 選擇映射樣式時,請考慮映射資料提供者。如需詳細資訊,請參閱 AWS 服務條款的第 82 節。

  4. 接受 Amazon Location 條款與條件,然後選取建立映射。建立地圖之後,您可以透過放大、縮小或平移任何方向來與地圖互動。

使用 Amazon Location 主控台建立追蹤器

  1. 開啟 Amazon Location Service 主控台

  2. 在左側導覽窗格中,選擇追蹤器

  3. 選擇建立追蹤器

  4. 填寫所有必要欄位。

  5. 位置篩選下,選擇最符合您打算如何使用追蹤器資源的選項。如果您未設定位置篩選,則預設設定為 TimeBased。如需詳細資訊,請參閱本指南中的追蹤器,以及 Amazon Location Service Trackers API 參考中的 PositionFiltering。

  6. 選擇建立追蹤器以完成。

建立地理圍欄集合時,您可以使用 主控台、 API 或 CLI。下列程序會逐步引導您完成每個選項。

使用 Amazon Location 主控台建立地理圍欄集合:

  1. 開啟位於 https://https://console.aws.amazon.com/location/ 的 Amazon Location Service 主控台。

  2. 在左側導覽窗格中,選擇 Geofence 集合。

  3. 選擇建立地理圍欄集合。

  4. 提供集合的名稱和描述。

  5. 在以 CloudWatch 做為目標的 EventBridge 規則下,您可以建立選用的 EventBridge 規則,以開始對地理圍欄事件做出反應。這讓 Amazon Location 能夠將事件發佈到 Amazon CloudWatch Logs 中。

  6. 選擇建立地理圍欄集合。

使用 Amazon Location APIs 建立地理圍欄集合:

從 Amazon Location Geofences APIs 使用 CreateGeofenceCollection 操作。下列範例使用 API 請求來建立名為 的地理圍欄集合GOECOLLECTION_NAME

POST /geofencing/v0/collections Content-type: application/json { "CollectionName": "GOECOLLECTION_NAME", "Description": "Geofence collection 1 for shopping center", "Tags": { "Tag1" : "Value1" } }

使用 AWS CLI 命令建立地理圍欄集合:

使用 create-geofence-collection 命令。下列範例使用 AWS CLI 來建立名為 的地理圍欄集合GOECOLLECTION_NAME

aws location \ create-geofence-collection \ --collection-name "GOECOLLECTION_NAME" \ --description "Shopping center geofence collection" \ --tags Tag1=Value1  

若要將追蹤器連結至地理圍欄集合,您可以使用主控台、API 或 CLI。下列程序會逐步引導您完成每個選項。

使用 Amazon Location Service 主控台將追蹤器資源連結至地理圍欄集合:

  1. 開啟 Amazon Location 主控台。

  2. 在左側導覽窗格中,選擇追蹤器

  3. 裝置追蹤器下,選取目標追蹤器的名稱連結。

  4. 連結的地理圍欄集合下,選擇連結地理圍欄集合

  5. 連結的地理圍欄集合視窗中,從下拉式功能表中選取地理圍欄集合。

  6. 選擇 Link (連結)

  7. 連結追蹤器資源後,會為其指派作用中狀態。

使用 Amazon Location APIs 將追蹤器資源連結至地理圍欄集合:

從 Amazon Location Trackers APIs 使用 AsssociateTrackerConsumer 操作。下列範例使用 API 請求,該請求使用其 Amazon Resource Name (ARN) 將 ExampleTracker 與地理圍欄集合建立關聯。

POST /tracking/v0/trackers/ExampleTracker/consumers Content-type: application/json {    "ConsumerArn": "arn:aws:geo:us-west-2:123456789012:geofence-collection/GOECOLLECTION_NAME" }

使用 AWS CLI 命令將追蹤器資源連結至地理圍欄集合:

使用 associate-tracker-consumer 命令。下列範例使用 AWS CLI 來建立名為 的地理圍欄集合GOECOLLECTION_NAME

aws location \ associate-tracker-consumer \ --consumer-arn "arn:aws:geo:us-west-2:123456789012:geofence-collection/GOECOLLECTION_NAME" \ --tracker-name "ExampleTracker"

建立 Lambda 函數。

若要在 AWS IoT Core 和 Amazon Location Service 之間建立連線,您需要 AWS Lambda 函數來處理由 EventBridge CloudWatch 事件轉送的訊息。此函數會擷取任何位置資料、為 Amazon Location Service 格式化資料,並透過 Amazon Location Tracker API 提交資料。您可以透過 AWS Lambda 主控台建立此函數,也可以使用 AWS Command Line Interface (AWS CLI) 或 AWS Lambda APIs。若要建立使用主控台將位置更新發佈至 Amazon Location 的 Lambda 函數:

  1. 在 https://https://console.aws.amazon.com/lambda/ 開啟 AWS Lambda 主控台。

  2. 從左側導覽中,選擇函數。

  3. 選擇建立函數,並確定已選取從頭開始撰寫。

  4. 填寫下列方塊:

    • 函數名稱

    • 針對執行期選項,選擇 Node.js 16.x。

  5. 選擇 Create function (建立函數)。

  6. 選擇程式碼索引標籤以開啟編輯器。

  7. 使用下列項目覆寫 index.js 中的預留位置程式碼:

    const AWS = require('aws-sdk') const iot = new AWS.Iot(); exports.handler =  function(event) {   console.log("event===>>>", JSON.stringify(event));   var param = {     endpointType: "iot:Data-ATS"   };   iot.describeEndpoint(param, function(err, data) {     if (err) {       console.log("error===>>>", err, err.stack); // an error occurred     } else {       var endp = data['endpointAddress'];       const iotdata = new AWS.IotData({endpoint: endp});           const trackerEvent = event["detail"]["EventType"];       const src = event["source"];       const time = event["time"];       const gfId = event["detail"]["GeofenceId"];       const resources = event["resources"][0];         const splitResources = resources.split(".");         const geofenceCollection = splitResources[splitResources.length - 1];       const coordinates = event["detail"]["Position"];                                     const deviceId = event["detail"]["DeviceId"];       console.log("deviceId===>>>", deviceId);       const msg =  {           "trackerEventType" : trackerEvent,           "source" : src,           "eventTime" : time,           "geofenceId" : gfId,           "coordinates": coordinates,           "geofenceCollection": geofenceCollection         };       const params = {         topic: `${deviceId}/tracker`,         payload: JSON.stringify(msg),         qos: 0       };       iotdata.publish(params, function(err, data) {           if (err) {             console.log("error===>>>", err, err.stack); // an error occurred           } else {             console.log("Ladmbda triggered===>>>", trackerEvent);  // successful response           }       });     }   }); }
  8. 選擇部署以儲存更新的函數。

  9. 選擇 Configuration (組態) 索引標籤。

  10. 在觸發條件區段中,按一下新增觸發條件。

  11. 在來源欄位中選取 EventBridge (CloudWatch Events)。

  12. 選取 `現有規則` 選項選項。

  13. 輸入類似此 `AmazonLocationMonitor-GEOFENCECOLLECTION_NAME` 的規則名稱。

  14. 按一下新增按鈕。

  15. 這也會在許可索引標籤中連接以資源為基礎的政策陳述式

MQTT 測試用戶端

  1. 開啟 https://https://console.aws.amazon.com/iot/

  2. 在左側導覽窗格中,選擇 MQTT 測試用戶端。

  3. 您將看到標題為 MQTT 測試用戶端的區段,您可以在其中設定 MQTT 連線。

  4. 設定必要的設定後,按一下連線按鈕,使用提供的參數建立與 MQTT 代理程式的連線。

  5. 請記下端點值。

連線後,您可以使用 MQTT 測試用戶端界面中提供的個別輸入欄位,訂閱 MQTT 主題或將訊息發佈至主題。接下來,您將連接 MQTT 政策:

  1. 在左側選單的管理展開安全性選項下,按一下政策

  2. 按一下建立政策按鈕。

  3. 輸入政策名稱。

  4. 政策文件上,選取 JSON 索引標籤。

  5. 複製貼上以下顯示的政策,但請務必使用 REGION和 更新所有元素ACCOUNT_ID

    { "Version": "2012-10-17", "Statement": [     {       "Action": [         "iot:Connect",         "iot:Publish",         "iot:Subscribe",         "iot:Receive"       ],       "Resource": [         "arn:aws:iot:REGION:ACCOUNT_ID:client/${cognito-identity.amazonaws.com:sub}",     "arn:aws:iot:REGION:ACCOUNT_ID:topic/${cognito-identity.amazonaws.com:sub}", "arn:aws:iot:REGION:ACCOUNT_ID:topicfilter/${cognito-identity.amazonaws.com:sub}/", "arn:aws:iot:REGION:ACCOUNT_ID:topic/${cognito-identity.amazonaws.com:sub}/tracker" ], "Effect": "Allow" } ] }
  6. 選取要完成的建立按鈕。

若要設定範例程式碼,您必須安裝下列工具:

  • Git

  • XCode 15.3 或更新版本

  • iOS 模擬器 16 或更新版本

使用此程序來設定範例應用程式程式碼:

  1. 從此 URL 複製 git 儲存庫:https://https://github.com/aws-geospatial/amazon-location-samples-ios/tree/main/tracking-with-geofence-notifications

  2. 開啟 AWSLocationSampleApp.xcodeproj 專案檔案。

  3. 等待套件解析程序。

  4. 選用:在專案導覽功能表上,將 重新命名ConfigTemplate.xcconfigConfig.xcconfig並填入下列值:

    IDENTITY_POOL_ID = `YOUR_IDENTITY_POOL_ID` MAP_NAME = `YOUR_MAP_NAME` TRACKER_NAME = `YOUR_TRACKER_NAME` WEBSOCKET_URL = `YOUR_MQTT_TEST_CLIENT_ENDPOINT` GEOFENCE_ARN = `YOUR_GEOFENCE_COLLECTION_NAME`

設定範例程式碼之後,您現在可以在 iOS 模擬器或實體裝置上執行應用程式。

  1. 建置並執行應用程式。

  2. 應用程式會要求您提供位置和通知許可。您需要允許它們。

  3. 輕觸 `Cognito Configuration` 按鈕。

  4. 如果您尚未在 `Config.xcconfig` 檔案中填入值,則需要將先前在組態畫面中建立的資源值填入 欄位。

    IDENTITY_POOL_ID = `YOUR_IDENTITY_POOL_ID` MAP_NAME = `YOUR_MAP_NAME` TRACKER_NAME = `YOUR_TRACKER_NAME` WEBSOCKET_URL = `YOUR_MQTT_TEST_CLIENT_ENDPOINT` GEOFENCE_ARN = `YOUR_GEOFENCE_COLLECTION_NAME`
  5. 儲存組態

  6. 您現在可以查看時間、距離和準確性的篩選條件選項。根據您的需求使用它們。

  7. 前往應用程式中的 `Tracking` 索引標籤,您會看到地圖和 `Start Tracking` 按鈕。

  8. 如果您已在模擬器上安裝應用程式,您可能想要模擬位置變更。這可以在功能 -> 位置選單選項中完成。例如,選取功能 -> 位置 -> 高速公路。

  9. 輕觸 `Start Tracking` 按鈕。您應該會在地圖上看到追蹤點。

  10. 應用程式也會追蹤背景中的位置。因此,當您在背景移動應用程式時,會要求您的許可,才能在背景模式中繼續追蹤。

  11. 您可以點選 `Stop Tracking` 按鈕來停止追蹤。