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

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

iOS 애플리케이션 생성

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입니다. 자세한 내용은 이 가이드의 트래커 항목과 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 지오펜스 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. 생성 버튼을 선택하여 완료합니다.

샘플 코드를 설정하려면 다음 도구가 설치되어 있어야 합니다.

  • Git

  • XCode 15.3 이상

  • iOS Simulator 16 이상

다음 절차에 따라 샘플 앱 코드를 설정합니다.

  1. https://github.com/aws-geospatial/amazon-location-samples-ios/tree/main/tracking-with-geofence-notifications URL에서 git 리포지토리를 복제합니다.

  2. AWSLocationSampleApp.xcodeproj 프로젝트 파일을 엽니다.

  3. 패키지 확인 프로세스를 기다립니다.

  4. 선택: 프로젝트 탐색 메뉴에서 ConfigTemplate.xcconfig 이름을 Config.xcconfig로 바꾸고 다음 값을 입력합니다.

    IDENTITY_POOL_ID = `YOUR_IDENTITY_POOL_ID` MAP_NAME = `YOUR_MAP_NAME` TRACKER_NAME = `YOUR_TRACKER_NAME` WEBSOCKET_URL = `YOUR_MQTT_TEST_CLIENT_ENDPOINT` GEOFENCE_ARN = `YOUR_GEOFENCE_COLLECTION_NAME`

이제 샘플 코드를 설정한 후 iOS 시뮬레이터 또는 물리적 디바이스에서 앱을 실행할 수 있습니다.

  1. 앱을 작성하고 실행합니다.

  2. 앱에서 위치 및 알림 권한을 요청합니다. 이 권한을 허용해야 합니다.

  3. `Cognito 구성` 버튼을 탭합니다.

  4. `Config.xcconfig` 파일의 값을 채우지 않은 경우 이전에 구성 화면에서 생성한 리소스 값으로 필드를 채워야 합니다.

    IDENTITY_POOL_ID = `YOUR_IDENTITY_POOL_ID` MAP_NAME = `YOUR_MAP_NAME` TRACKER_NAME = `YOUR_TRACKER_NAME` WEBSOCKET_URL = `YOUR_MQTT_TEST_CLIENT_ENDPOINT` GEOFENCE_ARN = `YOUR_GEOFENCE_COLLECTION_NAME`
  5. 구성을 저장합니다.

  6. 이제 시간, 거리 및 정확도에 대한 필터 옵션이 표시됩니다. 필요에 따라 사용합니다.

  7. 앱의 `추적` 탭으로 이동하면 맵과 `추적 시작` 버튼이 표시됩니다.

  8. 시뮬레이터에 앱을 설치한 경우 위치 변경을 시뮬레이션할 수 있습니다. 이 작업은 기능 -> 위치 메뉴 옵션에서 수행할 수 있습니다. 예를 들어 기능 -> 위치 -> 프리웨이 드라이브를 선택합니다.

  9. `추적 시작` 버튼을 탭합니다. 맵에 추적 지점이 표시됩니다.

  10. 앱은 백그라운드의 위치도 추적합니다. 따라서 앱을 백그라운드로 이동하면 백그라운드 모드에서 계속 추적할 수 있는 권한을 요청합니다.

  11. `추적 중지` 버튼을 탭하여 추적을 중지할 수 있습니다.