Auf dieser Seite wird erläutert, wie Sie reCAPTCHA in Ihre Android-App einbinden.
Wenn Sie verdächtigen Traffic visuell bestätigen möchten, können Sie die Methode SafetyNet reCAPTCHA API.
Das SDK verwendet Reflexion und dynamischen Code, um Änderungen und Optimierung des Erkennungssystems in den vorhandenen Anwendungen/SDKs. Die im System verfügbaren Klassen sind auf eine kontrollierte Liste beschränkt, um Störungen der Anwendung zu vermeiden.
Hinweise
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 Console:
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 mit der gcloud CLI zu kopieren.
Android-Umgebung vorbereiten
Native Android-Anwendung
Um Ihre Entwicklungsumgebung vorzubereiten, laden Sie die neueste Version von Android Studio herunt und installieren sie.
Prüfen Sie, ob bei Ihrer App der Android SDK-Mindestwert auf API 23: Android 6.0 (Marshmallow) Sie können entweder das Minimum SDK Ihrer App auf API 19 festlegen oder eine neue App erstellen.
Wenn Sie eine neue App erstellen, erstellen Sie eine Testanwendung. Dazu starten Sie ein neues Android Studio-Projekt:
- Wählen Sie Leere Aktivität aus. Wenn Sie Jetpack Compose in Ihrer App wählen Sie Empty Compose Activity aus.
- Legen Sie für die Sprache kotlin fest.
- Legen Sie als SDK-Mindestwert API 23: Android 6.0 (Marshmallow) fest.
Sorgen Sie dafür, dass das Maven-Repository
google()
von Google in der Liste der Repositories in derbuild.gradle
-Datei auf 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
dependencies
derbuild.gradle
-Datei auf Anwendungsebene ein.implementation 'com.google.android.recaptcha:recaptcha:18.6.1'
Weitere Informationen zum Hinzufügen von Abhängigkeiten in Android-Apps finden Sie unter Fügen Sie Build-Abhängigkeiten hinzu.
Internetberechtigung zwischen dem ersten
<manifest>
-Tag und dem ersten hinzufügen<application>
-Tag im Manifest Ihrer Anwendung, z. B.AndroidManifest.xml
. Diese Berechtigung ist erforderlich, weil der Die reCAPTCHA API umfasst Netzwerkvorgänge.<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
ein:android.useAndroidX=true android.enableJetifier=true
Weitere Informationen finden Sie unter Zu AndroidX migrieren
Flutter
Eine ausführliche Anleitung zur Verwendung von reCAPTCHA über Flutter finden Sie unter der Flutter-Dokumentation
React Native
Eine ausführliche Anleitung zur Verwendung von reCAPTCHA über React Native finden Sie in der React Native-Dokumentation.
reCAPTCHA in Ihre Android-App einbinden
Instantiieren Sie einen Client mit dem reCAPTCHA-Schlüssel (KEY_ID), den Sie für Ihre Android-App erstellt haben.
Kotlin mit
fetchClient
Die
fetchClient
-Methode gibt sofort einen Client zurück und startet die Initialisierung des SDKs im Hintergrund. Es wiederholt die Kommunikation mit reCAPTCHA-Server bei Netzwerkfehlern.class CustomApplication : Application() { private lateinit var recaptchaClient: RecaptchaClient override fun onCreate() { super.onCreate() initializeRecaptchaClient() } private fun initializeRecaptchaClient() { lifecycleScope.launch { try { recaptchaClient = Recaptcha.fetchClient(application, "KEY_ID") } catch(e: RecaptchaException) { // Handle errors ... // See "Handle errors" section } } } }
Java mit
fetchClient
public final class CustomApplication extends Application { @Nullable private RecaptchaTasksClient recaptchaTasksClient = null; @Override protected void onCreate() { super.onCreate(); initializeRecaptchaClient(); } private void initializeRecaptchaClient() { Recaptcha .fetchTaskClient(getApplication(), "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. beim
onCreate()
-Aufruf einer benutzerdefiniertenApplication
-Klasse. UI-Elemente sollten nicht vom reCAPTCHA SDK blockiert werden.Rufen Sie für jede Aktion Ihrer App, die mit reCAPTCHA geschützt ist, die Methode
execute
mit einer RecaptchaAction auf. reCAPTCHA bietet eine Reihe vordefinierter Aktionen. Bei Bedarf können Sie auch benutzerdefinierte Aktionen erstellen.Das folgende Code-Snippet zeigt, wie
execute
zum Schutz einesLOGIN
verwendet wird. Aktion ausführen.Kotlin
private fun executeLoginAction() { lifecycleScope.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.
die die Initialisierung über Netzwerkfehler wiederholt. Wenn die App beim Erstellen des Clients keinen Netzwerkzugriff hat, wird der Client immer wieder neu gestartet und initialisiert, sobald ein Netzwerk gefunden wurde.
Wenn du execute(timeout)
aufrufst und der Client noch nicht bereit ist, versucht er, sich zu initialisieren, bevor er ein Token oder einen RecaptchaErrorCode zurückgibt.
Das folgende Beispiel zeigt, wie Sie von getClient
zu fetchClient
migrieren.
Kotlin
// Migrate from getClient
private fun initializeWithGetClient() {
lifecycleScope.launch {
Recaptcha.getClient(application, "KEY_ID")
.onSuccess { client ->
recaptchaClient = client
}
.onFailure { exception ->
// Handle errors ...
}
}
}
// Migrate to fetchClient
private fun initializeWithFetchClient() {
lifecycleScope.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 Property withTimeout
können Sie einen Zeitüberschreitungswert für die execute
APIs angeben.
Kotlin
Zeitlimit beim Aufrufen von
execute
festlegen.lifecycleScope.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 für
execute
auf 10 Sekunden festgelegt.
Java
Legen Sie ein Zeitlimit für den Aufruf von
execute
fest.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 } });
Mit diesem Code-Snippet wird das Zeitlimit von
execute
auf 10 Sekunden festgelegt.
Fehler verarbeiten
Wenn Ihre Anwendung nicht mit dem reCAPTCHA-Dienst kommunizieren kann kann dies daran liegen, dass in der API ein Fehler aufgetreten ist. Sie müssen Ihrer Anwendung eine Logik hinzufügen, um solche Fehler ordnungsgemäß zu bearbeiten.
Weitere Informationen zu den Maßnahmen für die häufigsten API-Fehler finden Sie unter RecaptchaErrorCode.
API-Referenz
Eine vollständige Referenz der reCAPTCHA API für Android finden Sie hier:
Weitere Informationen finden Sie unter com.google.android.recaptcha
.
Nächste Schritte
Um das reCAPTCHA-Antworttoken zu bewerten, erstellen Sie eine Bewertung.