במאמר הזה נסביר איך לפתור בעיות נפוצות כשמגדירים את ארגז החול לפרטיות ב-Android. אם נתקלתם בשגיאה שלא נמצאה במדריך, דווחו לנו על כך.
לחלק מהשגיאות יש כמה סיבות אפשריות לכך. בהמשך מפורטות כמה מהשגיאות הנפוצות והתיקונים שלהן, אבל יכול להיות שתיתקלו באותה הודעת שגיאה מסיבה אחרת.
לפני שמתחילים בפתרון הבעיה
השבתת עדכוני הגדרות המכשיר
לפני פתרון בעיות שנתקלתם בהן בבדיקה של ארגז החול לפרטיות, השלב הראשון הוא להשבית את העדכונים של הגדרות המכשיר. כך אפשר לוודא שהמכשיר לא יאחזר הגדרות מעודכנות מהשרת, וישבת בטעות את ארגז החול לפרטיות במכשיר הבדיקה.
משביתים את עדכוני תצורת המכשיר באמצעות הפקודה הזו:
adb shell device_config set_sync_disabled_for_tests persistent
אם תרצו להפעיל מחדש את עדכוני תצורת המכשיר לאחר הבדיקה, תוכלו לעשות זאת באמצעות הפקודה הבאה:
adb shell device_config set_sync_disabled_for_tests none
הפעלת רישום מפורט (verbose) ביומן של שירותי מודעות
הרישום המפורט ביומן של שירותי הפרסום מספק הקשר נוסף לגבי השגיאות שאתם רואים. כדי להפעיל, משתמשים בפקודה הבאה:
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 להרשמה לא תואמות.
התיקון:
- כדאי לבדוק את נתוני ההרשמה כדי לראות אם יש חוסר התאמה בין כתובת ה-URL שבה השתמשתם בקוד לבין כתובת ה-URL שרשמתם בארגז החול לפרטיות. לדוגמה, יכול להיות שאתם משתמשים ב-
https://adtech.example.com/source
אבל כתובת ה-URL שרשומה הייתהhttps://adtech.example.com/register_source
- יש לשנות את הקוד כך שיתאים לכתובת האתר הרשומה. לדוגמה, תוכלו לשנות את השורה באפליקציה לדוגמה כך שתתווסף לכתובת ה-URL '/register_source' במקום '/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.
הגשת פנייה
אם הפעולות האלה לא פותרות את השגיאה, תוכלו להגיש פנייה ולכלול את הפרטים הבאים:
- באיזו גרסה אתם משתמשים: תצוגה מקדימה למפתחים או בטא? באיזו גרסה אתם משתמשים? ניתן למצוא את קוד הגרסה בהגדרות > מידע על הטלפון > מספר Build.
- אם משתמשים בגרסת בטא, מריצים את
adb shell getprop | grep build.version.extensions
וכוללים את התוצאות בכרטיס. - איזו גרסה של Google Play Services מותקנת במכשיר? מריצים את הפקודה
adb shell dumpsys package com.google.android.gms | grep versionName
וכוללים את התוצאות של הפקודה בכרטיס. - יש לצרף דוח מלא על באג. כדי לקבל דוח מלא על באג, אפשר להריץ
adb bugreport
או לפעול לפי ההוראות.