Usługa SafetyNet obejmuje interfejs reCAPTCHA API, którego możesz używać do ochrony aplikacji przed złośliwym ruchem.
reCAPTCHA to bezpłatna usługa, która używa zaawansowanego mechanizmu analizy ryzyka, aby chronić Twoją aplikację przed spamem i innymi nadużyciami. Jeśli usługa podejrzewa, że użytkownik korzystający z aplikacji może być botem, a nie człowiekiem, wyświetla zabezpieczenie CAPTCHA, które musi rozwiązać człowiek, aby aplikacja mogła kontynuować działanie.
Z tego dokumentu dowiesz się, jak zintegrować interfejs reCAPTCHA API z SafetyNet z aplikacją.
Dodatkowe warunki korzystania z usługi
Uzyskując dostęp do interfejsu reCAPTCHA API lub korzystając z niego, akceptujesz Warunki korzystania z interfejsów API Google oraz poniższe Warunki korzystania z usługi reCAPTCHA. Przed uzyskaniem dostępu do 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, i 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, otwórz stronę rejestracji reCAPTCHA na Androida, a potem wykonaj te czynności:
W wyświetlonym formularzu podaj te informacje:
- Etykieta: unikalna etykieta klucza. Zwykle używasz nazwy swojej firmy lub organizacji.
- Typ reCAPTCHA: wybierz reCAPTCHA w wersji 2, a potem 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 w Twojej aplikacji.
Zaznacz pole wyboru Akceptuję Warunki korzystania z usługi reCAPTCHA.
Wysyłaj alerty do właścicieli: zaznacz to pole wyboru, jeśli chcesz otrzymywać e-maile dotyczące interfejsu reCAPTCHA API, a następnie kliknij Prześlij.
Na stronie, która się pojawi, klucze publiczny i prywatny będą widoczne odpowiednio w sekcjach Klucz witryny i Klucz tajny. Klucza witryny używasz podczas wysyłania żądania weryfikacji, a klucza tajnego – podczas weryfikowania tokena odpowiedzi użytkownika.
Dodaj zależność interfejsu SafetyNet API
Zanim zaczniesz korzystać z interfejsu reCAPTCHA API, dodaj do projektu interfejs SafetyNet API. Jeśli używasz Androida Studio, dodaj tę zależność do pliku Gradle na poziomie aplikacji. Więcej informacji znajdziesz w artykule Konfigurowanie interfejsu SafetyNet API.
Korzystanie z interfejsu API reCAPTCHA
Z tej sekcji dowiesz się, jak wywołać interfejs reCAPTCHA API, aby wysłać żądanie weryfikacji CAPTCHA i otrzymać token odpowiedzi użytkownika.
Wysyłanie prośby o weryfikację
Aby wywołać interfejs SafetyNet reCAPTCHA API, wywołaj metodę
verifyWithRecaptcha()
. Zwykle ta metoda odpowiada wybraniu przez użytkownika elementu interfejsu, np. przycisku, w Twojej aktywności.
Gdy używasz w aplikacji metody
verifyWithRecaptcha()
, musisz wykonać te czynności:
- Przekaż klucz witryny interfejsu API jako parametr.
- Zastąp metody
onSuccess()
ionFailure()
, aby obsługiwać oba możliwe wyniki zadania związanego z żądaniem weryfikacji. W szczególności, jeśli interfejs API przekazuje instancjęApiException
doonFailure()
, 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()); } } }); }
Weryfikowanie tokena odpowiedzi użytkownika
Gdy interfejs reCAPTCHA API wykona metodę
onSuccess()
, oznacza to, że użytkownik pomyślnie rozwiązał test CAPTCHA. Ta metoda wskazuje jednak tylko, że użytkownik prawidłowo rozwiązał zadanie CAPTCHA. Nadal musisz zweryfikować token odpowiedzi użytkownika na serwerze backendu.
Aby dowiedzieć się, jak zweryfikować token odpowiedzi użytkownika, przeczytaj artykuł Weryfikowanie odpowiedzi użytkownika.