Google Cloud で ARCore API を使用する

プラットフォームを選択:

Geospatial APICloud Anchors などの ARCore 機能では、Google Cloud でホストされている ARCore API を使用します。これらの機能を使用する場合、アプリは認証情報を使用して ARCore API サービスにアクセスします。

このクイックスタートでは、Google Cloud でホストされている ARCore API サービスと通信できるようにアプリケーションを設定する方法について説明します。

新しい Google Cloud プロジェクトを作成するか、既存のプロジェクトを使用します

既存のプロジェクトがある場合は、それを選択します。

プロジェクト セレクタに移動

既存の Google Cloud プロジェクトがない場合は、1 つ作成します。

新しいプロジェクトを作成

ARCore API を有効にする

ARCore API を使用するには、プロジェクトで ARCore API を有効にする必要があります。

ARCore API を有効にする

認証方法を設定する

Unity アプリは、2 つの異なる認証方法(推奨のキーなし認証と API キー認証)を使用して、ARCore API と通信できます。

  • Android では、キーなしの承認はアプリのパッケージ名と署名鍵のフィンガープリントの組み合わせを使用して、アプリを認可します。

    iOS では、キーなし承認は署名されたトークンを使用して API へのアクセスを制御します。このメソッドでは、トークンに署名し、API へのアクセスを制御するために、ユーザーが所有するサーバーが必要です。

  • API キーは、Google Cloud プロジェクトを識別する文字列です。API キーは、クライアントからアクセスされることが多いため、安全とはみなされません。ARCore API と通信するには、キーなし認証の使用を検討してください。

キーレス

キーなし認証を使用してアプリを承認するには、OAuth 2.0 クライアント ID を作成します。

署名鍵フィンガープリントを決定する

OAuth 2.0 クライアント ID は、アプリの署名鍵フィンガープリントを使用してアプリを識別します。

デバッグ用の署名のフィンガープリントを取得する方法

Android SDK Tools は、プロジェクトを実行またはデバッグする際に、生成されたデバッグ証明書を使用してアプリを自動的に署名します。

デバッグ証明書のフィンガープリントを取得するには、次のコマンドを使用します。

Mac/Linux
keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
Windows
keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

keytool ユーティリティによって、キーストアのパスワードを入力するよう求められます。デバッグ キーストアのデフォルト パスワードは android です。次に、keytool ユーティリティによってフィンガープリントがターミナルに出力されます。次に例を示します。

   Certificate fingerprint: SHA1: <strong>DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09

キーストアから署名フィンガープリントを取得する方法

キーストア ファイルがある場合は、keytool ユーティリティを使用してフィンガープリントを特定します。

keytool -list -v -alias your-key-name -keystore path-to-production-keystore

keytool ユーティリティはフィンガープリントをターミナルに出力します。次に例を示します。

   Certificate fingerprint: SHA1: DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09

Play アプリ署名からアプリの署名鍵を取得する方法

Play アプリ署名を使用する場合、Google はアプリの署名鍵を管理し、それを使用して APK の署名を行います。この鍵を署名フィンガープリントに使用します。

  1. Google Play Console の [アプリ署名] ページで、[アプリ署名鍵の証明書] までスクロールします。
  2. SHA-1 証明書フィンガープリントを使用します。

OAuth 2.0 クライアント ID を作成する

前の手順で示した該当する署名鍵ごとに、Google Cloud プロジェクトの認証情報に OAuth 2.0 クライアント ID を作成します。

  • Google Cloud で [認証情報] ページを開きます。

    クルデンシャル

  • [認証情報を作成] をクリックし、メニューから [OAuth クライアント ID] を選択します。

  • 以下の必須項目に情報を入力します。

    • Application type: [Android] を選択します。
    • パッケージ名: AndroidManifest.xml で宣言されているパッケージ名を使用します。
    • SHA-1 証明書フィンガープリント: 前の手順で取得したフィンガープリントを使用します。
  • [作成] をクリックします。

必要なライブラリを追加する

  1. アプリの依存関係に com.google.android.gms:play-services-auth:16+ を含めます。
  2. コードの圧縮を使用している場合は、アプリの build.gradle ファイルに追加します。

    buildTypes {
      release {
        ...
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
      }
    }
    
  3. アプリの proguard-rules.pro ファイルに次の行を追加します。

    -keep class com.google.android.gms.common.** { *; }
    -keep class com.google.android.gms.location.** { *; }
    -keep class com.google.android.gms.auth.** { *; }
    -keep class com.google.android.gms.tasks.** { *; }
    

これで、アプリはキーなし認証を使用するように構成されました。

キーレス

ARCore は、JSON ウェブトークンを使用した iOS での API 呼び出しの承認をサポートしています。トークンは Google サービス アカウントによって署名されている必要があります。

iOS 用のトークンを生成するには、次の要件を満たすエンドポイントがサーバー上になければなりません。

  • 独自の認可メカニズムでエンドポイントを保護する必要があります。

  • エンドポイントは、次のように新しいトークンを毎回生成する必要があります。

    • 各ユーザーは一意のトークンを取得します。
    • トークンはすぐには期限切れになりません。

サービス アカウントと署名鍵を作成する

Google サービス アカウントと署名鍵を作成する手順は次のとおりです。

  1. Google Cloud で [認証情報] ページを開きます。
    認証情報
  2. [認証情報を作成] > [サービス アカウント] をクリックします。
  3. [サービス アカウントの詳細] で新しいアカウントの名前を入力し、[作成] をクリックします。
  4. [サービス アカウントの権限] ページで、[ロールを選択] プルダウンに移動します。[Service Accounts] > [サービス アカウント トークン作成者] を選択し、[続行] をクリックします。
  5. [ユーザーにこのサービス アカウントへのアクセスを許可] ページで、[完了] をクリックします。
  6. [認証情報] ページで [サービス アカウント] セクションを見つけ、作成したアカウントの名前をクリックします。
  7. [サービス アカウントの詳細] ページで、[キー] セクションまで下にスクロールし、[鍵を追加] > [新しいキーを作成] を選択します。
  8. 鍵のタイプとして [JSON] を選択し、[作成] をクリックします。

    これにより、秘密鍵を含む JSON ファイルがマシンにダウンロードされます。ダウンロードした JSON キーファイルは、安全な場所に保存します。

サーバーでトークンを作成する

サーバーに新しいトークン(JWT)を作成するには、標準 JWT ライブラリと、新しいサービス アカウントから安全にダウンロードした JSON ファイルを使用します。

開発マシンでトークンを作成する

開発マシンで JWT を生成するには、次の oauth2l コマンドを使用します。

oauth2l fetch --cache "" --jwt --json $KEYFILE --audience "https://arcore.googleapis.com/"

毎回異なるトークンが生成されるようにするには、--cache フラグを使用して空のキャッシュの場所を指定する必要があります。結果の文字列は必ずカットしてください。余分なスペースや改行文字があると、API はトークンを拒否します

トークンに署名する

RS256 アルゴリズムと次のクレームを使用して、JWT に署名する必要があります。

  • iss - サービス アカウントのメールアドレス。
  • sub - サービス アカウントのメールアドレス。
  • iat - トークンが生成された Unix エポック時刻(秒単位)。
  • exp - iat + 3600(1 時間)。トークンが期限切れになる Unix エポック時間(秒単位)。
  • aud - オーディエンス。https://arcore.googleapis.com/設定する必要があります

非標準クレームは JWT ペイロードには必要ありませんが、uid クレームは対応するユーザーの特定に役立ちます。

Google が管理する環境で Google API を使用するなど、別の方法で JWT を生成する場合は、このセクションのクレームで JWT に署名してください。何よりも、オーディエンスが正しいことを確認してください。

ARCore セッションでトークンを渡す

  1. [iOS 認証戦略] が AuthenticationToken に設定されていることを確認します。Unity で、[Edit] > [Project Settings] > [XR Plug-in Management] > [ARCore Extensions] に移動します。[iOS 認証戦略] プルダウン メニューで、[認証トークン] オプションを選択します。
  2. トークンを取得したら、ARAnchorManager.SetAuthToken() を使用して ARCore セッションに渡します。

    // Designate the token to authorize ARCore API calls
    // on the iOS platform. This should be called each time the application's token is refreshed.
    ARAnchorManager.SetAuthToken(authToken);
    

キーなし認証を使用するようにアプリが構成されました。

トークンをセッションに渡す場合は、次の点に注意してください。

  • API キーを使用してセッションを作成した場合、ARCore はトークンを無視してエラーをログに記録します。

    不要になった API キーを Google Developers Console で削除し、アプリから削除します。

  • ARCore は、スペースまたは特殊文字を含むトークンを無視します。

  • 通常、トークンの有効期限は 1 時間です。使用中にトークンが期限切れになる可能性がある場合は、新しいトークンを取得して API に渡します。

API キー

  1. Google Cloud で [認証情報] ページを開きます。
    認証情報
  2. [認証情報の作成] を選択し、メニューから [API キー] を選択します。
    [API キーを作成しました] ダイアログに、新しく作成されたキーの文字列が表示されます。
  3. Unity で、[Edit] > [Project Settings] > [XR Plug-in Management] > [ARCore Extensions] に移動します。ターゲット プラットフォーム(Android、iOS)ごとに、[認証戦略] プルダウン メニューで [API キー] オプションを選択します。次に、[API キー] フィールドに API キーを挿入します。

  4. API キーを保護する方法については、API キーの制限に関するドキュメントをご覧ください。

これで、API キーを使用するようにアプリが構成されました。

次のステップ

認可を構成したら、それを使用している次の ARCore 機能を確認します。