Auf dieser Seite wird erläutert, wie Sie Google Cloud Fraud Defense in Ihre Android-App einbinden.
Das SDK verwendet Reflexion und dynamischen Code, um die Änderung und Optimierung des Erkennungssystems in den vorhandenen bereitgestellten Anwendungen/SDKs zu ermöglichen. Die im System verfügbaren Klassen sind auf eine kontrollierte Liste beschränkt, um Störungen der Anwendung zu vermeiden.
Hinweis
Erstellen Sie einen reCAPTCHA-Schlüssel für die Android-App-Plattform.
Alternativ können Sie die ID eines vorhandenen reCAPTCHA-Schlüssels für Android kopieren. Führen Sie dazu einen der folgenden Schritte aus:
So kopieren Sie die ID eines vorhandenen Schlüssels aus der Google Cloud Konsole, gehen Sie wie folgt vor:
Rufen Sie die Seite reCAPTCHA auf.
- Halten Sie in der Liste der reCAPTCHA-Schlüssel den Mauszeiger auf den Schlüssel, den Sie kopieren möchten, und klicken Sie dann auf .
- Verwenden Sie die Methode projects.keys.list, um die ID eines vorhandenen Schlüssels mithilfe der REST API zu kopieren.
- Verwenden Sie den Befehl gcloud recaptcha keys list, um die ID eines vorhandenen Schlüssels mithilfe der gcloud CLI zu kopieren.
Android-Umgebung vorbereiten
Native Android-Anwendung
Um Ihre Entwicklungsumgebung vorzubereiten, laden Sie die neueste Version von Android Studio herunter und installieren Sie sie .
Achten Sie darauf, dass für Ihre App der Mindestwert für das Android SDK auf API 23: Android 6.0 (Marshmallow) festgelegt ist.
Wenn Sie eine neue mobile App erstellen, erstellen Sie eine Testanwendung, indem Sie ein neues Android Studio-Projekt starten:
- Wählen Sie Leere Aktivität aus. Wenn Sie Jetpack Compose in Ihrer App verwenden möchten, wählen Sie Leere Compose-Aktivität aus.
- Legen Sie für die Sprache Kotlin fest.
- Legen Sie für den Mindestwert für das SDK API 23: Android 6.0 (Marshmallow) fest.
Sorgen Sie dafür, dass das Maven-Repository von Google
google()in der Liste der Repositories in der Dateibuild.gradleauf Projektebene enthalten ist, wie im folgenden Snippet gezeigt:allprojects { repositories { google() } }Weitere Informationen finden Sie im Maven-Repository von Google.
Um die reCAPTCHA API-Abhängigkeit hinzuzufügen, fügen Sie die folgende Build-Regel in den Abschnitt
dependenciesder Dateibuild.gradleauf Anwendungsebene ein.implementation 'com.google.android.recaptcha:recaptcha:18.9.0-beta02'Weitere Informationen zum Hinzufügen von Abhängigkeiten in Android-Apps finden Sie unter Build-Abhängigkeiten hinzufügen.
Fügen Sie eine Internetberechtigung zwischen dem ersten
<manifest>-Tag und dem ersten<application>-Tag im Manifest Ihrer Anwendung hinzu (z. B.AndroidManifest.xml). Diese Berechtigung ist erforderlich, da die reCAPTCHA API Netzwerkvorgänge umfasst.<manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <application ...> ... </application> </manifest>Wenn Sie
AndroidX-Bibliotheken in Ihrem neuen Projekt verwenden möchten, kompilieren Sie das SDK mit Android 9.0 oder höher und fügen Sie das folgende Code-Snippet in Ihrengradle.properties-Dateien hinzu.android.useAndroidX=true android.enableJetifier=trueWeitere Informationen finden Sie unter Zu AndroidX migrieren.
Flutter
Eine detaillierte Anleitung zur Verwendung von reCAPTCHA über Flutter finden Sie unter der Flutter-Dokumentation.
React Native
Eine detaillierte Anleitung zur Verwendung von reCAPTCHA über React Native, siehe die React Native-Dokumentation.
reCAPTCHA in Ihre Android-App einbinden
Instanziieren Sie einen Client mit dem reCAPTCHA-Schlüssel (KEY_ID), den Sie für Ihre Android-App erstellt haben.
Kotlin mit
fetchClientDie Methode
fetchClientgibt sofort einen Client zurück und beginnt mit der Initialisierung des SDK im Hintergrund. Bei Netzwerkfehlern werden die Kommunikationsversuche mit dem reCAPTCHA-Server wiederholt.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 mit
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 } }); } }Die Initialisierung des SDK kann einige Sekunden dauern. Um diese Latenz zu verringern, initialisieren Sie den Client so früh wie möglich, z. B. während des Aufrufs
onCreate()einer benutzerdefiniertenApplication-Klasse. UI-Elemente sollten nicht durch das reCAPTCHA SDK blockiert werden.Rufen Sie für jede Aktion Ihrer App, die mit Fraud Defense geschützt ist, die Methode
executeauf und übergeben Sie eine RecaptchaAction. Fraud Defense bietet eine Reihe integrierter Aktionen. Bei Bedarf können Sie benutzerdefinierte Aktionen erstellen.Das folgende Code-Snippet zeigt, wie Sie
executeverwenden, um eineLOGIN-Aktion zu schützen.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 ... } }); }
Von der Methode „getClient“ zur Methode „fetchClient“ migrieren
Die Methode fetchClient gibt einen RecaptchaClient
zurück, der die Initialisierung bei Netzwerkfehlern wiederholt. Wenn die App beim Erstellen des Clients keinen Netzwerkzugriff hat, werden die Versuche wiederholt und die Initialisierung erfolgt erfolgreich, sobald ein Netzwerk verfügbar ist.
Wenn Sie execute(timeout) aufrufen und der Client noch nicht bereit ist, wird versucht,
ihn zu initialisieren, bevor ein Token oder ein RecaptchaErrorCode zurückgegeben wird.
Das folgende Beispiel zeigt, wie Sie von getClient zu fetchClient migrieren.
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 ...
}
});
}
Zeitlimit für API-Aufrufe festlegen
Mit der Eigenschaft withTimeout können Sie einen Zeitlimitwert für die execute-APIs angeben.
Kotlin
Zeitlimit beim Aufrufen von
executefestlegen.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 } }In diesem Code-Snippet wird das Zeitlimit von
executeauf 10 Sekunden festgelegt.
Java
Zeitlimit beim Aufrufen von
executefestlegen.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 } });In diesem Code-Snippet wird das Zeitlimit von
executeauf 10 Sekunden festgelegt.
Fehler verarbeiten
Wenn Ihre Anwendung nicht mit dem reCAPTCHA-Dienst kommunizieren kann, ist möglicherweise ein API-Fehler aufgetreten. Sie müssen Ihrer Anwendung eine Logik hinzufügen, um solche Fehler ordnungsgemäß zu bearbeiten.
Weitere Informationen zu Maßnahmen für häufige API-Fehler finden Sie unter RecaptchaErrorCode.
API-Referenz
Eine vollständige Referenz zur reCAPTCHA API für Android,
siehe com.google.android.recaptcha.
Nächste Schritte
Um das reCAPTCHA-Antworttoken zu bewerten, erstellen Sie eine Bewertung.