建立 Android 應用程式 - Amazon Location Service

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

建立 Android 應用程式

請依照這些程序,使用 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. 選取要完成的建立按鈕。

完成先前的程序後,您現在將更新訪客角色的許可,如下所示:

  1. 導覽至 Amazon Cognito 並開啟您的身分集區。然後,繼續存取使用者,然後選取訪客角色。

  2. 按一下許可政策以啟用編輯。

    { 'Version': '2012-10-17 ', 'Statement': [ { 'Action': [ 'geo:GetMap*', 'geo:BatchUpdateDevicePosition', 'geo:BatchEvaluateGeofences', 'iot:Subscribe', 'iot:Publish', 'iot:Connect', 'iot:Receive', 'iot:AttachPrincipalPolicy', 'iot:AttachPolicy', 'iot:DetachPrincipalPolicy', 'iot:DetachPolicy' ], 'Resource': [ 'arn:aws:geo:us-east-1:{USER_ID}:map/{MAP_NAME}', 'arn:aws:geo:us-east-1:{USER_ID}:tracker/{TRACKER_NAME}', 'arn:aws:geo:us-east-1:{USER_ID}:geofence-collection/{GEOFENCE_COLLECTION_NAME}', 'arn:aws:iot:us-east-1:{USER_ID}:client/${cognito-identity.amazonaws.com:sub}', 'arn:aws:iot:us-east-1:{USER_ID}:topic/${cognito-identity.amazonaws.com:sub}', 'arn:aws:iot:us-east-1:{USER_ID}:topicfilter/${cognito-identity.amazonaws.com:sub}/*', 'arn:aws:iot:us-east-1:{USER_ID}:topic/${cognito-identity.amazonaws.com:sub}/tracker' ], 'Effect': 'Allow' }, { 'Condition': { 'StringEquals': { 'cognito-identity.amazonaws.com:sub': '${cognito-identity.amazonaws.com:sub}' } }, 'Action': [ 'iot:AttachPolicy', 'iot:DetachPolicy', 'iot:AttachPrincipalPolicy', 'iot:DetachPrincipalPolicy' ], 'Resource': [ '*' ], 'Effect': 'Allow' } ] }
  3. 隨著上述政策的變更,現在已針對應用程式適當設定所有必要 AWS 的資源。

  1. 開啟 Android Studio,然後選取新增,然後從版本控制投影

  2. 導覽至 Android Studio 左上角的檔案選單。

  3. 從下拉式選單中選取「新增」。

  4. 選擇「從版本控制專案」。

  5. 輸入儲存庫 URL 在出現的對話方塊中,尋找標記為「URL」的欄位。

  6. 將範例應用程式的下列 URL 複製並貼到此欄位:https://github.com/aws-geospatial/amazon-location-samples-android.git

  7. 決定您要複製儲存庫的目錄。使用預設目錄或選擇自訂位置。

  8. 設定儲存庫 URL 和目錄偏好設定後,按一下「複製」按鈕。Android Studio 將繼續將儲存庫複製到您指定的位置。

  9. 您現在已將應用程式複製到您的機器,並可以開始使用它。

若要使用範例,請遵循下列程序:

  • 建立 custom.properties

    若要設定 custom.properties 檔案,請依照下列步驟進行:

    1. 開啟您偏好的文字編輯器或 IDE。

    2. 建立新檔案。

    3. 儲存檔案,並將其命名為 custom.properties

    4. custom.properties 使用以下程式碼範例更新 ,並將 MQTT_END_POINTGEOFENCE_COLLECTION_NAMEPOLICY_NAME和 取代TOPIC_TRACKER為實際值:

      MQTT_END_POINT=xxxxxxxxxxxxx-xxx.xxx.us-east-1.amazonaws.com POLICY_NAME=xxxxxxxxx GEOFENCE_COLLECTION_NAME=xxxxxxxxxxxxxxxxx TOPIC_TRACKER=xxxxxxxxxx
    5. 清理和重建專案。之後,您可以執行專案。

  • 登入

    若要登入應用程式,請遵循下列步驟:

    1. 按下登入按鈕。

    2. 提供身分集區 ID追蹤器名稱映射名稱

    3. 再次按下登入以完成。

  • 管理篩選條件

    開啟組態畫面,並執行下列動作:

    1. 使用切換 UI 切換開啟/關閉篩選條件。

    2. 視需要更新時間和距離篩選條件。

  • 追蹤操作:

    開啟追蹤畫面並執行下列動作:

    • 您可以按個別按鈕,在前景、背景或省電模式下開始和停止追蹤。