iOS アプリケーションを作成する - Amazon Location Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

iOS アプリケーションを作成する

Amazon Location Service を使用して iOS アプリケーションを構築するには、次の手順に従います。

GitHub からプロジェクトファイルをクローンします。

AWS アカウントの準備ができたら、Amazon Location Service リソースを生成できます。これらのリソースは、提供されたコードスニペットの実行に不可欠です。

注記

AWS アカウントをまだ作成していない場合は、AWS アカウントを作成してください。

まず、Amazon Cognito アイデンティティプール ID を作成する必要があります。以下の手順に従ってください。

  1. AWS コンソールで、Amazon Cognito に移動して、左側のメニューから [アイデンティティプール] を選択し、[アイデンティティプールを作成] を選択します。

  2. [ゲストアクセス] がオンになっていることを確認し、[次へ] を押して続行します。

  3. 次に、新しい IAM ロールを作成するか、既存の IAM ロールを使用します。

  4. アイデンティティプール名を入力し、次の手順で作成するマップとトラッカーの 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 トラッカー API リファレンス」の「PositionFiltering」を参照してください。

  6. [トラッカーを作成] を選択して終了します。

ジオフェンスコレクションを作成する際は、コンソール、API、または CLI のいずれかを使用できます。以下の手順で、各オプションについて説明します。

Amazon Location コンソールを使用してジオフェンスコレクションを作成する:

  1. Amazon Location Service コンソール (https://console.aws.amazon.com/location/) を開きます。

  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. [Link (リンク)] を選択します。

  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. [Create function] を選択します。

  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. この URL (https://github.com/aws-geospatial/amazon-location-samples-ios/tree/main/tracking-with-geofence-notifications) から git リポジトリを複製します。

  2. AWSLocationSampleApp.xcodeproj プロジェクトファイルを開きます。

  3. パッケージの解決プロセスを待ちます。

  4. オプション: プロジェクトナビゲーションメニューで、ConfigTemplate.xcconfigConfig.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 Configuration] ボタンをタップします。

  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. [追跡を停止する] ボタンをタップすると、追跡を停止できます。