שירות SafetyNet כולל את reCAPTCHA API, שמאפשר להגן על האפליקציה מפני תנועה זדונית.
reCAPTCHA הוא שירות חינמי שמשתמש במנוע מתקדם לניתוח סיכונים כדי להגן על האפליקציה מפני ספאם ופעולות פוגעניות אחרות. אם השירות חושד שהמשתמש שמקיים אינטראקציה עם האפליקציה הוא בוט ולא אדם, הוא מציג CAPTCHA שאדם צריך לפתור כדי שהאפליקציה תוכל להמשיך לפעול.
במסמך הזה מוסבר איך לשלב באפליקציה את reCAPTCHA API מ-SafetyNet.
תנאים והגבלות נוספים
הגישה ל-reCAPTCHA API או השימוש בו מבטאים את ההסכמה שלך לתנאים ולהגבלות של Google APIs ולתנאים ולהגבלות של reCAPTCHA שמפורטים בהמשך. לפני שאתם ניגשים לממשקי ה-API, חשוב שתקראו ותבינו את כל התנאים והכללי המדיניות הרלוונטיים.
התנאים וההגבלות של reCAPTCHA
את/ה מבין/ה ומסכים/ה לכך ש-reCAPTCHA API פועל על ידי איסוף מידע על חומרה ותוכנה, למשל נתונים לגבי מכשירים ואפליקציות ותוצאות של בדיקות תקינות, ושליחה של הנתונים האלה אל Google לצורך ניתוח. בהתאם לסעיף 3(d) של התנאים וההגבלות של Google APIs, אתם מסכימים לכך שאם אתם משתמשים בממשקי ה-API, באחריותכם לספק את ההודעות הדרושות או לקבל את ההסכמות לאיסוף הנתונים האלה ולשיתוף שלהם עם Google.רישום של זוג מפתחות reCAPTCHA
כדי לרשום זוג מפתחות לשימוש עם SafetyNet reCAPTCHA API, נכנסים לאתר ההרשמה ל-reCAPTCHA Android ומבצעים את הפעולות הבאות:
בטופס שמופיע, ממלאים את הפרטים הבאים:
- תווית: תווית ייחודית למפתח. בדרך כלל משתמשים בשם של החברה או הארגון.
- reCAPTCHA type: בוחרים באפשרות reCAPTCHA v2 ואז באפשרות reCAPTCHA Android.
- חבילות: מציינים את שם החבילה של כל אפליקציה שמשתמשת במפתח ה-API הזה. כדי שאפליקציה תוכל להשתמש ב-API, שם החבילה שאתם מזינים חייב להיות זהה לשם החבילה של האפליקציה. צריך להזין כל שם חבילה בשורה נפרדת.
- בעלים: הוסיפו כתובת אימייל לכל אדם בארגון שעוקב אחרי בדיקות ה-reCAPTCHA של האפליקציה.
מסמנים את התיבה Accept the reCAPTCHA Terms of Service.
Send alerts to owners: מסמנים את התיבה הזו אם רוצים לקבל אימיילים לגבי reCAPTCHA API, ואז לוחצים על Submit.
בדף הבא שמופיע, המפתחות הציבוריים והפרטיים מופיעים בקטעים Site key ו-Secret key, בהתאמה. מפתח האתר משמש לשליחת בקשת האימות, והמפתח הסודי משמש לאימות האסימון של תגובת המשתמש.
הוספת התלות ב-SafetyNet API
לפני שמשתמשים ב-reCAPTCHA API, צריך להוסיף את SafetyNet API לפרויקט. אם אתם משתמשים ב-Android Studio, הוסיפו את התלות הזו לקובץ Gradle ברמת האפליקציה. מידע נוסף זמין במאמר הגדרת SafetyNet API.
שימוש ב-reCAPTCHA API
בקטע הזה מוסבר איך לשלוח בקשת אימות CAPTCHA באמצעות קריאה ל-reCAPTCHA API ולקבל את טוקן התשובה של המשתמש.
שליחת בקשת האימות
כדי להפעיל את 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 בצורה נכונה. עדיין צריך לאמת את טוקן התשובה של המשתמש משרת הבק-אנד.
כדי ללמוד איך לאמת את טוקן התשובה של המשתמש, קראו את המאמר אימות התשובה של המשתמש.