טיפול בקודי שגיאה של Play Integrity API

אם האפליקציה שולחת בקשה ל-Play Integrity API והקריאה נכשלת, האפליקציה מקבלת קוד שגיאה. השגיאות האלה יכולות לקרות מסיבות שונות, כמו בעיות סביבתיות כמו חיבור רשת חלש, בעיות בשילוב של ה-API או פעילות זדונית והתקפות פעילות. סוג קוד השגיאה שמוחזר תלוי בסוג הבקשה:

אסטרטגיות של ניסיון חוזר

כדאי להשתמש בהשהיה מעריכית לפני ניסיון חוזר (exponential backoff) לפעולות של Play Integrity שמתבצעות ברקע ולא משפיעות על חוויית המשתמש בזמן שהמשתמש נמצא בסשן.

לדוגמה, מתאים להשתמש בשיטה הזו כשמאשרים רכישות חדשות, כי הפעולה הזו יכולה להתבצע ברקע, ואין צורך לאשר בזמן אמת אם מתרחשת שגיאה.

אחרי הכשל הראשון, מתחילים עם השהיה ראשונית של 5 שניות לפני שמנסים שוב.

כדאי להטמיע אסטרטגיה של ניסיונות חוזרים עם מספר ניסיונות מקסימלי כתנאי יציאה, באמצעות הגדלה אקספוננציאלית של העיכוב בכל פעם (10 שניות, 20 שניות).

במהלך הניסיונות החוזרים האלה, צריך לבדוק אם יש חיבור לרשת ולא להעמיס על המכשיר.

אם השגיאות ממשיכות להופיע אחרי שלושה ניסיונות חוזרים, צריך להתייחס לתוצאה כאילו הלקוח נכשל בכל בדיקות השלמות. יכולות להיות כמה סיבות לשגיאה, כולל (אבל לא רק): עומס יתר על המכשיר, בעיות בחיבור לרשת או ניסיון של תוקף.

ערכים של קודי שגיאה בספריית Java

IntegrityErrorCode StandardIntegrityErrorCode
-1 API_NOT_AVAILABLE API_NOT_AVAILABLE
-2 PLAY_STORE_NOT_FOUND PLAY_STORE_NOT_FOUND
-3 NETWORK_ERROR NETWORK_ERROR
-4 PLAY_STORE_ACCOUNT_NOT_FOUND
-5 APP_NOT_INSTALLED APP_NOT_INSTALLED
-6 PLAY_SERVICES_NOT_FOUND PLAY_SERVICES_NOT_FOUND
-7 APP_UID_MISMATCH APP_UID_MISMATCH
-8 TOO_MANY_REQUESTS TOO_MANY_REQUESTS
-9 CANNOT_BIND_TO_SERVICE CANNOT_BIND_TO_SERVICE
-10 NONCE_TOO_SHORT
-11 NONCE_TOO_LONG
-12 GOOGLE_SERVER_UNAVAILABLE GOOGLE_SERVER_UNAVAILABLE
-13 NONCE_IS_NOT_BASE64
-14 PLAY_STORE_VERSION_OUTDATED PLAY_STORE_VERSION_OUTDATED
-15 PLAY_SERVICES_VERSION_OUTDATED PLAY_SERVICES_VERSION_OUTDATED
-16 CLOUD_PROJECT_NUMBER_IS_INVALID CLOUD_PROJECT_NUMBER_IS_INVALID
-17 CLIENT_TRANSIENT_ERROR REQUEST_HASH_TOO_LONG
-18 CLIENT_TRANSIENT_ERROR
-19 INTEGRITY_TOKEN_PROVIDER_INVALID
-100 INTERNAL_ERROR INTERNAL_ERROR

ערכים נוספים של קודי שגיאה בספרייה הנייטיבית

IntegrityErrorCode StandardIntegrityErrorCode
-100 INTEGRITY_INTERNAL_ERROR STANDARD_INTEGRITY_INTERNAL_ERROR
-101 INTEGRITY_INITIALIZATION_NEEDED STANDARD_INTEGRITY_INITIALIZATION_NEEDED
-102 INTEGRITY_INITIALIZATION_FAILED STANDARD_INTEGRITY_INITIALIZATION_FAILED
-103 INTEGRITY_INVALID_ARGUMENT STANDARD_INTEGRITY_INVALID_ARGUMENT

קודי שגיאה שאפשר לנסות לתקן

הסיבה לשגיאות האלה היא לפעמים תנאים זמניים, ולכן צריך לנסות שוב לבצע את השיחה.

NETWORK_ERROR (קוד שגיאה -3)

השגיאה הזו מציינת שהייתה בעיה בחיבור לרשת בין המכשיר לבין מערכות Play.

פתרון אפשרי

כדי לשחזר, צריך לבקש מהמשתמש לבדוק את החיבור לרשת, ולהשתמש בניסיונות חוזרים פשוטים או בהשהיה מעריכית לפני ניסיון חוזר, בהתאם לפעולה שהפעילה את השגיאה.

למידע נוסף

NETWORK_ERROR לבקשות קלאסיות.

TOO_MANY_REQUESTS (קוד שגיאה ‎-8)

אפליקציית השיחות שולחת יותר מדי בקשות ל-API והשימוש שלה מוגבל, או שהאפליקציה חרגה ממכסת הבקשות היומית שלה.

פתרון אפשרי

  1. ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff).
  2. בקשה להגדלת המספר המקסימלי של בקשות ביום

למידע נוסף

TOO_MANY_REQUESTS לבקשות קלאסיות.

GOOGLE_SERVER_UNAVAILABLE (קוד שגיאה ‎-12)

שגיאת שרת פנימית לא ידועה של Google.

פתרון אפשרי

ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff). אם הבדיקה נכשלת באופן עקבי, כדאי לדווח על באג.

למידע נוסף

GOOGLE_SERVER_UNAVAILABLE לבקשות קלאסיות.

CLIENT_TRANSIENT_ERROR (קוד שגיאה ‎-18)

אירעה שגיאה זמנית במכשיר הלקוח.

בבקשות רגילות ל-API, התמיכה הזו זמינה החל מגרסה 1.3.0 של ספריית Play Integrity API ל-Kotlin ול-Java, Google Play Integrity Plugin for Unity בגרסה 1.3.0 ואילך ו-Play Core Native SDK בגרסה 1.13.0 ואילך.

פתרון אפשרי

ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff).

למידע נוסף

CLIENT_TRANSIENT_ERROR לבקשות קלאסיות.

הערה: כשמדווחים על הערך הזה באמצעות בקשת Classic API, הערך שמוחזר הוא ‎-17.

INTERNAL_ERROR (קוד שגיאה ‎-100)

שגיאה פנימית לא ידועה.

פתרון אפשרי

ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff). אם הפעולה נכשלת באופן עקבי, כדאי לדווח על באג.

למידע נוסף

INTERNAL_ERROR לבקשות קלאסיות.

STANDARD_INTEGRITY_INTERNAL_ERROR (קוד שגיאה ‎-100)

שגיאה פנימית לא ידועה.

פתרון אפשרי

ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff). אם הפעולה נכשלת באופן עקבי, כדאי לדווח על באג.

למידע נוסף

אפשר לעיין בINTEGRITY_INTERNAL_ERROR לגבי בקשות קלאסיות.

STANDARD_INTEGRITY_INITIALIZATION_FAILED (קוד שגיאה ‎-102)

אירעה שגיאה באתחול של Standard Integrity API.

פתרון אפשרי

ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff). אם הפעולה נכשלת באופן עקבי, כדאי לדווח על באג.

למידע נוסף

אפשר לעיין בINTEGRITY_INITIALIZATION_FAILED לגבי בקשות קלאסיות.

קודי שגיאה שלא ניתן לנסות שוב

במקרים כאלה, סביר להניח שניסיונות חוזרים אוטומטיים לא יעזרו. עם זאת, ניסיון חוזר ידני עשוי לעזור אם המשתמש יטפל בתנאי שגרם לבעיה. לדוגמה, אם המשתמש מעדכן את הגרסה שלו בחנות Play לגרסה נתמכת, יכול להיות שניסיון חוזר ידני של הפעולה הראשונית יצליח.

API_NOT_AVAILABLE (קוד שגיאה ‎-1)

יכול להיות שהגרסה של חנות Play שמותקנת במכשיר ישנה ו-Play Integrity API לא זמין. אפשרות נוספת היא ש-Integrity API לא מופעל ב-Google Play Console.

פתרון אפשרי

  • מוודאים ש-Integrity API מופעל ב-Google Play Console.
  • צריך לבקש מהמשתמש לעדכן את חנות Play.

למידע נוסף

אפשר לעיין בAPI_NOT_AVAILABLE כדי לראות בקשה קלאסית.

PLAY_STORE_NOT_FOUND (קוד שגיאה ‎-2)

לא נמצאה במכשיר אפליקציה רשמית של חנות Play.

פתרון אפשרי

מבקשים מהמשתמש להתקין או להפעיל את חנות Google Play.

למידע נוסף

אפשר לעיין בPLAY_STORE_NOT_FOUND כדי לראות בקשה קלאסית.

PLAY_STORE_ACCOUNT_NOT_FOUND (קוד שגיאה -4)

הערה: הנתון הזה מדווח רק לגבי בקשות קלאסיות דרך IntegrityErrorCode.

לא נמצא חשבון בחנות Play במכשיר. הערה: Play Integrity API תומך עכשיו בבקשות לא מאומתות. קוד השגיאה הזה משמש רק בגרסאות ישנות של חנות Play שלא נתמכות.

פתרון אפשרי

מבקשים מהמשתמש לעדכן את חנות Google Play ולהיכנס אליה.

APP_NOT_INSTALLED (קוד שגיאה ‎-5)

אפליקציית השיחות לא מותקנת. משהו לא בסדר (יכול להיות שמדובר במתקפה).

פתרון אפשרי

לא ניתן לבצע פעולה. התייחסו לתוצאה כאילו הלקוח נכשל בכל בדיקות היושרה.

למידע נוסף

אפשר לעיין בAPP_NOT_INSTALLED כדי לראות בקשה קלאסית.

PLAY_SERVICES_NOT_FOUND (קוד שגיאה ‎-6)

שירותי Play לא זמינים או שצריך לעדכן אותם.

פתרון אפשרי

מבקשים מהמשתמש להתקין, לעדכן או להפעיל את Play Services.

למידע נוסף

אפשר לעיין בAPP_NOT_INSTALLED כדי לראות בקשה קלאסית.

APP_UID_MISMATCH (קוד שגיאה ‎-7)

המזהה הייחודי (UID) של האפליקציה שקוראת (מזהה משתמש) לא תואם לזה של מנהל החבילות.

פתרון אפשרי

לא ניתן לבצע פעולה. התייחסו לתוצאה כאילו הלקוח נכשל בכל בדיקות היושרה.

למידע נוסף

אפשר לעיין בAPP_UID_MISMATCH כדי לראות בקשה קלאסית.

CANNOT_BIND_TO_SERVICE (קוד שגיאה ‎-9)

הקישור לשירות בחנות Play נכשל. יכול להיות שהסיבה לכך היא שמותקנת במכשיר גרסה ישנה של חנות Play.

פתרון אפשרי

מבקשים מהמשתמש לעדכן את חנות Google Play.

למידע נוסף

אפשר לעיין בCANNOT_BIND_TO_SERVICE כדי לראות בקשה קלאסית.

NONCE_TOO_SHORT (קוד שגיאה ‎-10)

הערה: הנתון הזה מדווח רק לגבי בקשות קלאסיות דרך IntegrityErrorCode.

אורך הצופן החד-פעמי (nonce) קצר מדי. הערך של nonce צריך להיות לפחות 16 בייטים לפני קידוד base64.

פתרון אפשרי

צריך לנסות שוב עם ערך nonce ארוך יותר.

NONCE_TOO_LONG (קוד שגיאה ‎-11)

הערה: הנתון הזה מדווח רק לגבי בקשות קלאסיות דרך IntegrityErrorCode.

אורך הצופן החד-פעמי (nonce) ארוך מדי. ה-nonce צריך להיות קטן מ-500 בייט לפני קידוד base64.

פתרון אפשרי

צריך לנסות שוב עם ערך nonce קצר יותר.

NONCE_IS_NOT_BASE64 (קוד שגיאה ‎-13)

הערה: הנתון הזה מדווח רק לגבי בקשות קלאסיות דרך IntegrityErrorCode.

הצופן החד-פעמי (nonce) לא מקודד כמחרוזת base64 בטוחה לשימוש באינטרנט ללא גלישת שורה.

פתרון אפשרי

צריך לנסות שוב עם ערך חד-פעמי בפורמט הנכון.

PLAY_STORE_VERSION_OUTDATED (קוד שגיאה ‎-14)

צריך לעדכן את אפליקציית חנות Google Play.

פתרון אפשרי

מבקשים מהמשתמש לעדכן את חנות Google Play.

למידע נוסף

אפשר לעיין בPLAY_STORE_VERSION_OUTDATED כדי לראות בקשה קלאסית.

PLAY_SERVICES_VERSION_OUTDATED (קוד שגיאה ‎-15)

צריך לעדכן את Google Play Services.

פתרון אפשרי

מבקשים מהמשתמש לעדכן את Google Play Services.

למידע נוסף

אפשר לעיין בPLAY_SERVICES_VERSION_OUTDATED כדי לראות בקשה קלאסית.

CLOUD_PROJECT_NUMBER_IS_INVALID (קוד שגיאה ‎-16)

מספר הפרויקט ב-Cloud שסיפקת לא תקין.

פתרון אפשרי

משתמשים במספר הפרויקט ב-Cloud עבור הפרויקט ב-Cloud שבו הפעלתם את Play Integrity API.

למידע נוסף

אפשר לעיין בCLOUD_PROJECT_NUMBER_IS_INVALID כדי לראות בקשה קלאסית.

REQUEST_HASH_TOO_LONG (קוד שגיאה ‎-17)

הערה: הנתון הזה מדווח רק כשמשתמשים בבקשה רגילה דרך StandardIntegrityErrorCode.

הטקסט שצוין בrequestHash ארוך מדי. האורך של requestHash צריך להיות פחות מ-500 תווים.

פתרון אפשרי

צריך לנסות שוב עם requestHash קצר יותר.

INTEGRITY_TOKEN_PROVIDER_INVALID (קוד שגיאה ‎-19)

הערה: הנתון הזה מדווח רק לגבי בקשות רגילות דרך StandardIntegrityErrorCode.

הערך StandardIntegrityTokenProvider כבר לא תקף. זה יכול לקרות כי התוקף של ספק האסימונים פג או שהמשתמש ניקה את הנתונים של אפליקציית חנות Play, מה שהסיר את ספק האסימונים.

קוד השגיאה הזה זמין רק לבקשות Standard API, שנתמכות החל מגרסה 1.3.0 של הספרייה בשפות התכנות Kotlin ו-Java, בפלאגין של Google Play Integrity ל-Unity בגרסה 1.3.0 ואילך וב-Play Core Native SDK בגרסה 1.13.0 ואילך.

פתרון אפשרי

בקשה לספק חדש של טוקן יושרה.

STANDARD_INTEGRITY_INITIALIZATION_NEEDED (קוד שגיאה ‎-101)

StandardIntegrityManager לא אותחל.

פתרון אפשרי

קודם מתקשרים אל StandardIntegrityManager_init().

למידע נוסף

INTEGRITY_INITIALIZATION_NEEDED מידע על בקשות דרך Classic API

STANDARD_INTEGRITY_INVALID_ARGUMENT (קוד שגיאה ‎-103)

ארגומנט לא תקין הועבר אל Standard Integrity API.

פתרון אפשרי

צריך לנסות שוב עם הארגומנט הנכון.

למידע נוסף

מידע נוסף על בקשות קלאסיות זמין במאמר INTEGRITY_INVALID_ARGUMENT.