Interfejs API reCAPTCHA SafetyNet

Usługa SafetyNet obejmuje interfejs reCAPTCHA API, którego możesz używać do ochrony aplikacji przed szkodliwym ruchem.

reCAPTCHA to bezpłatna usługa, która używa zaawansowanego mechanizmu analizy ryzyka, aby chronić aplikację przed spamem i innymi nadużyciami. Jeśli usługa podejrzewa, że użytkownik korzystający z aplikacji może być botem, wyświetla test CAPTCHA, który musi zostać rozwiązany przez człowieka, aby aplikacja mogła kontynuować działanie.

W tym dokumencie wyjaśniamy, jak zintegrować interfejs reCAPTCHA API z SafetyNet z aplikacją.

Dodatkowe warunki korzystania z usługi

Uzyskując dostęp do interfejsu API reCAPTCHA lub korzystając z niego, wyrażasz zgodę na Warunki korzystania z interfejsów API Google oraz poniższe Warunki korzystania z usługi reCAPTCHA. Zanim zaczniesz korzystać z interfejsów API, przeczytaj i zrozum wszystkie obowiązujące warunki i zasady.

Warunki korzystania z usługi reCAPTCHA

Przyjmujesz do wiadomości, że interfejs API reCAPTCHA gromadzi informacje o sprzęcie i oprogramowaniu, takie jak dane o urządzeniu i aplikacjach oraz wyniki kontroli integralności, oraz wysyła je do Google w celu analizy. Zgodnie z artykułem 3(d) Warunków korzystania z interfejsów API Google potwierdzasz, że używając tych interfejsów API, bierzesz na siebie odpowiedzialność za przekazanie wszelkich niezbędnych powiadomień oraz uzyskanie zgód związanych z gromadzeniem tych danych i udostępnianiem ich firmie Google.

Rejestrowanie pary kluczy reCAPTCHA

Aby zarejestrować parę kluczy do użycia z interfejsem SafetyNet reCAPTCHA API, wejdź na stronę rejestracji reCAPTCHA na Androida, a następnie wykonaj te czynności:

  1. W wyświetlonym formularzu podaj te informacje:

    • Etykieta: unikalna etykieta klucza. Zwykle jest to nazwa firmy lub organizacji.
    • Typ reCAPTCHA: wybierz reCAPTCHA w wersji 2, a następnie reCAPTCHA na Androida.
    • Pakiety: podaj nazwę pakietu każdej aplikacji, która używa tego klucza interfejsu API. Aby aplikacja mogła korzystać z interfejsu API, wpisana nazwa pakietu musi dokładnie odpowiadać nazwie pakietu aplikacji. Każdą nazwę pakietu wpisz w osobnym wierszu.
    • Właściciele: dodaj adres e-mail każdej osoby w organizacji, która monitoruje oceny reCAPTCHA aplikacji.
  2. Zaznacz pole wyboru Akceptuję Warunki korzystania z usługi reCAPTCHA.

  3. Wysyłaj alerty do właścicieli: zaznacz to pole wyboru, jeśli chcesz otrzymywać e-maile o interfejsie API reCAPTCHA, a następnie kliknij Prześlij.

  4. Na następnej stronie klucze publiczny i prywatny pojawią się odpowiednio w sekcjach Klucz witryny i Tajny klucz. Klucza witryny używasz podczas wysyłania żądania weryfikacji, a klucza tajnego – podczas sprawdzania tokena odpowiedzi użytkownika.

Dodawanie zależności SafetyNet API

Zanim zaczniesz korzystać z interfejsu reCAPTCHA API, dodaj do projektu interfejs SafetyNet API. Jeśli używasz Android Studio, dodaj tę zależność do pliku Gradle na poziomie aplikacji. Więcej informacji znajdziesz w artykule o konfigurowaniu interfejsu SafetyNet API.

Korzystanie z interfejsu reCAPTCHA API

W tej sekcji opisano, jak wywołać interfejs reCAPTCHA API, aby wysłać żądanie weryfikacji CAPTCHA i otrzymać token odpowiedzi użytkownika.

Wysyłanie żądania weryfikacji

Aby wywołać interfejs SafetyNet reCAPTCHA API, wywołaj metodę verifyWithRecaptcha(). Zwykle ta metoda odpowiada wybraniu przez użytkownika elementu interfejsu, np. przycisku, w aktywności.

Jeśli używasz w aplikacji metody verifyWithRecaptcha(), musisz wykonać te czynności:

  • Przekaż klucz witryny interfejsu API jako parametr.
  • Zastąp metody onSuccess() i onFailure(), aby obsłużyć oba możliwe wyniki zadania żądania weryfikacji. W szczególności, jeśli interfejs API przekazuje instancję ApiException do onFailure(), musisz obsłużyć każdy możliwy kod stanu, który możesz pobrać za pomocą getStatusCode().

Poniższy fragment kodu pokazuje, jak wywołać tę metodę:

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

Sprawdzanie tokena odpowiedzi użytkownika

Gdy interfejs reCAPTCHA API wykonuje metodę onSuccess(), użytkownik pomyślnie przeszedł test CAPTCHA. Ta metoda wskazuje jednak tylko, że użytkownik prawidłowo rozwiązał test CAPTCHA. Nadal musisz zweryfikować token odpowiedzi użytkownika z serwera backendu.

Aby dowiedzieć się, jak zweryfikować token odpowiedzi użytkownika, przeczytaj artykuł Weryfikowanie odpowiedzi użytkownika.