SafetyNet reCAPTCHA API

Der SafetyNet-Dienst enthält eine reCAPTCHA API, mit der Sie Ihre App vor schädlichem Traffic schützen können.

reCAPTCHA ist ein kostenloser Dienst, der eine erweiterte Risikoanalyse-Engine verwendet, um Ihre App vor Spam und anderen missbräuchlichen Aktionen zu schützen. Wenn der Dienst vermutet, dass der Nutzer, der mit Ihrer App interagiert, ein Bot und kein Mensch ist, wird ein CAPTCHA angezeigt, das ein Mensch lösen muss, bevor Ihre App weiter ausgeführt werden kann.

In diesem Dokument wird erläutert, wie Sie die reCAPTCHA API von SafetyNet in Ihre App einbinden.

Zusatzbedingungen

Wenn Sie auf die reCAPTCHA API zugreifen oder diese verwenden, stimmen Sie den Nutzungsbedingungen für Google APIs und den folgenden reCAPTCHA-Nutzungsbedingungen zu. Bitte lesen und verstehen Sie alle anwendbaren Bedingungen und Richtlinien, bevor Sie auf die APIs zugreifen.

reCAPTCHA-Nutzungsbedingungen

Sie bestätigen und nehmen zur Kenntnis, dass die Funktionsweise der reCAPTCHA API darauf beruht, dass Hardware- und Softwareinformationen, z. B. Geräte- und Anwendungsdaten sowie die Ergebnisse von Integritätsprüfungen, erhoben und zu Analysezwecken an Google gesendet werden. Gemäß Paragraf 3(d) der Nutzungsbedingungen für Google APIs erklären Sie sich damit einverstanden, dass Sie bei Verwendung der APIs dafür verantwortlich sind, die erforderlichen Hinweise oder Einwilligungen zur Erhebung und Weitergabe dieser Daten an Google bereitzustellen bzw. einzuholen.

reCAPTCHA-Schlüsselpaar registrieren

Wenn Sie ein Schlüsselpaar für die Verwendung mit der SafetyNet reCAPTCHA API registrieren möchten, rufen Sie die reCAPTCHA-Anmeldeseite für Android auf und führen Sie die folgenden Schritte aus:

  1. Geben Sie im angezeigten Formular die folgenden Informationen an:

    • Label: Ein eindeutiges Label für Ihren Schlüssel. In der Regel verwenden Sie den Namen Ihres Unternehmens oder Ihrer Organisation.
    • reCAPTCHA-Typ: Wählen Sie reCAPTCHA V2 und dann reCAPTCHA für Android aus.
    • Pakete: Geben Sie den Paketnamen jeder App an, die diesen API-Schlüssel verwendet. Damit eine App die API verwenden kann, muss der von dir eingegebene Paketname genau mit dem Paketnamen der App übereinstimmen. Geben Sie jeden Paketnamen in eine eigene Zeile ein.
    • Inhaber: Fügen Sie für jede Person in Ihrer Organisation, die die reCAPTCHA-Bewertungen Ihrer App überwacht, eine E-Mail-Adresse hinzu.
  2. Klicken Sie das Kästchen reCAPTCHA-Nutzungsbedingungen akzeptieren an.

  3. Benachrichtigungen an Inhaber senden: Klicken Sie dieses Kästchen an, wenn Sie E-Mails zur reCAPTCHA API erhalten möchten, und klicken Sie dann auf Senden.

  4. Auf der nächsten Seite werden Ihr öffentlicher und Ihr privater Schlüssel unter Websiteschlüssel bzw. Geheimer Schlüssel angezeigt. Sie verwenden den Websiteschlüssel, wenn Sie die Bestätigungsanfrage senden, und den geheimen Schlüssel, wenn Sie das Nutzerantworttoken validieren.

SafetyNet API-Abhängigkeit hinzufügen

Bevor Sie die reCAPTCHA API verwenden, müssen Sie die SafetyNet API zu Ihrem Projekt hinzufügen. Wenn Sie Android Studio verwenden, fügen Sie diese Abhängigkeit der Gradle-Datei auf App-Ebene hinzu. Weitere Informationen finden Sie unter SafetyNet API einrichten.

reCAPTCHA API verwenden

In diesem Abschnitt wird beschrieben, wie Sie die reCAPTCHA API aufrufen, um eine CAPTCHA-Bestätigungsanfrage zu senden und das Antworttoken des Nutzers zu erhalten.

Bestätigungsanfrage senden

Wenn Sie die SafetyNet reCAPTCHA API aufrufen möchten, rufen Sie die Methode verifyWithRecaptcha() auf. In der Regel entspricht diese Methode der Auswahl eines UI-Elements, z. B. einer Schaltfläche, in deiner Aktivität durch den Nutzer.

Wenn du die Methode verifyWithRecaptcha() in deiner App verwendest, musst du Folgendes tun:

  • Übergeben Sie Ihren API-Websiteschlüssel als Parameter.
  • Überschreiben Sie die Methoden onSuccess() und onFailure(), um beide möglichen Ergebnisse der Bestätigungsanfrage zu verarbeiten. Insbesondere wenn die API eine Instanz von ApiException an onFailure() übergibt, müssen Sie jeden möglichen Statuscode verarbeiten, den Sie mit getStatusCode() abrufen können.

Das folgende Code-Snippet zeigt, wie diese Methode aufgerufen wird:

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());
                    }
                }
        });
}

Nutzerantworttoken validieren

Wenn die reCAPTCHA API die Methode onSuccess() ausführt, hat der Nutzer die CAPTCHA-Aufgabe erfolgreich abgeschlossen. Diese Methode gibt jedoch nur an, dass der Nutzer das CAPTCHA richtig gelöst hat. Sie müssen das Antworttoken des Nutzers weiterhin über Ihren Backend-Server validieren.

Informationen zum Validieren des Antworttokens des Nutzers finden Sie unter Antwort des Nutzers prüfen.