API キーを使用する

このトピックでは、Maps SDK for Android 用の API キーを作成してアプリに追加し、そのキーを制限することでアプリを保護する方法を説明します。この SDK を使うアプリには、API キーを必ず追加してください。

始める前に

Maps SDK for Android のご利用にあたっては、請求先アカウントと Maps SDK for Android が有効なプロジェクトが必要です。詳しくは、Cloud Console での設定をご覧ください。

API キーを作成する

API キーは、使用量を正確に集計して課金するため、プロジェクトに関連付けられたリクエストであることを認証する一意の識別子です。少なくとも 1 つの API キーをプロジェクトに関連付ける必要があります。

API キーを作成するには:

  1. [API とサービス] > [認証情報] を選択します。

    [認証情報] ページに移動

  2. [認証情報] ページで、[認証情報を作成] > [API キー] をクリックします。
    [API キーを作成しました] ダイアログで、新しく作成された API キーが表示されます。
  3. [閉じる] をクリックします。
    新しく作成した API キーが [認証情報] ページの [API キー] に表示されます。
    (本番環境で使用する前に、忘れずに API キーの使用を制限してください)。

アプリに API キーを追加する

このセクションでは、アプリで安全に参照されるように API キーを保存する方法を説明します。API キーは、バージョン管理システムにはチェックインせず、プロジェクトのルート ディレクトリにある local.properties ファイルに保存することをおすすめします。local.properties ファイルについて詳しくは、Gradle プロパティ ファイルをご覧ください。

このタスクを効率化するには、Android 用 Secrets Gradle プラグインを使用します。

プラグインをインストールして API キーを保存するには:

  1. Android Studio でアプリレベルの build.gradle ファイルを開き、次のコードを plugins 要素に追加します。
    id 'com.google.secrets_gradle_plugin' version '0.5'
        
  2. ファイルを保存して、プロジェクトを Gradle と同期します
  3. プロジェクト レベルのディレクトリで local.properties を開き、次のコードを追加します。YOUR_API_KEY を API キーに置き換えます。
    MAPS_API_KEY=YOUR_API_KEY
        
  4. ファイルを保存して、プロジェクトを Gradle と同期します。
  5. AndroidManifest.xml ファイルで com.google.android.geo.API_KEY に移動し、android:value attribute を次のように更新します。
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
        

注: 上記のように、com.google.android.geo.API_KEY は、API キーとして推奨されるメタデータ名です。この名前のキーは、Android プラットフォームで Google マップベースの複数の API(Maps SDK for Android など)の認証に使用できます。下位互換性を確保するため、API では com.google.android.maps.v2.API_KEY という名前もサポートされています。この従来の名前は、Android Maps API v2 の認証にのみ使用できます。アプリでは、API キーのメタデータ名を 1 つのみ指定できます。両方を指定すると、API から例外がスローされます。

API キーを制限する

API キーを制限し、許可したリクエストでのみ API キーが使用されるようにすることで、アプリケーションのセキュリティが向上します。以下の手順に沿って API キーの制限を設定することを強くおすすめします。詳しくは、API キーに関する推奨事項をご覧ください。

API キーを制限するには:

  1. [API とサービス] > [認証情報] を選択します。

    [認証情報] ページに移動

  2. 制限を設定する API キーを選択します。選択した API キーのプロパティ ページが表示されます。
  3. [キーの制限] で、次の制限を設定します。
    • アプリケーションの制限:
      1. [Android アプリ] を選択します。
      2. [+ パッケージ名とフィンガープリントを追加] をクリックします。
      3. パッケージ名と SHA-1 証明書のフィンガープリントを入力します。例:
        com.example.android.mapexample
        BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75
        詳しくは、SHA-1 フィンガープリントの取得をご覧ください。
    • API の制限:
      1. [キーを制限] をクリックします。
      2. [API を選択] プルダウンから [Maps SDK for Android] を選択します。
        Maps SDK for Android がリストに表示されない場合は、この SDK を有効にする必要があります。
  4. 変更が完了したら、[保存] をクリックします。

SHA-1 フィンガープリントを取得する

API キーを制限する際は、そのアプリケーションの署名に使われた署名鍵の SHA-1 証明書フィンガープリントを指定する必要があります。このフィンガープリントは、2 桁の 16 進数 20 個(コロンで区切り)で構成されるシーケンスです。証明書には次の 2 種類があります。

  • デバッグ用証明書: デバッグビルドを実行すると、Android SDK Tools でこの証明書が自動的に生成されます。この証明書は、テスト中のアプリでのみ使用してください。デバッグ用証明書で署名されたアプリは公開しないでください。
  • リリース証明書: リリースビルドを実行すると、Android SDK Tools でこの証明書が生成されます。この証明書は keytool プログラムを使って生成することもできます。この証明書は、アプリストアにアプリをリリースする準備ができたときに使用してください。
  • 次の手順に沿って、Keytool コマンドライン アプリを使用して SHA-1 フィンガープリントを表示します。

    デバッグ用証明書

    デバッグ用証明書のフィンガープリントを表示する

    1. デバッグ用のキーストア ファイルを見つけます。ファイル名は debug.keystore です。このファイルはプロジェクトを初めて構築するときに作成され、デフォルトでは、Android Virtual Device(AVD)ファイルと同じディレクトリに保存されます。

      • macOS と Linux: ~/.android/
      • Windows Vista、Windows 7: C:\Users\your_user_name\.android\
    2. SHA-1 フィンガープリントを一覧表示します。

      • Linux や macOS の場合は、ターミナル ウィンドウを開いて次のコマンドを入力します。

        keytool -list -v -keystore ~/.android/debug.keystore
         -alias androiddebugkey -storepass android -keypass android
      • Windows Vista と Windows 7 の場合は、次を実行します。

        keytool -list -v -keystore
         "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey
         -storepass android -keypass android

    出力は次のようになります。SHA1 で始まる行に、証明書の SHA-1 フィンガープリントが含まれています。

    Alias name: androiddebugkey
    Creation date: Jan 01, 2013
    Entry type: PrivateKeyEntry
    Certificate chain length: 1
    Certificate[1]:
    Owner: CN=Android Debug, O=Android, C=US
    Issuer: CN=Android Debug, O=Android, C=US
    Serial number: 4aa9b300
    Valid from: Mon Jan 01 08:04:04 UTC 2013 until: Mon Jan 01 18:04:04 PST 2033
    Certificate fingerprints:
         MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6A:AC:F9
         SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75
         Signature algorithm name: SHA1withRSA
         Version: 3
    
    リリース用証明書

    リリース用証明書のフィンガープリントを表示する

    1. リリース用証明書のキーストア ファイルを見つけます。リリース用キーストアには、デフォルトの保存場所や名前はありません。リリース対象のアプリを作成する際にキーストアを指定しなかった場合は、.apk が未署名のままになります。このため、アプリを公開するには事前に署名する必要があります。リリース用証明書では、証明書のエイリアスと、キーストアおよび証明書のパスワードも必要です。次を入力すると、キーストア内のすべてのキーのエイリアスが表示されます。

      keytool -list -keystore your_keystore_name

      your_keystore_name を、完全修飾されたパスとキーストアの名前(.keystore 拡張子を含む)に置き換えます。キーストアのパスワードが要求されます。パスワードを入力すると、keytool にキーストア内のすべてのエイリアスが表示されます。

    2. ターミナルまたはコマンド プロンプトで次を入力します。

      keytool -list -v -keystore your_keystore_name -alias your_alias_name

      your_keystore_name を、完全修飾されたパスとキーストアの名前(.keystore 拡張子を含む)に置き換えます。your_alias_name を、証明書の作成時に割り当てたエイリアスに置き換えます。

    出力は次のようになります。SHA1 で始まる行に、証明書の SHA-1 フィンガープリントが含まれています。

    Alias name: <alias_name>
    Creation date: Feb 02, 2013
    Entry type: PrivateKeyEntry
    Certificate chain length: 1
    Certificate[1]:
    Owner: CN=Android Debug, O=Android, C=US
    Issuer: CN=Android Debug, O=Android, C=US
    Serial number: 4cc9b300
    Valid from: Mon Feb 02 08:01:04 UTC 2013 until: Mon Feb 02 18:05:04 PST 2033
    Certificate fingerprints:
        MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6B:AC:F9
        SHA1: BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:90:AF:A1:66:6E:44:5D:75
        Signature algorithm name: SHA1withRSA
        Version: 3
    

    デジタル証明書について詳しくは、アプリへの署名に関するガイドをご覧ください。