Android 版 Privacy Sandbox 疑難排解指南

本文說明如何解決在 Android 裝置上設定 Privacy Sandbox 時的常見問題。如果您遇到的錯誤未列於本指南,請通知我們

某些錯誤擲回的原因可能有很多種。以下列出較常見的錯誤及修正方法,不過相同的錯誤訊息也可能是由其他原因造成。

疑難排解前的準備

停用裝置設定更新功能

如果在使用 Privacy Sandbox 測試時遇到任何問題,首先應停用裝置設定更新功能。這可確保裝置不會從伺服器擷取新設定,也不會在無意間停用測試裝置上的 Privacy Sandbox。

請使用下列指令,停用裝置設定更新功能:

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

您可以在程式碼集中新增檢查項目,確保裝置具備 Privacy Sandbox 所需的正確版本。

如果您透過 SDK 擴充功能使用 Beta 版本,請確認使用正確的版本和 SDK 擴充功能版本:

若是透過 Jetpack 程式庫使用 Beta 版本,當裝置上無法使用 Privacy Sandbox 時,初始化函式會傳回 null。例如:

檢查任何版本所使用的 Google Play 服務:

安全性例外狀況

之所以會發生安全性例外狀況錯誤,通常是因為缺少 Privacy Sandbox 資源的存取權。

未要求權限

錯誤

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

可能原因

您未正確註冊裝置。請確認已遵循所有註冊操作說明,包括依照「註冊後的步驟」所述來設定裝置。

可能原因

註冊網址不相符。

修正方法

  1. 請查看註冊資料,確認程式碼中使用的網址與在 Privacy Sandbox 註冊的網址是否有差異。舉例來說,您可能使用了 https://adtech.example.com/source,但註冊的網址為 https://adtech.example.com/register_source
  2. 請依據註冊的網址調整程式碼。例如變更範例應用程式的該行程式碼,在網址中加上「/register_source」,而非「/source」。

如果仍出現這項錯誤

貴公司可能不在註冊清單中,或者貴公司已註冊,但未列入應用程式資訊清單的許可清單。請寄信至 android-ps-support@google.com,確認貴機構已註冊 Privacy Sandbox。

呼叫端遭禁止

錯誤

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

上述指令完成後,請將「啟用 Privacy Sandbox」偏好設定切換為「開啟」。

ADB 指令錯誤

找不到工作

錯誤

Could not find job 14 in package com.google.android.adservices.api/ user 0

可能原因

未觸發 Privacy Sandbox API。

修正方法:在執行工作前先呼叫其中一個 Privacy Sandbox API,例如 registerSource()getTopics()selectAds()。這項呼叫會失敗,但這是啟用 API 的必要步驟。接著,請重新執行 jobscheduler 14 指令。

可能原因

需要更新 Google Play 商店。

修正方法

  1. 使用 Google 帳戶登入裝置或模擬器。
  2. 依序前往「Google Play 商店」>「個人資料」圖示 >「設定」>「關於」。在「Play 商店版本」標題下方,輕觸「更新 Play 商店」

提交支援單

如果上述步驟無法解決錯誤,請提交支援單,並提供下列資訊:

  1. 您使用的是「開發人員預覽版」或「Beta 版」?目前採用哪個版本?如要查看版本代碼,請依序點選「設定」>「關於手機」>「版本號碼」
  2. 如果使用 Beta 版,請執行 adb shell getprop | grep build.version.extensions,並在支援單中附上結果。
  3. 裝置使用的 Google Play 服務版本為何?請執行 adb shell dumpsys package com.google.android.gms | grep versionName,並在支援單中附上該指令的結果。
  4. 請附上完整的錯誤報告。如要取得完整的錯誤報告,可以執行 adb bugreport,或按照這篇文章的指示操作。