Android용 샘플 트래킹 및 지오펜스 애플리케이션 - Amazon Location Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Android용 샘플 트래킹 및 지오펜스 애플리케이션

이 주제에서는 모바일 애플리케이션에서 Amazon Location 지오펜스 및 트래커를 사용하는 주요 기능을 시연하기 위해 설계된 Android 자습서를 다룹니다. 애플리케이션은 Lambda와 Amazon Location 기능의 조합을 사용하여 트래커와 geonfence가 상호 작용하는 방식을 보여줍니다. AWS IoT

앱을 위한 Amazon 위치 리소스 생성

시작하려면 필요한 Amazon 위치 리소스를 생성해야 합니다. 이러한 리소스는 애플리케이션의 기능과 제공된 코드 스니펫을 실행하는 데 필수적입니다.

참고

계정을 만들지 않았다면 AWS AWS 계정 관리 사용 설명서의 지침을 따르세요.

시작하려면 다음 절차를 사용하여 Amazon Cognito 자격 증명 풀 ID를 생성해야 합니다.

  1. Amazon Cognito 콘솔을 열고 왼쪽 메뉴에서 자격 증명 풀을 선택한 다음 자격 증명 풀 생성을 선택합니다.

  2. 게스트 액세스가 선택되어 있는지 확인하고 다음을 눌러 계속하십시오.

  3. 다음으로 새 IAM 역할을 만들거나 기존 IAM 역할을 사용합니다.

  4. 자격 증명 풀 이름을 입력하고 자격 증명 풀이 다음 절차에서 생성할 맵 및 추적기의 Amazon Location (geo) 리소스에 액세스할 수 있는지 확인합니다.

다음으로 AWS Amazon Location 콘솔에서 맵을 생성하고 스타일을 지정해야 합니다. 다음 절차를 사용하십시오.

  1. Amazon 위치 콘솔의 맵 섹션으로 이동하여 맵 생성을 선택합니다.

  2. 새 맵에 이름과 설명을 입력합니다. 튜토리얼 뒷부분에서 사용할 수 있도록 지정한 이름을 기록해 두십시오.

  3. 맵 스타일을 선택할 때는 맵 데이터 공급자를 고려해 보세요. 자세한 내용은 AWS 서비스 약관의 섹션 82을 참조하십시오.

  4. Amazon 위치 이용 약관에 동의한 다음 맵 생성을 선택하여 맵 생성 프로세스를 완료합니다.

다음으로 Amazon Location 콘솔에서 트래커를 생성해야 합니다. 다음 절차를 사용하십시오.

  1. Amazon 위치 콘솔에서 지도 섹션을 엽니다.

  2. 트래커 생성을 선택합니다.

  3. 필수 필드를 입력합니다. 트래커의 이름은 이 튜토리얼 전체에서 참조되므로 기록해 두십시오.

  4. 위치 필터링 필드에서 트래커 리소스를 사용하려는 방식에 가장 적합한 옵션을 선택합니다. 포지션 필터링을 설정하지 않은 경우 기본 설정은 입니다TimeBased. 자세한 내용은 트래커PositionFilteringAmazon 위치 API 참조를 참조하십시오.

  5. 트래커 생성을 선택하여 트래커 생성을 완료하십시오.

지오펜스 컬렉션 만들기

이제 지오펜스 컬렉션을 만들어 볼까요? 콘솔, API 또는 CLI를 사용할 수 있습니다. 다음 절차는 각 옵션을 안내합니다.

  • Amazon 로케이션 콘솔을 사용하여 지오펜스 컬렉션을 생성합니다.

    1. Amazon 로케이션 콘솔의 지오펜스 컬렉션 섹션을 엽니다.

    2. 지오펜스 컬렉션 생성을 선택합니다.

    3. 컬렉션의 이름과 설명을 입력합니다.

    4. 대상으로 사용하는 EventBridge 규칙에서 선택적 EventBridge 규칙을 생성하여 Amazon CloudWatch 지오펜스 이벤트에 대한 대응을 시작할 수 있습니다. 이렇게 하면 Amazon Location에서 이벤트를 게시할 수 Amazon CloudWatch Logs있습니다.

    5. 지오펜스 컬렉션 생성을 눌러 컬렉션 생성을 완료합니다.

  • 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" } }
  • CLI AWS 명령을 사용하여 지오펜스 컬렉션을 생성합니다.

    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 로케이션 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 트래커를 선택합니다.

  3. 디바이스 트래커에서 대상 트래커의 이름 링크를 선택합니다.

  4. 연결된 지오펜스 컬렉션에서 지오펜스 컬렉션 연결을 선택합니다.

  5. 연결된 지오펜스 컬렉션 창의 드롭다운 메뉴에서 지오펜스 컬렉션을 선택합니다.

  6. 연결을 선택합니다.

  7. 트래커 리소스를 연결하면 해당 리소스에 활성 상태가 할당됩니다.

Amazon Location API를 사용하여 트래커 리소스를 지오펜스 컬렉션에 연결합니다.

Amazon Location Trackers API에서 AsssociateTrackerConsumer 작업을 사용합니다. 다음 예시에서는 Amazon 리소스 이름 (ARN) 을 사용하여 지오펜스 컬렉션과 연결하는 API 요청을 사용합니다. ExampleTracker

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

CLI AWS 명령을 사용하여 트래커 리소스를 지오펜스 컬렉션에 연결합니다.

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와 함께 사용하기

Amazon Location 간에 AWS IoT 연결을 생성하려면 이벤트에 의해 전달된 메시지를 처리하는 Lambda 함수가 필요합니다. EventBridge CloudWatch 이 함수는 모든 위치 데이터를 추출하여 Amazon 위치에 맞게 형식을 지정한 다음 Amazon 위치 추적기 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. Create 버튼을 선택하여 완료하십시오.

이전 절차를 완료했으면 이제 게스트 역할에 대한 권한을 다음과 같이 업데이트합니다.

  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. Android 스튜디오에서 AmazonSampleSDKApp 프로젝트를 엽니다.

  3. Android 기기 또는 에뮬레이터에서 앱을 빌드하고 실행합니다.

샘플 앱 사용

샘플을 사용하려면 다음 절차를 따르십시오.

  • custom.properties다음을 생성하십시오.

    custom.properties파일을 구성하려면 다음 단계를 따르세요.

    1. 원하는 텍스트 편집기 또는 IDE를 엽니다.

    2. 새 파일을 만듭니다.

    3. custom.properties 이름으로 파일을 저장합니다.

    4. 를 다음 코드 custom.properties 샘플로 업데이트하고,MQTT_END_POINT, POLICY_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 풀 ID, 트래커 이름, 맵 이름을 입력합니다.

    3. 로그인을 다시 눌러 완료하세요.

  • 필터 관리:

    구성 화면을 열고 다음을 수행합니다.

    1. 스위치 UI를 사용하여 필터를 켜거나 끕니다.

    2. 필요한 경우 시간 및 거리 필터를 업데이트하세요.

  • 추적 작업:

    추적 화면을 열고 다음을 수행합니다.

    • 각 버튼을 눌러 포그라운드, 백그라운드 또는 배터리 절약 모드에서 추적을 시작하고 중지할 수 있습니다.