Android 用のサンプル追跡およびジオフェンスアプリケーション - Amazon Location Service

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

Android 用のサンプル追跡およびジオフェンスアプリケーション

このトピックでは、モバイルアプリケーションで Amazon Location ジオフェンスとトラッカーを使用する主な機能を示すために設計された Android チュートリアルについて説明します。アプリケーションは、トラッカーとジオンフェンスが Lambda AWS IoT と Amazon Location の機能を組み合わせてどのように相互作用するかを示します。

アプリケーションの Amazon Location リソースを作成する

開始するには、必要な Amazon Location リソースを作成する必要があります。これらのリソースは、アプリケーションの機能や提供されたコードスニペットの実行に不可欠です。

注記

AWS アカウントを作成していない場合は、AWS アカウント管理ユーザーガイドの指示に従ってください。

開始するには、Amazon Cognito ID プール ID を作成する必要があります。次の手順を使用します。

  1. Amazon Cognito コンソールを開き、左側のメニューからアイデンティティプールを選択し、アイデンティティプールの作成を選択します

  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 コンソールでマップセクションを開きます。

  2. トラッカーを作成を選択します。

  3. 必須フィールドに入力します。トラッカーの名前は、このチュートリアル全体で繰り返されるため、書き留めておきます。

  4. 位置フィルタリング フィールドで、トラッカーリソースの使用方法に最も適したオプションを選択します。位置フィルタリングを設定しない場合、デフォルト設定は ですTimeBased。詳細については、「Amazon Location API リファレンス」の「トラッカーPositionFiltering」、「」を参照してください。

  5. トラッカーの作成を選択して、トラッカーの作成を完了します。

ジオフェンスコレクションを作成する

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

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

    1. Amazon Location コンソールのジオフェンスコレクションセクションを開きます。

    2. [ジオフェンスコレクションの作成] を選択します。

    3. コレクションの名前と説明を入力します。

    4. をターゲット Amazon CloudWatch とする EventBridge ルールでは、オプションの EventBridge ルールを作成して、ジオフェンスイベントへの対応を開始できます。これにより、Amazon Location は にイベントを発行できます Amazon CloudWatch Logs。

    5. ジオフェンスコレクションの作成を押して、コレクションの作成を完了します。

  • Amazon Location API を使用してジオフェンスコレクションを作成します。

    Amazon Location Geofences API の CreateGeofenceCollectionオペレーションを使用します。 APIs 次の例では、 API リクエストを使用して、 というジオフェンスコレクションを作成しますGEOCOLLECTION_NAME

    POST /geofencing/v0/collections Content-type: application/json { "CollectionName": "GEOCOLLECTION_NAME", "Description": "Geofence collection 1 for shopping center", "Tags": { "Tag1" : "Value1" } }
  • AWS CLI コマンドを使用してジオフェンスコレクションを作成します。

    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 Location コンソールを開きます。

  2. 左のナビゲーションペインから、[トラッカー] を選択します。

  3. Device Trackers で、ターゲットトラッカーの名前リンクを選択します。

  4. [リンクされたジオフェンスコレクション] で [ジオフェンスコレクションをリンク] を選択します。

  5. [リンクされたジオフェンスコレクション] ウィンドウのドロップダウンメニューからジオフェンスコレクションを選択します。

  6. [Link (リンク)] を選択します。

  7. トラッカーリソースをリンクすると、そのリソースには[アクティブ] ステータスが割り当てられます。

Amazon Location APIs。

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"

MQTT での AWS Lambda の使用

AWS IoT と Amazon Location 間の接続を作成するには、 EventBridge CloudWatch イベントによって転送されるメッセージを処理するための Lambda 関数が必要です。この関数は、位置データを抽出し、Amazon Location 用にフォーマットして、Amazon Location Tracker 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. デプロイを押して、更新された関数を保存します。

  9. 次に、設定タブを開きます。

  10. トリガー セクションで、トリガーを追加 ボタンを押します。

  11. ソースフィールドで EventBridge (CloudWatch イベント) を選択します。

  12. 既存のルールオプションを選択します。

  13. ルール名を入力します。例: AmazonLocationMonitor-GEOFENCECOLLECTION_NAME

  14. 追加ボタンを押します。

  15. これにより、アクセス許可タブにリソースベースのポリシーステートメントもアタッチされます。

次に、 を使用して MQTT テストクライアントをセットアップします。次の手順 AWS IoTを使用します。

  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. 作成ボタンを選択して終了します。

前の手順を完了したら、次のようにゲストロールのアクセス許可を更新します。

  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. https://github.com/aws-geospatial/amazon-location-samples-android/tree/main/ tracking-with-geofence-notificationsというリポジトリをローカルマシンにクローンします。

  2. Android Studio でAmazonSampleSDKAppプロジェクトを開きます。

  3. Android デバイスまたはエミュレータでアプリを構築して実行します。

サンプルアプリケーションの使用

サンプルを使用するには、次の手順に従います。

  • を作成しますcustom.properties

    custom.properties ファイルを設定するには、次の手順に従います。

    1. 任意のテキストエディタまたは IDE を開きます。

    2. 新しいファイルを作成します。

    3. 次に、custom.properties という名前でファイルを保存します。

    4. を次のコードサンプルcustom.propertiesで更新し、MQTT_END_POINTPOLICY_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. 必要に応じて時間と距離のフィルターを更新します。

  • 追跡オペレーション:

    追跡画面を開き、以下を実行します。

    • それぞれのボタンを押して、フォアグラウンド、バックグラウンド、またはバッテリーセーバーモードで追跡を開始および停止できます。