Google Cloud Fraud Defense in Android-Apps einbinden

Sie können Google Cloud Fraud Defense in Android-Apps einbinden, um die Integrität von Clientgeräten zu bewerten und sensible Interaktionen von mobilen Nutzern zu schützen.

Das SDK verwendet Reflexion und dynamischen Code, um die Änderung und Verfeinerung 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 Interferenzen mit der Anwendung zu vermeiden.

Hinweis

  1. Umgebung für Google Cloud Fraud Defense vorbereiten

  2. 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:

      1. Rufen Sie die Seite Google Cloud Fraud Defense auf.

        Zu Google Cloud Fraud Defense

      2. Wählen Sie den Tab Keys aus.
      3. Suchen Sie in der Liste der reCAPTCHA-Schlüssel den Schlüssel, den Sie kopieren möchten, und klicken Sie dann auf .
    • Wenn Sie die ID eines vorhandenen Schlüssels mit der REST API kopieren möchten, verwenden Sie die Methode projects.keys.list.
    • Wenn Sie die ID eines vorhandenen Schlüssels mit der gcloud CLI kopieren möchten, verwenden Sie den Befehl gcloud recaptcha keys list.

Android-Umgebung vorbereiten

Native Android-Anwendung

  1. Bereiten Sie Ihre Entwicklungsumgebung vor, indem Sie die aktuelle Version von Android Studio herunterladen und installieren.

  2. Sie benötigen eine App, für die als Mindestwert für das Android SDK API 23: Android 6.0 (Marshmallow) festgelegt ist.

  3. Wenn Sie eine neue mobile App erstellen, erstellen Sie eine Testanwendung, indem Sie ein neues Android Studio-Projekt starten:

    1. Wählen Sie Leere Aktivität aus. Wenn Sie Jetpack Compose in Ihrer App verwenden möchten, wählen Sie Empty Compose Activity aus.
    2. Legen Sie für die Sprache kotlin fest.
    3. Legen Sie den SDK-Mindestwert auf API 23: Android 6.0 (Marshmallow) fest.
  4. Achten Sie darauf, dass das Maven-Repository von Google (google()) in der Liste der Repositories in der Datei build.gradle auf Projektebene enthalten ist, wie im folgenden Snippet gezeigt:

    allprojects {
        repositories {
            google()
        }
    }
    

    Weitere Informationen finden Sie im Google-Maven-Repository.

  5. Fügen Sie die folgende Build-Regel im Abschnitt dependencies der Datei build.gradle auf App-Ebene hinzu, um die reCAPTCHA API-Abhängigkeit hinzuzufügen.

      implementation 'com.google.android.recaptcha:recaptcha:18.9.4'
    

    Weitere Informationen zum Hinzufügen von Abhängigkeiten in Android-Apps finden Sie unter Build-Abhängigkeiten hinzufügen.

  6. Fügen Sie im Manifest Ihrer Anwendung (z. B. AndroidManifest.xml) zwischen dem ersten <manifest>-Tag und dem ersten <application>-Tag die Internetberechtigung hinzu. Diese Berechtigung ist erforderlich, da die reCAPTCHA API Netzwerkvorgänge umfasst.

    <manifest ...>
    
        <uses-permission android:name="android.permission.INTERNET" />
    
        <application ...>
        ...
      </application>
    </manifest>
    
  7. 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 Ihren gradle.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 in 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

  1. Instanziieren Sie einen Client mit dem reCAPTCHA-Schlüssel (KEY_ID), den Sie für Ihre Android-App erstellt haben.

    Kotlin mit fetchClient

    Die Methode fetchClient gibt sofort einen Client zurück und initialisiert das SDK im Hintergrund. Bei Netzwerkfehlern wird die Kommunikation 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 fetchClient

    public 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) {
                  CustomApplication.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 minimieren, initialisieren Sie den Client so früh wie möglich, z. B. während des onCreate()-Aufrufs einer benutzerdefinierten Application-Klasse. UI-Elemente sollten nicht durch das reCAPTCHA SDK blockiert werden.

  2. Rufen Sie für jede Aktion Ihrer App, die mit reCAPTCHA geschützt ist, die Methode execute auf und übergeben Sie eine RecaptchaAction. Die reCAPTCHA-Bibliothek bietet eine Reihe integrierter Aktionen. Bei Bedarf können Sie benutzerdefinierte Aktionen erstellen.

    Das folgende Code-Snippet zeigt, wie Sie execute verwenden, um eine LOGIN-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, versucht der Client es immer wieder und wird erfolgreich initialisiert, 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 dem Attribut withTimeout können Sie einen Zeitlimitwert für die execute APIs angeben.

Kotlin

  • Zeitlimit beim Aufrufen von execute festlegen.

        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 execute auf 10 Sekunden festgelegt.

Java

  • Zeitlimit beim Aufrufen von execute festlegen.

      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 execute auf 10 Sekunden festgelegt.

Fehler verarbeiten

Wenn Ihre App nicht erfolgreich mit dem reCAPTCHA-Dienst kommunizieren kann, liegt das möglicherweise daran, dass bei der API ein Fehler aufgetreten ist. Sie müssen in Ihrer App Logik hinzufügen, um solche Fehler ordnungsgemäß zu verarbeiten.

Weitere Informationen zur Behebung häufiger API-Fehler finden Sie unter RecaptchaErrorCode.

API-Referenz

Eine vollständige Referenz zur reCAPTCHA API für Android finden Sie unter com.google.android.recaptcha.

Nächste Schritte

  • Erstellen Sie eine Bewertung, um das reCAPTCHA-Antworttoken zu bewerten.