טיפול בקודי שגיאה של 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 לבקשות דרך Classic API.

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

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

פתרון אפשרי

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

למידע נוסף

TOO_MANY_REQUESTS לבקשות דרך Classic API.

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

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

פתרון אפשרי

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

למידע נוסף

GOOGLE_SERVER_UNAVAILABLE לבקשות דרך Classic API.

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

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

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

פתרון אפשרי

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

למידע נוסף

CLIENT_TRANSIENT_ERROR לבקשות דרך Classic API.

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

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

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

פתרון אפשרי

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

למידע נוסף

INTERNAL_ERROR לבקשות דרך Classic API.

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 שמותקנת במכשיר ישנה ו-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) של האפליקציה הקוראת (מזהה המשתמש) לא תואם למזהה מ-Package Manager.

פתרון אפשרי

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

למידע נוסף

בקשה קלאסית מפורטת בקטע 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_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.

פתרון אפשרי

מבקשים מהמשתמש לעדכן את 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 לא תקין. קוד השגיאה הזה זמין רק לבקשות API רגילות, ותמיכה בו קיימת החל מגרסה 1.3.0 של הספרייה בשפות התכנות Kotlin ו-Java, בפלאגין התקינות של Google Play ל-Unity בגרסה 1.3.0 ואילך וב-Play Core Native SDK בגרסה 1.13.0 ואילך.

פתרון אפשרי

מבקשים ספק חדש של אסימון תקינות.

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

המשתנה StandardIntegrityManager לא אותחל.

פתרון אפשרי

קודם צריך להתקשר למספר StandardIntegrityManager_init().

למידע נוסף

בקשות דרך Classic API מפורטות במאמר INTEGRITY_INITIALIZATION_NEEDED

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

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

פתרון אפשרי

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

למידע נוסף

בקשות קלאסיות מפורטות במאמר INTEGRITY_INVALID_ARGUMENT.