SafetyNet reCAPTCHA API

שירות SafetyNet כולל reCAPTCHA API שבו אפשר להשתמש כדי להגן על האפליקציה מפני תנועה זדונית.

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

במאמר הזה מוסבר איך לשלב את reCAPTCHA API מ-SafetyNet באפליקציה.

תנאים והגבלות נוספים

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

התנאים וההגבלות של reCAPTCHA

את/ה מבין/ה ומסכים/ה לכך ש-reCAPTCHA API פועל על ידי איסוף מידע על חומרה ותוכנה, למשל נתונים לגבי מכשירים ואפליקציות ותוצאות של בדיקות תקינות, ושליחה של הנתונים האלה אל Google לצורך ניתוח. בהתאם לסעיף ‎3(d) של התנאים וההגבלות של Google APIs, את/ה מסכים/ה לכך שאם את/ה משתמש/ת בממשקי ה-API, באחריותך לספק את ההודעות הדרושות או לקבל את ההסכמות לאיסוף הנתונים האלה ולשיתוף שלהם עם Google.

רישום של צמד מפתחות reCAPTCHA

כדי לרשום צמד מפתחות לשימוש ב-SafetyNet reCAPTCHA API, עוברים אל אתר ההרשמה ל-reCAPTCHA Android ופועלים לפי השלבים הבאים:

  1. בטופס שמופיע, מספקים את הפרטים הבאים:

    • תווית: תווית ייחודית למפתח. בדרך כלל משתמשים בשם של החברה או הארגון.
    • סוג reCAPTCHA: בוחרים באפשרות reCAPTCHA גרסה 2 ואז באפשרות reCAPTCHA Android.
    • חבילות: צריך לציין את שם החבילה של כל אפליקציה שמשתמשת במפתח ה-API הזה. כדי שאפליקציה תוכל להשתמש ב-API, שם החבילה שאתם מזינים חייב להיות זהה לשם החבילה של האפליקציה. מזינים כל שם חבילה בשורה נפרדת.
    • בעלים: מוסיפים כתובת אימייל לכל אדם בארגון שמנטר את הערכות הסיכון של reCAPTCHA באפליקציה.
  2. מסמנים את תיבת הסימון אישור התנאים וההגבלות של reCAPTCHA.

  3. שליחת התראות לבעלים: מסמנים את התיבה הזו אם רוצים לקבל אימיילים לגבי reCAPTCHA API, ואז לוחצים על שליחה.

  4. בדף שיופיע, המפתחות הציבורי והפרטי יופיעו בקטע Site key (מפתח האתר) וSecret key (מפתח סודי), בהתאמה. משתמשים במפתח האתר כששולחים את בקשת האימות, ובמפתח הסודי כשמאמתים את טוקן התגובה של המשתמש.

הוספת התלות ב-SafetyNet API

לפני שמשתמשים ב-reCAPTCHA API, צריך להוסיף את SafetyNet API לפרויקט. אם משתמשים ב-Android Studio, צריך להוסיף את יחסי התלות האלה לקובץ Gradle ברמת האפליקציה. מידע נוסף זמין במאמר הגדרת SafetyNet API.

שימוש ב-reCAPTCHA API

בקטע הזה מוסבר איך קוראים ל-reCAPTCHA API כדי לשלוח בקשת אימות CAPTCHA ולקבל את טוקן התשובה של המשתמש.

שליחת בקשת האימות

כדי להפעיל את SafetyNet reCAPTCHA API, קוראים ל-method‏ verifyWithRecaptcha(). בדרך כלל, השיטה הזו מתאימה למצב שבו המשתמש בוחר רכיב בממשק המשתמש, כמו לחצן, בפעילות שלכם.

כשמשתמשים בשיטה verifyWithRecaptcha() באפליקציה, צריך לבצע את הפעולות הבאות:

  • מעבירים את מפתח האתר של ה-API כפרמטר.
  • צריך לבטל את השיטות onSuccess() ו-onFailure() כדי לטפל בשני התרחישים האפשריים של משימת בקשת האימות. בפרט, אם ה-API מעביר מופע של ApiException אל onFailure(), צריך לטפל בכל קוד סטטוס אפשרי שאפשר לאחזר באמצעות getStatusCode().

בקטע הקוד הבא מוצג אופן ההפעלה של השיטה הזו:

Kotlin

fun onClick(view: View) {
    SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY)
            .addOnSuccessListener(this as Executor, OnSuccessListener { response ->
                // Indicates communication with reCAPTCHA service was
                // successful.
                val userResponseToken = response.tokenResult
                if (response.tokenResult?.isNotEmpty() == true) {
                    // Validate the user response token using the
                    // reCAPTCHA siteverify API.
                }
            })
            .addOnFailureListener(this as Executor, OnFailureListener { e ->
                if (e is ApiException) {
                    // An error occurred when communicating with the
                    // reCAPTCHA service. Refer to the status code to
                    // handle the error appropriately.
                    Log.d(TAG, "Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}")
                } else {
                    // A different, unknown type of error occurred.
                    Log.d(TAG, "Error: ${e.message}")
                }
            })
}

Java

public void onClick(View v) {
    SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY)
        .addOnSuccessListener((Executor) this,
            new OnSuccessListener<SafetyNetApi.RecaptchaTokenResponse>() {
                @Override
                public void onSuccess(SafetyNetApi.RecaptchaTokenResponse response) {
                    // Indicates communication with reCAPTCHA service was
                    // successful.
                    String userResponseToken = response.getTokenResult();
                    if (!userResponseToken.isEmpty()) {
                        // Validate the user response token using the
                        // reCAPTCHA siteverify API.
                    }
                }
        })
        .addOnFailureListener((Executor) this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    if (e instanceof ApiException) {
                        // An error occurred when communicating with the
                        // reCAPTCHA service. Refer to the status code to
                        // handle the error appropriately.
                        ApiException apiException = (ApiException) e;
                        int statusCode = apiException.getStatusCode();
                        Log.d(TAG, "Error: " + CommonStatusCodes
                                .getStatusCodeString(statusCode));
                    } else {
                        // A different, unknown type of error occurred.
                        Log.d(TAG, "Error: " + e.getMessage());
                    }
                }
        });
}

אימות של טוקן התגובה של המשתמש

כש-reCAPTCHA API מפעיל את השיטה onSuccess(), המשתמש השלים בהצלחה את אתגר ה-CAPTCHA. עם זאת, השיטה הזו מציינת רק שהמשתמש פתר את ה-CAPTCHA בצורה נכונה. עדיין צריך לאמת את טוקן התשובה של המשתמש מהשרת העורפי.

במאמר איך לאמת את התשובה של המשתמש מוסבר איך לאמת את טוקן התשובה של המשתמש.