בדף הזה מוסבר איך לשלב את Google Cloud Fraud Defense באפליקציית Android.
ה-SDK משתמש ברפלקציה ובקוד דינמי כדי לאפשר שינוי ושיפור של מערכת הזיהוי באפליקציות או בערכות SDK קיימות שפרוסות. כדי למנוע הפרעה לאפליקציה, רשימת המחלקות שזמינות במערכת מוגבלת.
לפני שמתחילים
יוצרים מפתח reCAPTCHA לפלטפורמת אפליקציות ל-Android.
אפשרות נוספת היא להעתיק את המזהה של מפתח reCAPTCHA קיים ל-Android. כדי לעשות זאת, מבצעים אחת מהפעולות הבאות:
כדי להעתיק את המזהה של מפתח קיים ממסוףGoogle Cloud :
עוברים לדף reCAPTCHA.
- ברשימת מפתחות reCAPTCHA, מעבירים את מצביע העכבר מעל המפתח שרוצים להעתיק ולוחצים על .
- כדי להעתיק את המזהה של מפתח קיים באמצעות API בארכיטקטורת REST, משתמשים ב-method projects.keys.list.
- כדי להעתיק את המזהה של מפתח קיים באמצעות ה-CLI של gcloud, משתמשים בפקודה gcloud recaptcha keys list.
הכנת סביבת Android
Android מקורי
מורידים ומתקינים את הגרסה העדכנית של Android Studio כדי להכין את סביבת הפיתוח.
מוודאים שיש לכם אפליקציה עם ערך Android SDK מינימלי שמוגדר ל-API 23: Android 6.0 (Marshmallow).
אם אתם יוצרים אפליקציה חדשה לנייד, אתם צריכים ליצור אפליקציית בדיקה על ידי התחלת פרויקט חדש ב-Android Studio:
- לוחצים על ריקון הפעילות. אם רוצים להשתמש ב-Jetpack Compose באפליקציה, בוחרים באפשרות Empty Compose Activity.
- מגדירים את השפה ל-kotlin.
- מגדירים את ערך ה-SDK המינימלי ל-API 23: Android 6.0 (Marshmallow).
מוודאים שמאגר ה-Maven של Google
google()מופיע ברשימת המאגרים בקובץbuild.gradleברמת הפרויקט, כמו שמוצג בקטע הקוד הבא:allprojects { repositories { google() } }מידע נוסף זמין במאמר בנושא מאגר Maven של Google.
כדי להוסיף את התלות ב-reCAPTCHA API, מוסיפים את כלל ה-build הבא לקטע
dependenciesבקובץbuild.gradleברמת האפליקציה.implementation 'com.google.android.recaptcha:recaptcha:18.9.1'מידע נוסף על הוספת יחסי תלות באפליקציות ל-Android זמין במאמר הוספת יחסי תלות ב-build.
מוסיפים הרשאת גישה לאינטרנט בין התג הראשון
<manifest>לבין התג הראשון<application>בקובץ המניפסט של האפליקציה (לדוגמה,AndroidManifest.xml). ההרשאה הזו נדרשת כי reCAPTCHA API כולל פעולות ברשת.<manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <application ...> ... </application> </manifest>אם רוצים להשתמש בספריות
AndroidXבפרויקט החדש, צריך לקמפל את ה-SDK ל-Android 9.0 ואילך ולהוסיף את קטע הקוד הבא ל-gradle.properties.android.useAndroidX=true android.enableJetifier=trueמידע נוסף מופיע במאמר בנושא מעבר ל-AndroidX.
Flutter
הוראות מפורטות לשימוש ב-reCAPTCHA דרך Flutter זמינות במסמכי התיעוד של Flutter.
React Native
הוראות מפורטות לשימוש ב-reCAPTCHA דרך React Native מופיעות במסמכי העזרה של React Native.
הטמעה של reCAPTCHA באפליקציית Android
יוצרים מופע של לקוח באמצעות מפתח reCAPTCHA (KEY_ID) שיצרתם לאפליקציית Android.
Kotlin עם
fetchClientהשיטה
fetchClientמחזירה לקוח באופן מיידי ומתחילה לאתחל את ה-SDK ברקע. במקרה של כשלים ברשת, המערכת מנסה שוב לתקשר עם שרת reCAPTCHA.class CustomApplication : Application() { private lateinit var recaptchaClient: RecaptchaClient // we recommend initializing in a ViewModel private val recaptchaScope = CoroutineScope(Dispatchers.IO) override fun onCreate() { super.onCreate() initializeRecaptchaClient() } private fun initializeRecaptchaClient() { recaptchaScope.launch { try { recaptchaClient = Recaptcha.fetchClient(this@CustomApplication, "KEY_ID") } catch(e: RecaptchaException) { // Handle errors ... // See "Handle errors" section } } } }Java עם
fetchClientpublic final class CustomApplication extends Application { @Nullable private RecaptchaTasksClient recaptchaTasksClient = null; @Override public void onCreate() { super.onCreate(); initializeRecaptchaClient(); } private void initializeRecaptchaClient() { Recaptcha .fetchTaskClient(this, "KEY_ID") .addOnSuccessListener( this, new OnSuccessListener<RecaptchaTasksClient>() { @Override public void onSuccess(RecaptchaTasksClient client) { MainActivity.this.recaptchaTasksClient = client; } }) .addOnFailureListener( this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle errors ... // See "Handle errors" section } }); } }האתחול של ה-SDK יכול להימשך כמה שניות. כדי לצמצם את זמן האחזור הזה, כדאי לאתחל את הלקוח מוקדם ככל האפשר, למשל במהלך הקריאה
onCreate()של מחלקה מותאמת אישיתApplication. אל תגדירו רכיבי ממשק משתמש לחסימה ב-reCAPTCHA SDK.לכל פעולה באפליקציה שמוגנת באמצעות reCAPTCHA, צריך להפעיל את השיטה
executeולהעביר RecaptchaAction. ספריית reCAPTCHA מספקת קבוצה מובנית של פעולות, ואם צריך, אפשר ליצור פעולות בהתאמה אישית.בקטע הקוד הבא מוצג איך להשתמש ב-
executeכדי להגן על פעולהLOGIN.Kotlin
private fun executeLoginAction() { recaptchaScope.launch { recaptchaClient .execute(RecaptchaAction.LOGIN) .onSuccess { token -> // Handle success ... // See "What's next" section for instructions // about handling tokens. } .onFailure { exception -> // Handle errors ... } } }Java
private void executeLoginAction(View v) { assert recaptchaTasksClient != null; recaptchaTasksClient .executeTask(RecaptchaAction.LOGIN) .addOnSuccessListener( this, new OnSuccessListener<String>() { @Override public void onSuccess(String token) { // Handle success ... // See "What's next" section for instructions // about handling tokens. } }) .addOnFailureListener( this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle errors ... } }); }
מעבר מהשיטה getClient לשיטה fetchClient
השיטה fetchClient מחזירה RecaptchaClient שמנסה שוב לאתחל במקרה של כשלים ברשת. אם לאפליקציה אין גישה לרשת כשהלקוח נוצר, הלקוח ימשיך לנסות שוב ושוב עד שהוא יאתחל בהצלחה כשהרשת תהיה זמינה.
אם מתקשרים אל execute(timeout) והלקוח עדיין לא מוכן, המערכת מנסה לאתחל אותו לפני שהיא מחזירה טוקן או RecaptchaErrorCode.
בדוגמה הבאה אפשר לראות איך עוברים מ-getClient ל-fetchClient.
Kotlin
// Migrate from getClient
private fun initializeWithGetClient() {
recaptchaScope.launch {
Recaptcha.getClient(application, "KEY_ID")
.onSuccess { client ->
recaptchaClient = client
}
.onFailure { exception ->
// Handle errors ...
}
}
}
// Migrate to fetchClient
private fun initializeWithFetchClient() {
recaptchaScope.launch {
try {
recaptchaClient = Recaptcha.fetchClient(application, "KEY_ID")
} catch(e: RecaptchaException){
// Handle errors ...
}
}
}
Java
// Migrate from getTasksClient
private void initializeWithGetTasksClient() {
Recaptcha
.getTasksClient(getApplication(), "KEY_ID")
.addOnSuccessListener(
this,
new OnSuccessListener<RecaptchaTasksClient>() {
@Override
public void onSuccess(RecaptchaTasksClient client) {
recaptchaTasksClient = client;
}
})
.addOnFailureListener(
this,
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Handle errors ...
}
});
}
// Migrate to fetchTaskClient
private void initializeWithFetchTaskClient() {
Recaptcha
.fetchTaskClient(getApplication(), "KEY_ID")
.addOnSuccessListener(
this,
new OnSuccessListener<RecaptchaTasksClient>() {
@Override
public void onSuccess(RecaptchaTasksClient client) {
recaptchaTasksClient = client;
}
})
.addOnFailureListener(
this,
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Handle errors ...
}
});
}
הגדרת זמן קצוב לתפוגה של קריאות ל-API
אפשר לציין ערך של זמן קצוב לתפוגה לממשקי execute API באמצעות המאפיין withTimeout.
Kotlin
הגדרת זמן קצוב לתפוגה כשמתקשרים אל
execute.recaptchaScope.launch { recaptchaClient .execute(RecaptchaAction.LOGIN(), timeout = 10000L) .onSuccess { token -> // Handle success ... // See "What's next" section for instructions // about handling tokens. } .onFailure { exception -> // Handle errors ... // See "Handle errors" section } }בקטע הקוד הזה, הגדרנו את הזמן הקצוב לתפוגה של
executeל-10 שניות.
Java
הגדרת זמן קצוב לתפוגה כשמתקשרים אל
execute.recaptchaTasksClient .executeTask(RecaptchaAction.custom("redeem"), 10000L) .addOnSuccessListener( this, new OnSuccessListener<String>() { @Override public void onSuccess(String token) { // Handle success ... // See "What's next" section for instructions // about handling tokens. } }) .addOnFailureListener( this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle errors ... // See "Handle errors" section } });בקטע הקוד הזה, הגדרנו את הזמן הקצוב לתפוגה של
executeל-10 שניות.
טיפול בשגיאות
אם האפליקציה לא מצליחה לתקשר עם שירות reCAPTCHA, יכול להיות שממשק ה-API נתקל בשגיאה. אתם צריכים להוסיף לאפליקציה לוגיקה שתטפל בשגיאות כאלה בצורה תקינה.
מידע נוסף על פתרונות לשגיאות נפוצות ב-API זמין במאמר RecaptchaErrorCode.
הפניית API
לעיון בהפניה מלאה ל-reCAPTCHA API ל-Android, אפשר לעבור אל com.google.android.recaptcha.
המאמרים הבאים
כדי להעריך את אסימון התגובה של reCAPTCHA, צריך ליצור הערכה.