Place Autocomplete

プラットフォームを選択: Android iOS JavaScript ウェブサービス

Places SDK for Android の予測入力サービスは、 ユーザーの検索語句に応じて予測を行います。ユーザーが入力すると、 予測入力サービスは、お店やサービスなどの場所の候補を返します。 住所、plus code、 おすすめします。

次の方法でアプリにオートコンプリート機能を追加することができます。

予測入力ウィジェットを追加する

予測入力ウィジェットは、予測入力が組み込まれた検索ダイアログです 説明します。ユーザーが検索キーワードを入力すると、ウィジェットに 場所の候補が表示されます。ユーザーが選択すると、 Place 返されます。アプリはこれを使用して、 選択します。

オートコンプリート ウィジェットをアプリに追加する方法として、次の 2 つのオプションがあります。

オプション 1: AutocompleteSupportFragment を埋め込む

アプリに AutocompleteSupportFragment を追加する手順は次のとおりです。

  1. アクティビティの XML レイアウトにフラグメントを追加します。
  2. アクティビティまたはフラグメントにリスナーを追加します。

アクティビティに AutocompleteSupportFragment を追加する

アクティビティに AutocompleteSupportFragment を追加するには、新しいフラグメントを XML レイアウト。例:

<fragment android:id="@+id/autocomplete_fragment"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
  />
  • デフォルトでは、フラグメントに枠線や背景はありません。セキュリティの フラグメントを別のレイアウト内にネストする 要素 CardView
  • 予測入力フラグメントを使用していて、オーバーライドが必要な場合 onActivityResult を使用する場合は、super.onActivityResult を呼び出す必要があります。それ以外の場合は、 フラグメントが正しく機能しません。

PlaceSelectionListener をアクティビティに追加する

PlaceSelectionListener は、ユーザーのリクエストに応答して場所を返す処理を 選択します。次のコードは、フラグメントへの参照を作成し、 次のようにして、AutocompleteSupportFragment にリスナーを追加します。

Kotlin



    // Initialize the AutocompleteSupportFragment.
    val autocompleteFragment =
        supportFragmentManager.findFragmentById(R.id.autocomplete_fragment)
                as AutocompleteSupportFragment

    // Specify the types of place data to return.
    autocompleteFragment.setPlaceFields(listOf(Place.Field.ID, Place.Field.NAME))

    // Set up a PlaceSelectionListener to handle the response.
    autocompleteFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener {
        override fun onPlaceSelected(place: Place) {
            // TODO: Get info about the selected place.
            Log.i(TAG, "Place: ${place.name}, ${place.id}")
        }

        override fun onError(status: Status) {
            // TODO: Handle the error.
            Log.i(TAG, "An error occurred: $status")
        }
    })

      

Java


    // Initialize the AutocompleteSupportFragment.
    AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
            getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);

    // Specify the types of place data to return.
    autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));

    // Set up a PlaceSelectionListener to handle the response.
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(@NonNull Place place) {
            // TODO: Get info about the selected place.
            Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
        }


        @Override
        public void onError(@NonNull Status status) {
            // TODO: Handle the error.
            Log.i(TAG, "An error occurred: " + status);
        }
    });

      

方法 2: インテントを使用して予測入力アクティビティを起動する

アプリで別のナビゲーション フロー(たとえば、 検索フィールドではなくアイコンから予測入力エクスペリエンスをトリガーします)。 アプリでインテントを使用して予測入力を起動できます。

インテントを使用してオートコンプリート ウィジェットを起動するには、次の手順を実行します。

  1. Autocomplete.IntentBuilder を使用する インテントを作成し、目的の Autocomplete モードを渡します。
  2. アクティビティ結果ランチャーを定義する registerForActivityResult インテントを起動してユーザーが選択した場所を処理するために使用できる 表示されます。

予測入力インテントを作成する

以下の例では、 Autocomplete.IntentBuilder 次のようにして、予測入力ウィジェットをインテントとして起動するインテントを作成します。

Kotlin




    // Set the fields to specify which types of place data to
    // return after the user has made a selection.
    val fields = listOf(Place.Field.ID, Place.Field.NAME)

    // Start the autocomplete intent.
    val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
        .build(this)
    startAutocomplete.launch(intent)

      

Java



    // Set the fields to specify which types of place data to
    // return after the user has made a selection.
    List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME);

    // Start the autocomplete intent.
    Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
            .build(this);
    startAutocomplete.launch(intent);

      

インテントを使用して予測入力ウィジェットを起動する場合、以下から選択できます。 全画面モードを使用できます。次のスクリーンショットは、 それぞれ以下のようになります。

<ph type="x-smartling-placeholder">
</ph> オーバーレイ モードでは、予測入力ウィジェットが呼び出し元の UI の上に重ねて表示されます。
図 1: オーバーレイ モードの予測入力ウィジェット
<ph type="x-smartling-placeholder">
</ph> 予測入力ウィジェットを全画面モードに表示すると、画面全体に表示されます。
図 2: FULLSCREEN モードの予測入力ウィジェット

インテントの結果に対するコールバックを登録する

ユーザーが場所を選択したときに通知を受け取るには、 registerForActivityResult() ランチャー。アクティビティを起動し、 結果を出力できますユーザーが予測を選択した場合は、 結果オブジェクトに含まれるインテントで提供されます。このインテントは Autocomplete.IntentBuilder によってビルドされた、メソッド Autocomplete.getPlaceFromIntent() は、そこからプレイス オブジェクトを抽出できます。

Kotlin



private val startAutocomplete =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK) {
            val intent = result.data
            if (intent != null) {
                val place = Autocomplete.getPlaceFromIntent(intent)
                Log.i(
                    TAG, "Place: ${place.name}, ${place.id}"
                )
            }
        } else if (result.resultCode == Activity.RESULT_CANCELED) {
            // The user canceled the operation.
            Log.i(TAG, "User canceled autocomplete")
        }
    }

      

Java


private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == Activity.RESULT_OK) {
                Intent intent = result.getData();
                if (intent != null) {
                    Place place = Autocomplete.getPlaceFromIntent(intent);
                    Log.i(TAG, "Place: ${place.getName()}, ${place.getId()}");
                }
            } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                // The user canceled the operation.
                Log.i(TAG, "User canceled autocomplete");
            }
        });

      

プログラムで場所の予測を取得する

カスタム検索 UI を、 予測入力ウィジェットですそのためには、アプリで場所の候補を取得する必要があります。 できます。アプリは、予測される場所の名前や場所のリストを取得できます。 予測入力 API から PlacesClient.findAutocompletePredictions() 渡す FindAutocompletePredictionsRequest 次のパラメータを使用してオブジェクトを作成します。

  • 必須: ユーザーが入力したテキストを含む query 文字列。
  • 推奨: A AutocompleteSessionToken、 これは、ユーザー検索のクエリフェーズと選択フェーズを、 請求に使用されますユーザーが入力を開始するとセッションが開始されます 場所が選択されると終了します
  • 推奨: RectangularBounds このオブジェクトは、緯度と経度の範囲を指定して、 受信します
  • 省略可: 2 文字の国(複数可) コード(ISO 3166-1 Alpha-2)は、検索結果を表示する国(複数可)を示します。 制限されています。
  • 省略可: A TypeFilter、 これを使用すると、指定した場所のタイプに結果を絞り込むことができます。「 次の場所タイプがサポートされています。

    • TypeFilter.GEOCODE - ジオコーディングの結果のみを返します。 あります。この要求を使用して、指定された 場所は不確定である可能性があります。
    • TypeFilter.ADDRESS - 特定の属性を持つ予測入力の結果のみを返します。 正確な住所を表示します。このタイプは、ユーザーが目的のものを探していることがわかっている場合に使用します。 完全な住所のみを指定します。
    • TypeFilter.ESTABLISHMENT - 次の条件に当てはまる場所のみを返します。 あります。
    • TypeFilter.REGIONS - 次のいずれかに一致する場所のみを返します。 次のタイプがあります。

    • LOCALITY

    • SUBLOCALITY

    • POSTAL_CODE

    • COUNTRY

    • ADMINISTRATIVE_AREA_LEVEL_1

    • ADMINISTRATIVE_AREA_LEVEL_2

    • TypeFilter.CITIES - LOCALITY または ADMINISTRATIVE_AREA_LEVEL_3

  • 省略可: リクエストの送信元の場所を指定する LatLng。 発信したとき setOrigin() サービスは、指定された地点からメートル単位の距離(distanceMeters)を返します。 レスポンスに含まれる各予測入力予測に対して、送信元が 1 つずつ存在します。

場所のタイプについて詳しくは、場所に関するガイド あります

以下の例は、API 呼び出しの完全な呼び出しを示しています。 PlacesClient.findAutocompletePredictions()

Kotlin



    // Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
    // and once again when the user makes a selection (for example when calling fetchPlace()).
    val token = AutocompleteSessionToken.newInstance()

    // Create a RectangularBounds object.
    val bounds = RectangularBounds.newInstance(
        LatLng(-33.880490, 151.184363),
        LatLng(-33.858754, 151.229596)
    )
    // Use the builder to create a FindAutocompletePredictionsRequest.
    val request =
        FindAutocompletePredictionsRequest.builder()
            // Call either setLocationBias() OR setLocationRestriction().
            .setLocationBias(bounds)
            //.setLocationRestriction(bounds)
            .setOrigin(LatLng(-33.8749937, 151.2041382))
            .setCountries("AU", "NZ")
            .setTypesFilter(listOf(PlaceTypes.ADDRESS))
            .setSessionToken(token)
            .setQuery(query)
            .build()
    placesClient.findAutocompletePredictions(request)
        .addOnSuccessListener { response: FindAutocompletePredictionsResponse ->
            for (prediction in response.autocompletePredictions) {
                Log.i(TAG, prediction.placeId)
                Log.i(TAG, prediction.getPrimaryText(null).toString())
            }
        }.addOnFailureListener { exception: Exception? ->
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
            }
        }

      

Java


    // Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
    // and once again when the user makes a selection (for example when calling fetchPlace()).
    AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();

    // Create a RectangularBounds object.
    RectangularBounds bounds = RectangularBounds.newInstance(
            new LatLng(-33.880490, 151.184363),
            new LatLng(-33.858754, 151.229596));
    // Use the builder to create a FindAutocompletePredictionsRequest.
    FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
            // Call either setLocationBias() OR setLocationRestriction().
            .setLocationBias(bounds)
            //.setLocationRestriction(bounds)
            .setOrigin(new LatLng(-33.8749937, 151.2041382))
            .setCountries("AU", "NZ")
            .setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS))
            .setSessionToken(token)
            .setQuery(query)
            .build();

    placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> {
        for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
            Log.i(TAG, prediction.getPlaceId());
            Log.i(TAG, prediction.getPrimaryText(null).toString());
        }
    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException) {
            ApiException apiException = (ApiException) exception;
            Log.e(TAG, "Place not found: " + apiException.getStatusCode());
        }
    });

      

API は FindAutocompletePredictionsResponseTaskFindAutocompletePredictionsResponse 含まれる AutocompletePrediction 予測された場所を表すオブジェクトです。見つからない場合、このリストは空になります。 既知の場所が返されます。

予測された場所ごとに、次のメソッドを呼び出して場所を取得できます。 詳細:

  • getFullText(CharacterStyle) は、場所の説明の全文を返します。これは次の組み合わせです: テキストを入力します例: 「エッフェル塔、アベニュー アナトール フランス、 Paris, France」など)。また、この方法では、 選択したスタイルで検索と一致する説明を CharacterStyleCharacterStyle パラメータは省略可能です。指定しない場合は null に設定します。 強調する必要があります
  • getPrimaryText(CharacterStyle) は、場所を説明するメインのテキストを返します。これは通常 できます。例: 「エッフェル塔」、「ピット通り 123」
  • getSecondaryText(CharacterStyle) は、場所の説明の子会社のテキストを返します。これは たとえば、予測入力候補を表示するときに 2 行目として表示されます。例: 「Avenue Anatole France, Paris, France」、「Sydney, New South Wales」。
  • getPlaceId() 予測される場所のプレイス ID を返します。プレイス ID はテキスト プレイスを一意に識別する ID です。この ID を使用して、 Place 後ほど説明します。プレイス ID について詳しくは、 Places SDK for Android の詳細については、プレイス SDK for Android 詳細。一般的な 詳細情報については、プレイス ID 概要をご覧ください。
  • getPlaceTypes() この場所に関連付けられている場所タイプのリストを返します。
  • getDistanceMeters() この場所と場所の間の直線距離をメートル単位で返します。 リクエストで指定されたオリジン。
で確認できます。 <ph type="x-smartling-placeholder">

セッション トークン

セッション トークンは、ユーザーの予測入力のクエリフェーズと選択フェーズをグループ化します 請求のために個別のセッションを検索するセッションは ユーザーが検索語句の入力を開始し、場所を選択すると完了する。セッションごと には複数のクエリを記述し、その後に 1 つの場所を選択します。セッションが トークンが無効になった場合。新しいトークンを生成する必要があります。 獲得できますすべてのプログラマティック取引では 予測入力セッション(フラグメントを埋め込んだ場合、または API が自動的に処理します)。

Places SDK for Android では、 AutocompleteSessionToken 各セッションを特定しますアプリは新しいセッション トークンを 新しいセッションを開始するたびに、同じトークンを場所 ID とともに渡します。 後続の呼び出しは fetchPlace() ユーザーが選択した場所の Place Details を取得する。

セッションの詳細 トークン

予測入力の結果を制限する

予測入力の結果を特定の地域に制限できます。 結果を 1 つ以上の場所のタイプ、または最大 5 つの国にフィルタできます。マイページ 予測入力アクティビティにこれらの制約を適用できます。 AutocompleteSupportFragment、プログラマティック予測入力 API。

結果を制約する手順は次のとおりです。

  • 指定した地域内の結果を優先するには、setLocationBias() を呼び出します。 (規定の地域外からの検索結果が返されることもあります)。
  • 指定した地域内の結果のみを表示するには、次の関数を呼び出します。 setLocationRestriction()(定義したリージョン内の結果のみが あります)。
  • 特定の場所のタイプに応じた結果のみを返すには、次を呼び出します。 setTypesFilter()(たとえば、TypeFilter.ADDRESS を指定すると、 正確な住所のみの検索結果のみが表示されます。
  • 最大 5 つの国を指定して検索結果のみを返すには、次を呼び出します。 setCountries()。国は 2 文字の ISO 3166-1 で渡す必要があります Alpha-2 対応の国 提供します

特定の地域に対する結果にバイアスをかける

予測入力の結果を特定の地域に限定するには、 setLocationBias()RectangularBounds。 次のコード例は、フラグメントでの setLocationBias() の呼び出しを示しています。 インスタンスを使って、予測入力の候補にオーストラリアのシドニーの地域を優先的に設定しています。

Kotlin



    autocompleteFragment.setLocationBias(
        RectangularBounds.newInstance(
            LatLng(-33.880490, 151.184363),
            LatLng(-33.858754, 151.229596)
        )
    )

      

Java


    autocompleteFragment.setLocationBias(RectangularBounds.newInstance(
            new LatLng(-33.880490, 151.184363),
            new LatLng(-33.858754, 151.229596)));

      

検索結果を特定の地域に制限する

予測入力の結果を特定の地域に制限するには、 setLocationRestriction()RectangularBounds。 次のコード例は、setLocationRestriction() を フラグメント インスタンスで予測入力の候補をシドニー地域に限定し、 オーストラリア、

Kotlin



    autocompleteFragment.setLocationRestriction(
        RectangularBounds.newInstance(
            LatLng(-33.880490, 151.184363),
            LatLng(-33.858754, 151.229596)
        )
    )

      

Java


    autocompleteFragment.setLocationRestriction(RectangularBounds.newInstance(
            new LatLng(-33.880490, 151.184363),
            new LatLng(-33.858754, 151.229596)));

      

注: この制限はルート全体(合成結果)にのみ適用されます。 境界の外側にあるルートは、指定されたルートに基づいて 地域制限と重複しています。

場所タイプまたはタイプ コレクションで結果をフィルタする

予測入力リクエストに対して返される結果を、特定の文字列のみを返すように制限できます。 特定します場所タイプまたはタイプ コレクションを使用してフィルタを指定します プレイスタイプの表 1、2、3 に記載されているリスト。何も指定されていない場合 すべてのタイプが返されます。

予測入力の結果をフィルタするには、 setTypesFilter() フィルタを設定します。

タイプまたはタイプ コレクション フィルタを指定するには:

  • setTypesFilter() を呼び出し、表 1 から最大 5 つの type 値を指定します。 プレイスタイプの表 2 を参照してください。type の値は、 次の定数で定義されます。 PlaceTypes

  • setTypesFilter() を呼び出し、表示された表 3 の型コレクションを指定します。 プレイスタイプ。コレクション値は 定数を PlaceTypes

    リクエストでは、表 3 のタイプのうち、1 つのみが許可されます。Pod の 表 1 または表 2 の値は指定できません。条件 エラーが発生します。

次のコード例は、setTypesFilter()AutocompleteSupportFragment で、複数の型の値を指定します。

Kotlin



    autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))

      

Java


    autocompleteFragment.setTypesFilter(Arrays.asList("landmark", "restaurant", "store"));

      

次のコード例は、setTypesFilter()AutocompleteSupportFragment で、次の値が含まれる結果のみを返すフィルタを設定します。 タイプコレクションを指定して正確な住所を取得できます。

Kotlin



    autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))

      

Java


    autocompleteFragment.setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS, PlaceTypes.ESTABLISHMENT));

      

次のコード例は、setTypesFilter()IntentBuilder: 正確な住所が含まれる検索結果のみを返すフィルタを設定します。 型コレクションを指定します。

Kotlin



    val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
        .setTypesFilter(listOf(PlaceTypes.ADDRESS))
        .build(this)

      

Java


    Intent intent = new Autocomplete.IntentBuilder(
            AutocompleteActivityMode.FULLSCREEN, fields)
            .setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS))
            .build(this);

      

国で結果をフィルタする

予測入力の結果を最大 5 か国までフィルタするには、 setCountries() 国コードを設定します。 次に、フィルタをフラグメントまたはインテントに渡します。国は 2 文字の ISO 3166-1 Alpha-2 互換国 提供します

次のコード例は、setCountries()AutocompleteSupportFragment: 国によって異なります。

Kotlin



    autocompleteFragment.setCountries("AU", "NZ")

      

Java


    autocompleteFragment.setCountries("AU", "NZ");

      

使用量上限

お客様による Places API(Places SDK for Android を含む)の利用: 1 日あたりのリクエスト数(QPD)の制限がなくなりました。ただし、 以下の使用量上限が引き続き適用されます。

  • レート制限は 6,000 QPM(1 分あたりのリクエスト数)です。内容 すべてのリクエストに対するクライアントサイドとサーバーサイドのリクエストを 複数のアプリケーションにアクセスすることができます。

アプリに属性を表示する

  • アプリで予測入力サービスをプログラマティックに使用する場合は、UI で 画面に「Powered by Google」またはスペース内で Google ブランドの地図。
  • アプリで予測入力ウィジェットを使用している場合は、特にご対応いただく必要はありません (必要な帰属表示がデフォルトで表示されます)。
  • 場所を指定する ID、 サードパーティの属性も表示する必要があります。

詳細については、このモジュールのコースリソースに アトリビューション

Place Autocomplete の最適化

このセクションでは、Place Autocomplete サービスを最大限に活用するためのヒントを紹介します。

概要は次のとおりです。

  • 機能的なユーザー インターフェースを最も手早く作成するには、Maps JavaScript API Autocomplete ウィジェット、Places SDK for Android Autocomplete ウィジェット、または Places SDK for iOS Autocomplete UI コントロールを使用します。
  • Place Autocomplete のデータ フィールドの基本を理解します。
  • 位置情報のバイアスと位置情報の制限のフィールドは省略可能ですが、予測入力のパフォーマンスに大きく影響する場合があります。
  • エラー処理を使用して、API がエラーを返した場合に、アプリでグレースフル デグラデーションが行われるようにします。
  • アプリでは、選択肢がない場合でもユーザーが操作を続行できるようにします。

費用の最適化に関するヒント

基本的な費用の最適化

Place Autocomplete サービスの費用を最適化するには、Place Details と Place Autocomplete ウィジェットのフィールド マスクを使用して、必要な場所のデータ フィールドのみを返すよう設定します。

高度な費用の最適化

リクエストあたりの料金設定を利用し、Place Details の代わりに選択された場所に関する Geocoding API の結果をリクエストするためには、Place Autocomplete のプログラマティック実装を行うことをおすすめします。次の両方に該当する場合は、リクエストあたりの料金設定と Geocoding API を組み合わせた方が、セッションあたり(セッション ベース)の料金設定よりも費用対効果が高くなります。

  • ユーザーが選択した場所の緯度 / 経度または住所のみが必要な場合。その場合は、Geocoding API の方が、Place Details の呼び出しよりも少ないコストでこの情報を提供できます。
  • ユーザーが予測結果を選択するまでの予測入力候補リクエストの回数が、平均 4 回以下の場合。その場合は、リクエストあたりの料金設定の方がセッションあたりの料金設定よりも費用対効果が高くなります。
ニーズに合った Place Autocomplete 実装を選ぶ際は、次の質問に対する答えを考え、それに対応するタブを選択するとヒントが表示されます。

アプリケーションで、選択された予測結果の住所と緯度 / 経度以外の情報が必要ですか?

はい。その他の情報も必要です

セッション ベースの Place Autocomplete と Place Details を併用します。
アプリケーションで、場所の名前、お店やサービスのステータス、始業時間などの Place Details が必要になるため、Place Autocomplete 実装では、セッション トークン(プログラマティック実装か、JavaScriptAndroid、または iOS ウィジェットへの組み込み)を使用することをおすすめします。合計では、セッションあたり 0.017 ドルに加え、リクエストするデータ フィールドに応じた対象のプレイスデータ SKU の費用がかかります。1

ウィジェット実装
セッション管理が JavaScriptAndroid、または iOS ウィジェットに自動的に組み込まれます。これには、選択された予測結果での Place Autocomplete リクエストと Place Details リクエストの両方が含まれます。必要なプレイスデータ フィールドのみをリクエストするように、必ず fields パラメータを指定してください。

プログラマティック実装
Place Autocomplete リクエストでセッション トークンを使用します。選択された予測結果に関する Place Details をリクエストする際は、次のパラメータを含めます。

  1. Place Autocomplete レスポンスのプレイス ID
  2. Place Autocomplete リクエストで使用されるセッション トークン
  3. 必要な場所のデータ フィールドを指定する fields パラメータ

いいえ。住所と場所のみが必要です

Place Autocomplete 使用時のパフォーマンスによっては、アプリケーションで Places Details を使用するよりも、Geocoding API を使用した方が費用対効果が高くなる場合があります。アプリケーションの予測入力の効率は、ユーザーの入力内容や、アプリケーションが使用される場所、パフォーマンス最適化のベスト プラクティスが導入されているかどうかによって変わります。

次の質問に答えるためには、ユーザーがアプリケーション内で Place Autocomplete の予測を選択するまでに、平均でどのくらいの文字数を入力するのかを分析する必要があります。

ユーザーが Place Autocomplete の予測を選択するまでに実行されるリクエスト数は、平均で 4 回以下ですか?

はい

セッション トークンを使用せずにプログラムによって Place Autocomplete を実装し、選択された場所の予測で Geocoding API を呼び出します。
Geocoding API は、リクエスト 1 件につき 0.005 ドルで住所と緯度 / 経度の座標が提供されます。Place Autocomplete - Per Request のリクエスト 4 件の料金は 0.01132 ドルになるため、4 件のリクエストと、選択された場所予測に関する Geocoding API の呼び出しを合わせた料金は、0.01632 ドルになります。これは、Per Session Autocomplete でのセッション 1 回あたりの料金 0.017 ドルよりも少ないコストです。1

パフォーマンスに関するベスト プラクティスを導入し、できるだけ少ない入力文字数でユーザーが求める情報を提供できるようすることをおすすめします。

いいえ

セッション ベースの Place Autocomplete と Place Details を併用します。
ユーザーが Place Autocomplete の予測を選択するまでの平均リクエスト回数が、セッションあたりの料金を超えるため、Place Autocomplete 実装では、Place Autocomplete リクエストと、関連する Place Details リクエストの両方でセッション トークンを使用することをおすすめします(合計費用はセッションあたり 0.017 ドル)。1

ウィジェット実装
セッション管理が JavaScriptAndroid、または iOS ウィジェットに自動的に組み込まれます。これには、選択された予測結果での Place Autocomplete リクエストと Place Details リクエストの両方が含まれます。基本データ フィールドのみをリクエストするように、必ず fields パラメータを指定してください。

プログラマティック実装
Place Autocomplete リクエストでセッション トークンを使用します。選択された予測結果に関する Place Details をリクエストする際は、次のパラメータを含めます。

  1. Place Autocomplete レスポンスのプレイス ID
  2. Place Autocomplete リクエストで使用されるセッション トークン
  3. 住所やジオメトリなどの基本データ フィールドを指定する fields パラメータ

Place Autocomplete リクエストを遅らせることを検討する
ユーザーが最初の 3~4 文字を入力するまで Place Autocomplete リクエストを遅らせて、アプリケーションでのリクエスト数を減らすこともできます。たとえば、ユーザーが 3 文字目を入力してから、1 文字ごとに Place Autocomplete リクエストを行うとします。あるユーザーが、7 文字目を入力してから予測を選択し、Geocoding API リクエストが 1 回実行されました。この場合の合計費用は、0.01632 ドル(4 x Autocomplete Per Request 1 回の料金 0.00283 ドル + ジオコーディング 1 回の料金 0.005 ドル)となります。1

リクエストを遅らせることで、プログラマティック リクエストの回数を平均 4 回以下に抑えられる場合は、高パフォーマンスで Place Autocomplete と Geocoding API を併用する実装に関するガイダンスをご覧ください。なお、リクエストを遅らせると、1 文字入力するたびに予測が表示されはずと考えているユーザーには、遅延と受けとられる場合もあります。

パフォーマンスに関するベスト プラクティスを導入し、できるだけ少ない入力文字数でユーザーが求める情報を提供できるようすることをおすすめします。


  1. ここで提示されている料金は米ドルです。料金について詳しくは、Google Maps Platform の課金のページをご覧ください。

パフォーマンスに関するベスト プラクティス

Place Autocomplete のパフォーマンスを最適化するためのガイドラインは次のとおりです。

  • Place Autocomplete 実装に、国別のポリシー、場所のバイアス、言語設定(プログラマティック実装の場合)を追加します。ウィジェットはユーザーのブラウザやモバイル デバイスから言語設定を選択するため、ウィジェットでは言語設定は不要です。
  • Place Autocomplete が地図に関連付けられている場合は、地図のビューポートを基準に場所にバイアスをかけることができます。
  • ユーザーがいずれかの予測入力候補を選択しなかった場合は(通常は目的の住所が候補に挙がらなかったことが原因)、ユーザーの元の入力内容を再利用して、より関連性の高い結果を取得できます。
    • ユーザーが住所情報のみを入力することが予想される場合は、Geocoding API の呼び出しで、ユーザーの元の入力内容を再利用します。
    • ユーザーが特定の場所に関する検索語句(名前や住所)を入力することが予想される場合は、Find Place リクエストを使用します。特定の地域の結果のみが求められる場合は、場所のバイアスを使用します。
    Geocoding API へのフォールバックが最適となるその他のシナリオは次のとおりです。
    • 建物の棟の住所の Place Autocomplete サポートが不完全な国(チェコ、エストニア、リトアニアなど)で、ユーザーが建物の棟の住所を入力する場合。たとえば、チェコ語の住所「Stroupežnického 3191/17, Praha」では、Place Autocomplete で部分的な予測が生成されます。
    • ユーザーがニューヨークの「23-30 29th St, Queens」や、ハワイのカウアイ島の「47-380 Kamehameha Hwy, Kaneohe」など、道路区間のプレフィックスを入力する場合。

トラブルシューティング

さまざまなエラーが発生する可能性がありますが、ほとんどのエラーは 発生する可能性が高いのは、通常、構成エラー( 間違った API キーが使用されている、API キーが正しく設定されていないなど)、または割り当て エラー(アプリの割り当てを超過した)を示すエラー メッセージが返されます。使用方法をご覧ください。 上限 割り当てに関する情報を確認できます。

予測入力コントロールの使用中に発生したエラーは、 onActivityResult() コールバック。Autocomplete.getStatus() を呼び出してステータスを取得する 表示されます。