本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
適用於 Android 的樣本跟踪和地理圍欄應用程序
本主題涵蓋了旨在演示在移動應用程序中使用 Amazon 位置地理圍欄和跟踪器的主要功能的 Android 教程。這些應用程序演示了跟踪器和地理圍欄如何使用 Lambda AWS IoT 和 Amazon 位置功能的組合進行交互。
為您的應用程式建立 Amazon 位置資源
首先,您需要創建所需的 Amazon 位置資源。這些資源對於應用程序的功能和執行提供的代碼片段至關重要。
注意
如果您尚未建立 AWS 帳戶,請依照AWS 帳戶管理使用手冊中的指示操作。
若要開始,您需要建立 Amazon Cognito 身分識別集區 ID,請使用下列程序:
開啟 Amazon Cognito 主控台
,然後從左側功能表中選取身分集區,然後選取建立身分集區。 確保選中訪客訪問權限,然後按下一步繼續。
接下來,建立新的 IAM 角色或使用現有的 IAM 角色。
輸入身分集區名稱,並確保身分集區可以存取您要在下一個程序中建立的地圖和追蹤器的 Amazon 位置
(geo)
資源。
接下來,您需要在 AWS Amazon 位置控制台中創建和設置地圖樣式,請使用以下步驟:
導覽至 Amazon 位置主控台的「地圖」區段
,然後選取「建立地圖」。 為新地圖提供「名稱」和「描述」。記錄您指定的名稱,如同稍後在自學課程中使用的名稱一樣。
選擇地圖型式時,請考慮地圖資料提供者。如需詳細資訊,請參閱AWS 服務條款
第 82 節。 接受 Amazon 位置條款與條件
,然後選取建立地圖,以完成地圖建立程序。
接下來,您需要在 Amazon 位置控制台中創建跟踪器,請使用以下步驟:
在 Amazon 位置主控台中開啟「地圖」區段
。 選擇建立追蹤器。
填寫必填欄位。記下跟踪器的名稱,因為它將在整個術語中被拒絕。
在「位置篩選」欄位下,選擇最符合您要使用追蹤器資源的方式的選項。如果您未設定「位置篩選」,則預設設定為
TimeBased
。如需詳細資訊,請參閱追蹤器和 Amazon 位置 API 參考PositionFiltering中的。選擇「建立追蹤器」以完成追蹤器的建立。
建立地理圍欄集合
現在,您將創建一個地理圍欄集合。您可以使用控制台、API 或 CLI。下列程序會逐步引導您完成每個選項。
使用 Amazon 位置主控台建立地理圍欄集合:
打開 Amazon 位置控制台的地理圍欄集合
部分。 選擇 [建立地理圍欄集合]。
提供集合的名稱和描述。
在以 Amazon CloudWatch 做為目標的 EventBridge 規則下,您可以建立選擇性 EventBridge 規則,以開始對地理圍欄事件做出反應。這使 Amazon 位置能夠將事件發佈到 Amazon CloudWatch Logs.
按「建立地理圍欄」集合以完成建立集合。
使用 Amazon 定位 API 建立地理圍欄集合:
使用來自 Amazon 位置地理圍欄 API 的CreateGeofenceCollection操作。下列範例會使用 API 要求來建立名為的地理圍欄集合。
GEOCOLLECTION_NAME
POST /geofencing/v0/collections Content-type: application/json { "CollectionName": "
GEOCOLLECTION_NAME
", "Description": "Geofence collection 1 for shopping center", "Tags": { "Tag1" : "Value1" } }使用 AWS CLI 命令建立地理圍欄集合:
使用
create-geofence-collection
命令。下列範例會使用 AWS CLI 建立名為的地理圍欄集合。
如需有關使用 AWS CLI 的詳細資訊,請參閱命AWS 令列介面文件。GEOCOLLECTION_NAME
aws location \ create-geofence-collection \ --collection-name "ExampleGeofenceCollection" \ --description "Shopping center geofence collection" \ --tags Tag1=Value1
將追蹤器連結至地理圍欄集合
若要將追蹤器連結至地理圍欄集合,您可以使用主控台、API 或 CLI。下列程序會逐步引導您完成每個選項。
使用 Amazon 定位服務主控台將追蹤器資源連結至 Location Service 圍欄集合:
打開 Amazon 位置控制台。
在左側導覽窗格中,選擇「追蹤器」。
在「裝置追蹤器」下,選取目標追蹤器的名稱連結。
在「連結的地理圍欄集合」下,選擇「連結地理圍欄集合」。
在「連結的地理圍欄集合」視窗中,從下拉式選單中選取地理圍欄集合。
選擇 Link (連結)。
在您連結追蹤器資源之後,系統會為其指派「作用中」狀態。
使用 Amazon 位置 API 將追蹤器資源連結至地理圍欄集合:
使用 Amazon 位置追蹤器 API 中的AsssociateTrackerConsumer
操作。下列範例使用 API 請求,該要求使用其 Amazon 資源名稱 (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"
搭配 M AWS QTT 使用 Lambda
為了建立 AWS IoT 和 Amazon 位置之間的連線,您需要 Lambda 函數來處理 EventBridge CloudWatch 事件轉寄的訊息。此功能將擷取任何位置資料,將其格式化為 Amazon 位置,然後透過 Amazon 位置追蹤器 API 提交。
下列程序說明如何透過 Lambda 主控台建立此函數:
開啟 主控台
。 在左側導覽中,選擇 [功能]。
然後選擇「建立函數」,並確定已選取「從頭開始作者」選項。
提供「函數」名稱,並針對「執行階段」選項選擇 Node.js 16.x。
選擇建立函數。
開啟 [程式碼] 索引標籤以存取編輯器。
使用下列指令覆寫
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 } }); } }); }
按部署保存更新的功能。
接下來打開配置選項卡。
在「觸發器」區段中,按下「新增觸發器」按鈕。
在「來源」欄位中選取 EventBridge (CloudWatch 事件)。
選取「現有規則」選項。
輸入規則名稱,例如
AmazonLocationMonitor-GEOFENCECOLLECTION_NAME
。按下「新增」按鈕。
這也將在權限選項卡中附加基於資源的策略語句
現在,您將使用設置 MQTT 測試客戶端 AWS IoT,請使用以下步驟:
打開網站
。https://console.aws.amazon.com/iot/ 在左側導覽窗格中,選取 MQTT 測試用戶端。
您將看到一個標題為 MQTT 測試客戶端的部分,您可以在其中配置 MQTT 連接。
配置必要的設置後,單擊「Connec t」按鈕以使用提供的參數建立與 MQTT 代理的連接。
記錄端點,因為它稍後在管理中使用。
連接到測試用戶端後,您可以訂閱 MQTT 主題或使用 MQTT 測試用戶端介面中提供的相應輸入欄位,將訊息發佈到主題。接下來,您將建立 AWS IoT 策略。
在左側菜單中,在管理下展開安全選項,然後單擊策略。
點擊創建策略按鈕。
輸入政策名稱。
在政策文件上,選取 JSON 索引標籤。
複製粘貼下面顯示的策略,但請確保使用您的
和更新所有元素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" } ] }選取「建立」按鈕以完成作業。
完成上一個程序之後,您現在將更新 Guest 角色的權限,如下所示:
瀏覽至 Amazon Cognito 並開啟您的身分集區。然後,繼續使用者存取並選取 Guest 角色。
按一下權限原則以啟用編輯功能。
{ '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' } ] }隨著上述原則的變更,所有必要的 AWS 資源現在都會針對應用程式進行適當的設定。
設定範例應用程式程式碼
克隆此存儲庫:https://github.com/aws-geospatial/ amazon-location-samples-android /樹/主/到您的本地計
算tracking-with-geofence-notifications機。 在安卓工作室中打開
AmazonSampleSDKApp
項目。在您的 Android 設備或模擬器上構建並運行該應用程序。
使用範例應用程式
若要使用範例,請遵循下列程序:
創建一個
custom.properties
:若要設定
custom.properties
檔案,請依照下列步驟執行:開啟您偏好的文字編輯器或 IDE。
建立新檔案。
儲存檔案,並將其命名為
custom.properties
。custom.properties
使用下列程式碼範例更新,並以您的MQTT_END_POINT
資源名稱取代GEOFENCE_COLLECTION_NAME
、、和TOPIC_TRACKER
:POLICY_NAME
MQTT_END_POINT=
YOUR_END_POINT
.us-east-1.amazonaws.com POLICY_NAME=YOUR_POLICY
GEOFENCE_COLLECTION_NAME=YOUR_GEOFENCE
TOPIC_TRACKER=YOUR_TRACKER
清理並重建項目。在此之後,您可以運行該項目。
登入:
要登錄該應用程序,請按照以下步驟操作:
按「登入」按鈕。
提供識別集區 ID、追蹤器名稱和對應名稱。
再次按「登入」即可完成操作。
管理篩選器:
開啟設定畫面,然後執行下列動作:
使用切換 UI 切換過濾器的開啟或關閉。
視需要更新時間和距離篩選條件。
追蹤作業:
開啟追蹤畫面並執行下列動作:
您可以按下相應的按鈕,以前景、背景或省電模式開始和停止追蹤。