本文說明如何解決在 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
可能原因:
您未正確註冊裝置。請確認已遵循所有註冊操作說明,包括依照「註冊後的步驟」所述來設定裝置。
可能原因:
註冊網址不相符。
修正方法:
- 請查看註冊資料,確認程式碼中使用的網址與在 Privacy Sandbox 註冊的網址是否有差異。舉例來說,您可能使用了
https://adtech.example.com/source
,但註冊的網址為https://adtech.example.com/register_source
。 - 請依據註冊的網址調整程式碼。例如變更範例應用程式的該行程式碼,在網址中加上「/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 商店。
修正方法:
- 使用 Google 帳戶登入裝置或模擬器。
- 依序前往「Google Play 商店」>「個人資料」圖示 >「設定」>「關於」。在「Play 商店版本」標題下方,輕觸「更新 Play 商店」。
提交支援單
如果上述步驟無法解決錯誤,請提交支援單,並提供下列資訊:
- 您使用的是「開發人員預覽版」或「Beta 版」?目前採用哪個版本?如要查看版本代碼,請依序點選「設定」>「關於手機」>「版本號碼」。
- 如果使用 Beta 版,請執行
adb shell getprop | grep build.version.extensions
,並在支援單中附上結果。 - 裝置使用的 Google Play 服務版本為何?請執行
adb shell dumpsys package com.google.android.gms | grep versionName
,並在支援單中附上該指令的結果。 - 請附上完整的錯誤報告。如要取得完整的錯誤報告,可以執行
adb bugreport
,或者 按照指示操作。