このドキュメントでは、Android 版プライバシー サンドボックスを設定する際の一般的な問題の解決方法について説明します。このガイドにないエラーが表示された場合は、Google までお問い合わせください。
エラーがスローされる理由として考えられるものが複数ある場合もあります。以下は、一般的なエラーとその修正方法の一部を示しています。ただし、別の理由で同じエラー メッセージが表示される可能性もあります。
トラブルシューティングの前に
デバイス設定の更新を無効にする
プライバシー サンドボックスのテストで発生している問題をトラブルシューティングする場合、最初に行うべきことはデバイス設定の更新を無効にすることです。これにより、デバイスがサーバーから更新済みの設定を取得することを防止し、テストデバイスのプライバシー サンドボックスが誤って無効にならないようにします。
次のコマンドを使用して、デバイス設定の更新を無効にします。
adb shell device_config set_sync_disabled_for_tests persistent
テスト後にデバイス設定の更新を再度有効にする場合は、次のコマンドを使用します。
adb shell device_config set_sync_disabled_for_tests none
adservices 詳細ログを有効にする
adservices の詳細ログで、表示されているエラーの詳細なコンテキスト情報を確認できます。有効にするには、次のコマンドを使用します。
adb shell setprop log.tag.adservices VERBOSE
デバイスが正しく設定されていることを確認する
デバイス設定の更新を無効にしたばかりの場合は、これらの手順を再度実行して、デバイスが適切に設定されており、テスト中にその状態が維持されるようにすることをおすすめします。
- 該当する adb コマンドを使用して PPAPI を有効にする
- 目標に応じて、デバイスを登録するか、登録を無効にします。
コードをチェックして PPAPI が利用可能であることを確認する
コードベースにチェックを追加して、プライバシー サンドボックスに必要なバージョンがデバイスにあることを確認できます。
SDK 拡張機能を介してベータ版リリースを使用している場合は、ビルドと SDK 拡張機能のバージョンが正しいかどうかを確認します。
Jetpack ライブラリを介してベータ版リリースを使用している場合は、デバイスでプライバシー サンドボックスを使用できない場合に、初期化関数が null
を返します。例:
すべてのリリースについて、Google Play 開発者サービスを確認します。
セキュリティの例外
セキュリティ例外エラーは通常、プライバシー サンドボックス リソースへのアクセスの承認がなんらかの形で不足している場合に発生します。
権限がリクエストされなかった
エラー:
Failed to get Ad ID: java.lang.SecurityException: Caller is not authorized to
call this API. Permission was not requested
.
考えられる理由:
広告 ID にアクセスするための権限を宣言する必要があります。
解決方法:
AndroidManifest.xml
で次のように権限を宣言します。
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_AD_ID" />
発信者が承認されていない
エラー:
Failed to find resolveInfo for adServices service. Intent action:
android.adservices.adid.AdIdProviderService
Failed to find AdServices services
Caller not authorized
考えられる理由:
デバイスが正しく登録されていません。デバイスを設定するための登録後の手順を含め、すべての登録手順を実施していることを確認します。
考えられる理由:
登録 URL が一致しません。
解決方法:
- 登録データを調べて、コードで使用している URL とプライバシー サンドボックスに登録した URL に違いがあるかどうかを確認します。たとえば、
https://adtech.example.com/source
を使用しているが、登録された URL がhttps://adtech.example.com/register_source
であることが考えられます。 - 登録されている URL と一致するようにコードを調整します。たとえば、URL に「/source」ではなく「/register_source」を追加するようにサンプルアプリの行を調整できます。
このエラーが引き続き表示される場合:
会社が登録リストに含まれていないか、会社は登録されているがアプリのマニフェスト許可リストには登録されていない可能性があります。android-ps-support@google.com に連絡して、組織がプライバシー サンドボックスに登録されていることを確認してください。
発信者が許可されていない
エラー:
Failed to get Ad ID: java.lang.SecurityException: Caller is not authorized to
call this API. Caller is not allowed. Package [package name] is not allowed to
call the API
.
考えられる理由:
パッケージ名が許可リストに登録されていません。
解決方法:
許可リスト内のすべてのパッケージ名を許可します。
adb シェルを直接使用する場合:
前述のコマンドは bash などのシェルで機能しますが、adb シェルを直接起動してコマンドを実行する場合、引用符をエスケープしないでください。代わりに、次のようにコマンドを実行します。
解決方法:
パッケージ名を許可リストに追加します。
adb shell device_config put adservices ppapi_app_allow_list [package name]
パッケージ名が許可リストに含まれていることを確認します。
adb shell device_config get adservices ppapi_app_allow_list
必要に応じて、次のコマンドを使用して許可リストを削除できます。
adb shell device_config delete adservices ppapi_app_allow_list
不正状態の例外
不正状態の例外は、不正または不適切なタイミングでメソッドが呼び出されたことを示します。このようなタイミングでは、環境またはアプリケーションはリクエストされたオペレーションに対して適切な状態ではありません。
不正状態の例外: サービスが利用できない
エラー:
com.example.measurement.sampleapp E Failed binding to measurement service:
java.lang.IllegalStateException: Service is not available
考えられる理由:
緊急停止スイッチを無効にする必要があります。
解決方法:
緊急停止スイッチを無効にするには、次のコマンドを使用します。
adb shell 'device_config put adservices global_kill_switch false'
考えられる理由:
ユーザーの同意が得られていません。
解決方法:
次のコマンドを実行します。
adb shell am start -n com.google.android.adservices.api/com.android.adservices.ui.settings.activities.AdServicesSettingsMainActivity
上記のコマンドが完了したら、[プライバシー サンドボックスを有効にする] の設定を [オン] に切り替えます。
adb コマンドのエラー
ジョブが見つからない
エラー:
Could not find job 14 in package com.google.android.adservices.api/ user 0
考えられる理由:
プライバシー サンドボックス API がトリガーされていません。
解決方法: このジョブを実行する前に、プライバシー サンドボックス API のいずれか(registerSource()
、getTopics()
、selectAds()
など)を呼び出します。この呼び出しは失敗するはずですが、API を有効化するために必要です。その後、jobscheduler 14
コマンドを再実行します。
考えられる理由:
Google Play ストアを更新する必要があります。
解決方法:
- Google アカウントでデバイスまたはエミュレータにログインします。
- [Google Play ストア] > [プロフィール アイコン] > [設定] > [概要] に移動します。「Play ストアのバージョン」という見出しの下にある [Play ストアを更新] をタップします。
チケットを作成する
上記の手順を試してもエラーが解決しない場合は、次の情報を含むチケットを作成します。
- 使用しているリリースは何ですか?(デベロッパー プレビューとベータ版のどちらですか?)使用しているバージョンは何ですか?バージョン コードは、[設定] > [デバイス情報] > [ビルド番号] で確認できます。
- ベータ版リリースを使用している場合は、
adb shell getprop | grep build.version.extensions
を実行して、結果をチケットに含めます。 - デバイスに搭載されている Google Play 開発者サービスのバージョンは何ですか?
adb shell dumpsys package com.google.android.gms | grep versionName
を実行し、コマンドの結果をチケットに含めます。 - バグの完全レポートを含めます。バグレポート全体を取得するには、
adb bugreport
を実行するか、 手順に沿って操作します。