Android 애플리케이션 생성 - Amazon Location Service

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

Android 애플리케이션 생성

Amazon Location Service를 사용하여 iOS 애플리케이션을 빌드하려면 다음 절차를 따릅니다.

GitHub에서 프로젝트 파일을 복제합니다.

AWS 계정이 준비되면 Amazon Location Service 리소스를 생성할 수 있습니다. 이러한 리소스는 제공된 코드 조각을 실행하는 데 필수적입니다.

참고

아직 AWS 계정을 생성하지 않은 경우 AWS 계정을 생성합니다.

시작하려면 Amazon Cognito ID 풀 ID를 생성해야 합니다. 다음 절차를 따르세요.

  1. AWS 콘솔에서 Amazon Cognito 서비스로 이동한 다음, 왼쪽 메뉴에서 ID 풀을 선택하고 ID 풀 생성을 선택합니다.

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

  3. 다음으로 새 IAM 역할을 생성하거나 기존 IAM 역할을 사용합니다.

  4. ID 풀 이름을 입력하고 ID 풀이 다음 절차에서 생성할 맵 및 트래커의 Amazon Location (geo) 리소스에 액세스할 수 있는지 확인합니다.

이제 AWS Amazon Location 콘솔에서 맵을 생성하고 스타일링해야 합니다. 다음 절차를 사용합니다.

  1. Amazon Location 콘솔의 맵 섹션으로 이동하고 맵 생성을 선택하여 사용 가능한 맵 스타일을 미리 봅니다.

  2. 새 맵 리소스에 이름설명을 지정합니다. 나중에 자습서에서 사용되므로 맵 리소스에 할당한 이름을 기록합니다.

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

  4. Amazon Location 이용 약관에 동의한 다음, 맵 생성을 선택합니다. 맵이 생성된 후에는 어떤 방향으로든 확대, 축소 또는 이동하여 맵과 상호 작용할 수 있습니다.

Amazon Location 콘솔을 사용하여 트래커를 만들려면

  1. Amazon Location Service 콘솔을 엽니다.

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

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

  4. 모든 필수 필드를 입력합니다.

  5. 위치 필터링에서 트래커 리소스를 사용하려는 방식에 가장 적합한 옵션을 선택합니다. 위치 필터링을 설정하지 않은 경우 기본 설정은 TimeBased입니다. 자세한 내용은 이 가이드의 Trackers 항목과 Amazon Location Service Tracker API 참조의 PositionFiltering 항목을 참조하세요.

  6. 트래커 생성을 선택하여 완료합니다.

지오펜스 컬렉션을 생성하면 콘솔, API 또는 CLI를 사용할 수 있습니다. 아래 절차에서 각 옵션을 알아볼 수 있습니다.

Amazon Location 콘솔을 사용하여 지오펜스 컬렉션 생성:

  1. https://console.aws.amazon.com/location/에서 Amazon Location Service 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 지오펜스 컬렉션을 선택합니다.

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

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

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

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

Amazon Location API를 사용하여 지오펜스 컬렉션 생성:

Amazon Location Geofences API에서 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. 연결을 선택합니다.

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

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

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

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 간에 연결을 만들려면 EventBridge CloudWatch 이벤트에서 전달한 메시지를 처리하는 AWS Lambda 함수가 필요합니다. 이 함수는 모든 위치 데이터를 추출하여 Amazon Location Service에 맞게 형식을 지정한 다음 Amazon Location Tracker API를 통해 제출합니다. AWS Lambda 콘솔을 통해 이 함수를 만들거나 AWS Command Line Interface(AWS CLI) 또는 AWS Lambda API를 사용할 수 있습니다. 콘솔을 사용하여 Amazon Location에 위치 업데이트를 게시하는 Lambda 함수를 생성하려면

  1. https://console.aws.amazon.com/lambda/에서 AWS Lambda 콘솔을 엽니다.

  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. 배포를 선택하여 업데이트된 함수를 저장합니다.

  9. 구성 탭을 선택합니다.

  10. 트리거 섹션에서 트리거 추가를 선택합니다.

  11. 소스 필드에서 EventBridge(CloudWatch Events)를 선택합니다.

  12. '기존 규칙' 라디오 옵션을 선택합니다.

  13. 이 `AmazonLocationMonitor-GEOFENCECOLLECTION_NAME`과 같은 규칙 이름을 입력합니다.

  14. 추가 버튼을 클릭합니다.

  15. 이렇게 하면 권한 탭에 `리소스 기반 정책 문`도 연결됩니다.

MQTT 테스트 클라이언트

  1. https://console.aws.amazon.com/iot/를 엽니다.

  2. 왼쪽 탐색 창에서 MQTT 테스트 클라이언트를 선택합니다.

  3. MQTT 연결을 구성할 수 있는 MQTT 테스트 클라이언트라는 섹션이 표시됩니다.

  4. 필요한 설정을 구성한 후 연결 버튼을 클릭하여 제공된 파라미터를 사용하여 MQTT 브로커에 대한 연결을 설정합니다.

  5. 엔드포인트 값을 기록해 둡니다.

연결되면 MQTT 테스트 클라이언트 인터페이스에 제공된 각 입력 필드를 사용하여 MQTT 주제를 구독하거나 주제에 메시지를 게시할 수 있습니다. 다음으로 MQTT 정책을 연결합니다.

  1. 왼쪽 메뉴의 관리에서 보안 옵션을 확장하고 정책을 클릭합니다.

  2. 정책 생성 버튼을 클릭합니다.

  3. 정책 이름을 입력합니다.

  4. 정책 문서에서 JSON 탭을 선택합니다.

  5. 아래 표시된 정책을 복사하여 붙여 넣지만 모든 요소를 REGIONACCOUNT_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로 이동하여 ID 풀을 엽니다. 그런 다음 사용자 액세스로 이동하여 게스트 역할을 선택합니다.

  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_POINT, POLICY_NAME, GEOFENCE_COLLECTION_NAMETOPIC_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 풀 ID, 트래커 이름맵 이름을 제공합니다.

    3. 로그인을 다시 눌러 완료합니다.

  • 필터 관리:

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

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

    2. 필요한 경우 시간 및 거리 필터를 업데이트합니다.

  • 추적 작업:

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

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