Geospatial API や Cloud Anchors などの ARCore の機能は、Google Cloud でホストされている ARCore API を使用します。これらの機能を使用する場合、アプリは認証情報を使用して ARCore API サービスにアクセスします。
このクイックスタートでは、Google Cloud でホストされている ARCore API サービスと通信できるようにアプリケーションを設定する方法について説明します。
新しい Google Cloud プロジェクトを作成するか、既存のプロジェクトを使用する
既存のプロジェクトがある場合は、そのプロジェクトを選択します。
既存の Google Cloud プロジェクトがない場合は、作成します。
ARCore API を有効にする
ARCore API を使用するには、プロジェクトで有効にする必要があります。
認証方法を設定する
Unity アプリケーションは、キーレス認証(推奨)と API キー認証の 2 つの異なる認証方法を使用して ARCore API と通信できます。
Android では、キーレス認証は、アプリケーションのパッケージ名と署名鍵のフィンガープリントの組み合わせを使用してアプリケーションを認証します。
iOS では、キーレス認証は署名付きトークンを使用して API へのアクセスを制御します。この方法では、トークンに署名して API へのアクセスを制御するために、ユーザーが所有するサーバーが必要です。
API キーは、Google Cloud プロジェクトを識別する文字列です。API キーは通常、クライアントからアクセス可能であるため、安全とはみなされません。キーレス認証を使用して ARCore API と通信することを検討してください。
キーレス
キーレス認証を使用してアプリを承認するには、OAuth 2.0 クライアント ID を作成します。
署名鍵のフィンガープリントを特定する
OAuth 2.0 クライアント ID は、アプリの署名鍵のフィンガープリントを使用してアプリを識別します。
デバッグ用の署名フィンガープリントを取得する方法
プロジェクトを実行またはデバッグすると、Android SDK ツールは生成されたデバッグ用証明書を使用して自動的にアプリに署名します。
デバッグ用証明書フィンガープリントを取得するには、次のコマンドを実行します。keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
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-keystorekeytool ユーティリティはフィンガープリントをターミナルに出力します。次に例を示します。
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 に署名します。この鍵は署名フィンガープリントに使用する必要があります。
- Google Play Console の [アプリの署名] ページで、[アプリ署名鍵の証明書] までスクロールします。
- SHA-1 証明書フィンガープリントを使用します。
OAuth 2.0 クライアント ID を作成する
前の手順で表示された署名鍵ごとに、Google Cloud プロジェクトの認証情報に OAuth 2.0 クライアント ID を作成します。
Google Cloud で、[認証情報] ページを開きます。
[認証情報を作成] をクリックし、メニューから [OAuth クライアント ID] を選択します。
必須フィールドに次のように入力します。
- アプリケーションの種類: [Android] を選択します。
- パッケージ名: AndroidManifest.xml で宣言されているパッケージ名を使用します。
- SHA-1 証明書フィンガープリント: 前の手順で取得したフィンガープリントを使用します。
[作成] を押します。
必要なライブラリを含める
- アプリの依存関係に
com.google.android.gms:play-services-auth:16+を含めます。 コードの最小化を使用している場合は、アプリの
build.gradleファイルに追加します。buildTypes { release { ... proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }アプリの
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 Web Token)を使用して iOS での API 呼び出しの認可をサポートしています。トークンは Google サービス アカウントによって署名されている必要があります。
iOS 用のトークンを生成するには、次の要件を満たすエンドポイントがサーバーに必要です。
独自の認可メカニズムでエンドポイントを保護する必要があります。
エンドポイントは、次のように毎回新しいトークンを生成する必要があります。
- ユーザーごとに一意のトークンが発行されます。
- トークンはすぐに期限切れになりません。
サービス アカウントと署名鍵を作成する
Google サービス アカウントと署名鍵を作成する手順は次のとおりです。
- Google Cloud で、[認証情報] ページを開きます。
認証情報 - [認証情報を作成] > [サービス アカウント] をクリックします。
- [サービス アカウントの詳細] で、新しいアカウントの名前を入力し、[作成] をクリックします。
- [サービス アカウントの権限] ページで、[ロールを選択] プルダウンに移動します。[サービス アカウント > サービス アカウント トークン作成者] を選択し、[続行] をクリックします。
- [ユーザーにこのサービス アカウントへのアクセスを許可する] ページで、[完了] をクリックします。
- [認証情報] ページで、[サービス アカウント] セクションを見つけて、作成したアカウントの名前をクリックします。
- [サービス アカウントの詳細] ページで、[キー] セクションまでスクロールし、[キーを追加 > 新しいキーを作成] を選択します。
鍵のタイプとして [JSON] を選択し、[作成] をクリックします。
これにより、秘密鍵を含む JSON ファイルがパソコンにダウンロードされます。ダウンロードした JSON キーファイルを安全な場所に保存します。
サーバーでトークンを作成する
サーバーで新しいトークン(JWT)を作成するには、標準の JWT ライブラリと、新しいサービス アカウントから安全にダウンロードした JSON ファイルを使用します。
開発マシンでトークンを作成する
開発マシンで JWT を生成するには、次の oauth2l コマンドを使用します。
oauth2l fetch --cache "" --jwt --json $KEYFILE --audience "https://arcore.googleapis.com/"
--cache フラグを使用して空のキャッシュの場所を指定することは、毎回異なるトークンが生成されるようにするために必要です。結果の文字列は必ずトリミングしてください。余分なスペースや改行文字があると、API がトークンを拒否します。
トークンに署名する
JWT に署名するには、RS256 アルゴリズムと次のクレームを使用する必要があります。
iss- サービス アカウントのメールアドレス。sub- サービス アカウントのメールアドレス。iat- トークンが生成された Unix エポック時間(秒単位)。exp-iat+3600(1 時間)。トークンの有効期限が切れる Unix エポック時刻(秒単位)。aud- オーディエンス。https://arcore.googleapis.com/に設定する必要があります。
非標準クレームは JWT ペイロードでは必須ではありませんが、uid クレームは対応するユーザーの識別に役立ちます。
Google マネージド環境で Google API を使用するなど、別の方法で JWT を生成する場合は、このセクションのクレームを使用して JWT に署名してください。何よりも、対象ユーザーが正しいことを確認してください。
ARCore セッションでトークンを渡す
- [iOS Authentication Strategy] が [AuthenticationToken] に設定されていることを確認します。Unity で、[Edit] > [Project Settings] > [XR Plug-in Management] > [ARCore Extensions] に移動します。[iOS Authentication Strategy] プルダウン メニューで、[Authentication Token] オプションを選択します。
トークンを取得したら、
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 キー
- Google Cloud で、[認証情報] ページを開きます。
認証情報 - [認証情報の作成] を選択し、メニューから [API キー] を選択します。
[API キーを作成しました] ダイアログに、新しく作成されたキーの文字列が表示されます。 Unity で、[Edit] > [Project Settings] > [XR Plug-in Management] > [ARCore Extensions] に移動します。ターゲット プラットフォーム(Android、iOS)ごとに、[認証戦略] プルダウン メニューで [API キー] オプションを選択します。次に、API キー フィールドに API キーを挿入します。
- API キーの制限に関するドキュメントを確認して、API キーを保護します。
これで、API キーを使用するようにアプリが構成されました。
次のステップ
承認が構成されたら、それを使用する次の ARCore 機能を確認します。