במסמך הזה נסביר איך לפתור בעיות נפוצות שקשורות להגדרת הפרטיות Sandbox ב-Android. אם מופיעה שגיאה שלא נמצאה במדריך הזה, נשמח לדעת.
לשגיאות מסוימות יש כמה סיבות אפשריות להשלכה. בהמשך מופיעות חלק מהשגיאות הנפוצות יותר והתיקונים שלהן, אבל ייתכן שתיתקלו לאותה הודעת שגיאה מסיבה אחרת.
לפני שמתחילים לפתור את הבעיה
השבתת העדכונים להגדרות המכשיר
במהלך פתרון בעיות שבהן נתקלת בארגז החול לפרטיות הבדיקה, השלב הראשון הוא השבתת עדכוני התצורה של המכשיר. הזה מבטיחה שהמכשיר לא יאחזר הגדרות מעודכנות מהשרת ולהשבית בטעות את ארגז החול לפרטיות במכשיר הבדיקה.
כדי להשבית את עדכוני התצורה של המכשיר, משתמשים בפקודה הבאה:
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
צריך לוודא שהמכשיר הוגדר בצורה נכונה
אם השבתת לאחרונה את עדכוני ההגדרות של המכשיר, מומלץ להפעיל את שוב ושוב כדי לוודא שהמכשיר מוגדר כראוי ונשאר במהלך הבדיקה.
- הפעלת ה-PPAPI עם פקודות adb הרלוונטיות.
- צריך לרשום את המכשיר או להשבית את ההרשמה, בהתאם ליעדים.
צריך לבדוק את הקוד כדי לוודא שממשקי ה-PPAPI זמינים
אפשר להוסיף בדיקות ל-codebase כדי לוודא שבמכשיר את הגרסאות הנכונות שהוא צריך לארגז החול לפרטיות.
אם משתמשים בגרסת בטא דרך תוספי SDK, כדאי לבדוק מהו ה-build הנכון והגרסה של תוסף ה-SDK:
אם משתמשים בגרסת בטא דרך ספריות Jetpack, האתחול
הפונקציה מחזירה את הערך null
אם ארגז החול לפרטיות לא זמין
במכשיר. לדוגמה:
לכל גרסה, בודקים את Google Play Services:
חריגי אבטחה
שגיאות חריגות אבטחה מתרחשות בדרך כלל כאשר למשהו אין הרשאה לגשת למשאב של ארגז החול לפרטיות.
לא נשלחה בקשה להרשאה
שגיאה:
Failed to get Ad ID: java.lang.SecurityException: Caller is not authorized to
call this API. Permission was not requested
.
הסיבה הפוטנציאלית:
עליכם להצהיר על הרשאת גישה למזהה המודעה.
תיקון:
להצהיר על ההרשאה ב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 לרישום לא תואמות.
תיקון:
- בדקו את נתוני ההרשמות שלכם כדי לראות אם יש פערים בין
כתובת האתר שבה השתמשת בקוד שלך ואת כתובת האתר שרשמת במדיניות הפרטיות
ארגז חול. לדוגמה, ייתכן שהשתמשת ב-
https://adtech.example.com/source
אבל כתובת ה-URL שרשומה הייתהhttps://adtech.example.com/register_source
- צריך לשנות את הקוד כך שיתאים לכתובת ה-URL הרשומה. לדוגמה, אפשר לשנות את השורה באפליקציה לדוגמה ומוסיפים את המחרוזת ' /register_source' לכתובת ה-URL במקום זאת של ' /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 ומעטפת רגילה של bash, אבל אם אתם מפעילים את ה-adb ישירות ולנסות להריץ את הפקודות, אתם לא אמורים לסמן בתו בריחה (escape) ציטוטים. במקום זאת, מריצים את הפקודות כך:
תיקון:
מוסיפים את שם החבילה לרשימת ההיתרים:
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.
פנייה לתמיכה
אם הפעולות האלה לא עוזרות, אפשר לפתוח פנייה. כוללים את הפרטים הבאים:
- איזו גרסה אתם משתמשים בה, תצוגה מקדימה למפתחים או בטא? מהי הגרסה את/ה? ניתן למצוא את קוד הגרסה שלך בהגדרות > מידע על הטלפון > מספר Build.
- אם משתמשים בגרסת בטא, צריך להריץ את הפקודה
adb shell getprop | grep build.version.extensions
ולכלול את התוצאות בכרטיס. - איזו גרסה של Google Play Services מותקנת במכשיר שלך? מריצים את הפקודה
adb shell dumpsys package com.google.android.gms | grep versionName
וכוללים את הפקודה תוצאות של הפקודה הזו בכרטיס שלכם. - יש לכלול דוח מלא על הבאג. כדי לקבל דוח מלא על באג, אפשר להריץ את הפקודה
adb bugreport
או עד פועלים לפי ההוראות.