适用于 Android 的示例跟踪和地理围栏应用程序 - Amazon Location Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Android 的示例跟踪和地理围栏应用程序

本主题介绍了 Android 教程,该教程旨在演示在移动应用程序中使用 Amazon Location 地理围栏和追踪器的主要功能。这些应用程序演示了跟踪器和地理围栏如何使用 Lambda 和 AWS IoT Amazon Location 功能的组合进行交互。

为您的应用程序创建 Amazon Location 资源

首先,您需要创建所需的 Amazon Location 资源。这些资源对于应用程序的功能和执行所提供的代码片段至关重要。

注意

如果您尚未创建账户,请按照 AWS AWS 账户管理用户指南中的说明进行操作。

首先,您需要创建 Amazon Cognito 身份池 ID,请按以下步骤操作:

  1. 打开 Amazon Cognito 控制台,从左侧菜单中选择身份池,然后选择创建身份池。

  2. 确保选中 “访客访问权限”,然后按 “下一步” 继续。

  3. 接下来创建新的 IAM 角色或使用现有的 IAM 角色。

  4. 输入身份池名称,并确保身份池可以访问您将在下一个步骤中创建的地图和追踪器的 Amazon Location (geo) 资源。

接下来,您需要在 AWS Amazon Location 控制台中创建地图并设置地图样式,请按以下步骤操作:

  1. 导航至 Amazon Location 控制台的 “地图” 部分,然后选择 “创建地图”。

  2. 为新地图指定名称描述。记录您指定的名称,本教程稍后将使用该名称。

  3. 选择地图样式时,请考虑地图数据提供器。有关更多详细信息,请参阅AWS 服务条款的第 82 节。

  4. 接受 Amazon 位置条款和条件,然后选择创建地图,完成地图创建过程。

接下来,您需要在 Amazon Location 控制台中创建追踪器,请按以下步骤操作:

  1. 在 Amazon Location 控制台中打开 “地图” 部分

  2. 选择创建跟踪器

  3. 填写必填字段。记下跟踪器的名称,因为本教程中将引用该名称。

  4. 在 “位置筛选” 字段下,选择最适合您打算如何使用跟踪链接资源的选项。如果未设置位置筛选,则默认设置为TimeBased。有关更多信息,请参阅追踪器和 Amazon 定PositionFiltering位 API 参考。

  5. 选择 “创建跟踪链接” 以完成追踪器的创建。

创建 Geofence 收藏集

现在,您将创建一个地理围栏集合。您可以使用控制台、API 或 CLI。以下过程将引导您完成每个选项。

  • 使用 Amazon Location 控制台创建地理围栏集合:

    1. 打开 Amazon Location 控制台的 Geofence 收藏部分。

    2. 选择创建地理围栏集合

    3. 为集合提供名称和描述。

    4. 根据以 Amazon CloudWatch 为目标的 EventBridge 规则,您可以创建一条可选 EventBridge 规则来开始对地理围栏事件做出反应。这使得 Amazon Location 可以向发布事件 Amazon CloudWatch Logs。

    5. 按下创建 geofence 收藏集以完成收藏夹的创建。

  • 使用 Amazon Location 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" } }
  • 使用 CL AWS I 命令创建地理围栏集合:

    使用 create-geofence-collection 命令。以下示例使用 AWS CLI 创建名为的地理围栏集合。GEOCOLLECTION_NAME有关使用 AWS CLI 的更多信息,请参阅AWS 命令行界面文档

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

要将跟踪器关联到地理围栏集合,您可以使用控制台、API 或 CLI。以下过程将引导您完成每个选项。

使用 Amazon Location Service 控制台将追踪器资源链接到地理围栏集合:

  1. 打开 Amazon Location 控制台。

  2. 在左侧导航窗格中,选择跟踪器

  3. 在 “设备跟踪器” 下,选择目标跟踪链接的名称链接。

  4. 链接的地理围栏集合下,选择链接地理围栏集合

  5. 链接的地理围栏集合窗口中,从下拉菜单中选择一个地理围栏集合。

  6. 选择关联

  7. 在您关联跟踪器资源后,它将处于活动状态。

使用 Amazon Location API 将追踪器资源关联到地理围栏集合:

使用 Amazon Location 跟踪器 API 中的 AsssociateTrackerConsumer 操作。以下示例使用一个 API 请求,该请求使用其亚马逊资源名称 (ARN) 将ExampleTracker与地理围栏集合关联起来。

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

使用 CL AWS I 命令将跟踪器资源链接到地理围栏集合:

使用 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"

将 AWS Lambda 与 MQTT 配合使用

为了在 AWS IoT 和 Amazon Location 之间建立连接,您需要一个 Lambda 函数来处理由事件转发的 EventBridge CloudWatch 消息。此函数将提取所有位置数据,将其格式化为亚马逊位置,然后通过亚马逊位置追踪器 API 提交。

以下过程向您展示如何通过 Lambda 控制台创建此函数:

  1. 打开控制台

  2. 从左侧导航窗格中,选择函数

  3. 然后选择 “创建函数”,并确保选中 “从头开始创作” 选项。

  4. 提供函数名称,然后在 “运行时” 选项中选择 Node.js 16.x。

  5. 选择创建函数

  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. 按下 Deploy 保存更新的函数。

  9. 接下来打开 “配置” 选项卡。

  10. 在 “触发器” 部分中,按添加触发器按钮。

  11. 在 “来源” 字段中选择 EventBridge (CloudWatch 事件)

  12. 选择 “现有规则” 选项。

  13. 例如,输入规则名称AmazonLocationMonitor-GEOFENCECOLLECTION_NAME

  14. 按 “添加” 按钮。

  15. 这还将在 “权限” 选项卡中附加基于资源的策略声明

现在,您将使用 AWS IoT以下步骤设置 MQTT 测试客户端:

  1. 打开 https://console.aws.amazon.com/iot/

  2. 在左侧导航窗格中,选择 MQTT 测试客户端

  3. 您将看到标题为 MQTT 测试客户端的部分,您可以在其中配置 MQTT 连接。

  4. 配置必要设置后,单击 Connect 按钮,使用提供的参数建立与 MQTT 代理的连接。

  5. 记录端点,本教程稍后将使用该端点。

    连接到测试客户端后,您可以使用 MQTT 测试客户端界面中提供的相应输入字段订阅 MQTT 主题或向主题发布消息。接下来,您将创建一个 AWS IoT 策略。

  6. 在左侧菜单的 “管理” 下,展开 “安全” 选项,然后单击 “策略”。

  7. 单击 “创建策略” 按钮。

  8. 输入策略名称。

  9. 政策文档上,选择 JSON 选项卡。

  10. 复制粘贴下方显示的政策,但请务必使用您的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" } ] }
  11. 选择 “创建” 按钮即可完成。

完成上述步骤后,您现在将按如下方式更新访客角色的权限:

  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. 将此存储库:https://github.com/aws-geospatial/ amazon-location-samples-android /tree/main/ 克隆tracking-with-geofence-notifications到你的本地计算机。

  2. 在安卓工作室中打开AmazonSampleSDKApp项目。

  3. 在您的 Android 设备或模拟器上构建并运行该应用程序。

使用示例应用程序

要使用该示例,请按照以下步骤操作:

  • 创建一个 custom.properties

    要配置您的custom.properties文件,请按照以下步骤操作:

    1. 打开您首选的文本编辑器或 IDE。

    2. 创建新的文件。

    3. 使用文件名 custom.properties 保存该文件。

    4. custom.properties使用以下代码示例更新,并使用您的资源名称替换MQTT_END_POINTPOLICY_NAMEGEOFENCE_COLLECTION_NAME、、和TOPIC_TRACKER

      MQTT_END_POINT=YOUR_END_POINT.us-east-1.amazonaws.com POLICY_NAME=YOUR_POLICY GEOFENCE_COLLECTION_NAME=YOUR_GEOFENCE TOPIC_TRACKER=YOUR_TRACKER
    5. 清理并重建项目。之后,您可以运行该项目。

  • 登录

    要登录应用程序,请按照以下步骤操作:

    1. 按 “登录” 按钮。

    2. 提供身份池 ID跟踪器名称地图名称

    3. 再次按 “登录” 完成操作。

  • 管理过滤器

    打开配置屏幕,然后执行以下操作:

    1. 使用 Switch UI 打开或关闭过滤器。

    2. 需要时更新时间和距离过滤器。

  • 追踪操作:

    打开跟踪屏幕并执行以下操作:

    • 您可以通过按下相应的按钮在前景、后台或省电模式下开始和停止跟踪。