本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建 Android 应用程序
按照以下步骤使用 Amazon Location Service 构建 iOS 应用程序。
从中克隆项目文件GitHub
AWS 账户准备就绪后,您可以生成 Amazon Location Service 资源。这些资源对于执行所提供的代码片段至关重要。
注意
如果您还没有创建 AWS 账户,请创建一个 AWS 账户
首先,您需要创建 Amazon Cognito 身份池 ID,请按以下步骤进行操作:
-
在 AWS 控制台中,导航到 Amazon Cognito 服务,然后从左侧菜单中选择身份池,然后选择创建身份池。
-
确保选中 “访客访问权限”,然后按 “下一步” 继续。
-
接下来,创建一个新 IAM 角色或使用现有 IAM 角色。
-
输入身份池名称,并确保身份池可以访问您将在下一步中创建的地图和追踪器的 Amazon Location
(geo)
资源。
现在,您需要在 AWS Amazon Location 控制台中创建地图并设置地图样式,请按以下步骤操作:
-
导航至 Amazon Location 控制台中的 “地图” 部分
,然后选择 “创建地图” 以预览可用的地图样式。 -
为新地图资源指定名称和描述。记录您分配给地图资源的名称,本教程稍后将使用该名称。
-
选择地图样式时,请考虑地图数据提供程序。有关更多详细信息,请参阅 AWS 服务条款
的第 82 节。 -
接受 Amazon 位置条款和条件
,然后选择创建地图。创建地图后,您可以通过放大、缩小或向任意方向平移来与地图进行交互。
使用 Amazon Location 控制台创建跟踪器
-
在左侧导航窗格中,选择跟踪器。
-
选择创建跟踪器。
-
填写所有必填字段。
-
在位置筛选下,选择最适合您打算如何使用跟踪器资源的选项。如果未设置位置筛选,则默认设置为 TimeBased。有关更多信息,请参阅本指南和 Amazon Location Service 追踪器 API 参考 PositionFiltering中的追踪器。
-
选择创建跟踪器完成操作。
创建地理围栏集合时,您可以使用控制台、API 或 CLI。以下步骤将指导您完成每个选项。
使用 Amazon Location 控制台创建地理围栏集合:
-
打开 Amazon Location Service 控制台,网址为 https://console.aws.amazon.com/location/。
-
在左侧导航窗格中,选择 Geofence 集合。
-
选择创建地理围栏集合。
-
为集合提供名称和描述。
-
在以目标 CloudWatch 为目标的 EventBridge 规则下,您可以创建一条可选 EventBridge 规则来开始对地理围栏事件做出反应。这样,Amazon Location 就可以将事件发布到亚马逊 CloudWatch 日志。
-
选择创建地理围栏集合。
使用 Amazon 位置创建地理围栏集合: APIs
使用 Amazon 定位地理围 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 控制台将跟踪器资源链接到地理围栏集合:
-
打开 Amazon Location 控制台。
-
在左侧导航窗格中,选择跟踪器。
-
在设备跟踪器下,选择目标跟踪器的名称链接。
-
在链接的地理围栏集合下,选择链接地理围栏集合。
-
在链接的地理围栏集合窗口中,从下拉菜单中选择一个地理围栏集合。
-
选择链接。
-
在您关联跟踪器资源后,它将处于活动状态。
使用 Amazon 位置将追踪器资源链接到地理围栏集合: APIs
使用 Amazon 位置追踪器 APIs中的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
" }
使用 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 跟踪器 API 提交。您可以通过 AWS Lambda 控制台创建此函数,也可以使用 AWS Command Line Interface (AWS CLI) 或 AWS Lambda APIs。要使用控制台创建 Lambda 函数,将位置更新发布到 Amazon Location,请执行以下操作:
-
打开 AWS Lambda 控制台,网址为 https://console.aws.amazon.com/lambda/。
-
从左侧导航窗格中,选择函数。
-
选择创建函数,并确保选择从头开始创作。
-
填写以下选框:
-
a 函数名
-
在 “运行时” 选项中,选择 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 事件)。
-
选择 “现有规则” 单选选项。
-
输入这样的规则名称 `-GEOFENCECOLLECTION_NAM AmazonLocationMonitor E`。
-
单击 “添加” 按钮。
-
这还将在权限选项卡中附加 “基于资源的策略声明”
MQTT 测试客户端
-
在左侧导航窗格中,选择 MQTT 测试客户端。
-
您将看到标题为 MQTT 测试客户端的部分,您可以在其中配置 MQTT 连接。
-
配置必要的设置后,单击连接按钮,使用提供的参数建立与 MQTT 代理的连接。
-
记下端点值。
连接后,您可以使用 MQTT 测试客户端界面中提供的相应输入字段订阅 MQTT 主题或向主题发布消息。接下来,您将附上 MQTT 策略:
-
在左侧菜单的管理下,展开安全性选项,然后单击策略。
-
单击创建策略按钮。
-
输入策略名称。
-
在策略文档上,选择 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" } ] }注意
记录策略名称和主题名称,以便在下一个步骤中使用。
-
选择创建按钮完成操作。
完成上述步骤后,现在,您将按如下方式更新访客角色的权限:
-
导航至 Amazon Cognito 并打开您的身份池。然后,继续设置用户访问权限并选择访客角色。
-
单击权限策略以启用编辑。
{ '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 资源。
-
打开 Android Studio,从版本控制中选择新建,然后选择项目。
-
导航到 Android Studio 左上角的文件菜单。
-
从下拉菜单中选择 “新建”。
-
选择 “版本控制中的项目”。
-
输入存储库 URL 在出现的对话框中,找到标有 “URL” 的字段。
-
将示例应用程序的以下 URL 复制并粘贴到此字段中:https://github.com/aws-geospatial/amazon-location-samples-android.git
-
确定要克隆存储库的目录。使用默认目录或选择自定义位置。
-
设置存储库 URL 和目录首选项后,点击 “克隆” 按钮。Android Studio 将继续将存储库克隆到您的指定位置。
-
现在,您已将应用程序克隆到您的计算机上,可以开始使用它了。
要使用该示例,请按照以下步骤进行操作:
-
创建
custom.properties
:要配置
custom.properties
文件,请按照以下步骤进行操作:-
打开您的首选文本编辑器或 IDE。
-
创建新的文件。
-
使用文件名
custom.properties
保存该文件。 -
custom.properties
使用以下代码示例更新,并用实际值替换MQTT_END_POINT
POLICY_NAME
GEOFENCE_COLLECTION_NAME
、、和TOPIC_TRACKER
:MQTT_END_POINT=xxxxxxxxxxxxx-xxx.xxx.us-east-1.amazonaws.com POLICY_NAME=xxxxxxxxx GEOFENCE_COLLECTION_NAME=xxxxxxxxxxxxxxxxx TOPIC_TRACKER=xxxxxxxxxx
-
清理并重新构建项目。之后,您可以运行项目。
-
-
登录:
要登录应用程序,请按照以下步骤进行操作:
-
按登录按钮。
-
提供身份池 ID、跟踪器名称和地图名称。
-
再次按登录完成操作。
-
-
管理筛选器:
打开配置屏幕,然后执行以下操作:
-
on/off 使用切换界面切换过滤器。
-
需要时更新时间和距离筛选器。
-
-
跟踪操作:
打开跟踪屏幕,然后执行以下操作:
-
您可以通过按下相应的按钮在前景、后台或省电模式下开始和停止跟踪。
-