SafetyNet hizmeti, uygulamanızı kötü amaçlı trafiğe karşı korumak için kullanabileceğiniz bir reCAPTCHA API içerir.
reCAPTCHA, uygulamanızı spam ve diğer kötüye kullanım amaçlı işlemlerden korumak için gelişmiş bir risk analizi motoru kullanan ücretsiz bir hizmettir. Hizmet, uygulamanızla etkileşimde bulunan kullanıcının insan yerine bot olabileceğinden şüphelenirse uygulamanızın çalışmaya devam edebilmesi için bir insanın çözmesi gereken CAPTCHA sunar.
Bu dokümanda, SafetyNet'teki reCAPTCHA API'nin uygulamanıza nasıl entegre edileceği açıklanmaktadır.
Ek Hizmet Şartları
reCAPTCHA API'ye erişerek veya kullanarak Google API'leri Hizmet Şartları'nı ve aşağıdaki reCAPTCHA Hizmet Şartları'nı kabul etmiş olursunuz. API'lere erişmeden önce lütfen geçerli tüm şartları ve politikaları okuyup anlayın.
reCAPTCHA Hizmet Şartları
reCAPTCHA API'nin cihaz ve uygulama verileri gibi donanım ve yazılım bilgileri ile bütünlük kontrollerinin sonuçlarını toplayıp söz konusu verileri analiz için Google'a göndererek çalıştığını anlayıp onayladığınız varsayılır. Google API'leri Hizmet Şartları Bölüm 3(d) uyarınca, API'leri kullanmanız halinde bu verilerin toplanıp Google'la paylaşılması için gerekli her türlü bildirimi yapma veya onayı verme sorumluluğunun tarafınıza ait olduğunu kabul etmiş olursunuz.reCAPTCHA anahtar çifti kaydetme
SafetyNet reCAPTCHA API ile kullanılacak bir anahtar çifti kaydetmek için reCAPTCHA Android kayıt sitesine gidin ve aşağıdaki adımları uygulayın:
Görüntülenen formda aşağıdaki bilgileri sağlayın:
- Etiket: Anahtarınız için benzersiz bir etiket. Genellikle şirketinizin veya kuruluşunuzun adını kullanırsınız.
- reCAPTCHA türü: reCAPTCHA s2'yi, ardından reCAPTCHA Android'i seçin.
- Paketler: Bu API anahtarını kullanan her uygulamanın paket adını girin. Bir uygulamanın API'yi kullanabilmesi için girdiğiniz paket adının uygulamanın paket adıyla tam olarak eşleşmesi gerekir. Her paket adını kendi satırına girin.
- Sahipler: Kuruluşunuzda uygulamanızın reCAPTCHA değerlendirmelerini izleyen her bir kişi için e-posta adresi ekleyin.
reCAPTCHA Hizmet Şartları'nı kabul ediyorum onay kutusunu işaretleyin.
Sahiplere uyarı gönder: reCAPTCHA API ile ilgili e-posta almak istiyorsanız bu onay kutusunu işaretleyin ve Gönder'i tıklayın.
Ardından açılan sayfada, genel ve gizli anahtarlarınız sırasıyla Site anahtarı ve Gizli anahtar altında görünür. Doğrulama isteği gönderirken site anahtarını, kullanıcı yanıt jetonunu doğrularken ise gizli anahtarı kullanırsınız.
SafetyNet API bağımlılığını ekleme
reCAPTCHA API'yi kullanmadan önce SafetyNet API'yi projenize ekleyin. Android Studio kullanıyorsanız bu bağımlılığı uygulama düzeyindeki Gradle dosyanıza ekleyin. Daha fazla bilgi için SafetyNet API kurulumu başlıklı makaleyi inceleyin.
reCAPTCHA API'yi kullanma
Bu bölümde, CAPTCHA doğrulama isteği göndermek ve kullanıcı yanıt jetonunu almak için reCAPTCHA API'nin nasıl çağrılacağı açıklanmaktadır.
Doğrulama isteğini gönderme
SafetyNet reCAPTCHA API'yi çağırmak için
verifyWithRecaptcha()
yöntemini kullanırsınız. Bu yöntem genellikle kullanıcının etkinliğinizde bir kullanıcı arayüzü öğesi (ör. düğme) seçmesine karşılık gelir.
Uygulamanızda verifyWithRecaptcha() yöntemini kullanırken şunları yapmanız gerekir:
- API site anahtarınızı parametre olarak iletin.
- Doğrulama isteği görevinin her iki olası sonucunu da işlemek için
onSuccess()veonFailure()yöntemlerini geçersiz kılın. Özellikle API,onFailure()içine birApiExceptionörneği iletirsegetStatusCode()kullanarak alabileceğiniz her olası durum kodunu işlemeniz gerekir.
Aşağıdaki kod snippet'i, bu yöntemin nasıl çağrılacağını gösterir:
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()); } } }); }
Kullanıcı yanıt jetonunu doğrulama
reCAPTCHA API, onSuccess() yöntemini yürüttüğünde kullanıcı CAPTCHA doğrulamasını başarıyla tamamlamış demektir. Ancak bu yöntem yalnızca kullanıcının CAPTCHA'yı doğru şekilde çözdüğünü gösterir. Kullanıcının yanıt jetonunu arka uç sunucunuzdan doğrulamanız gerekir.
Kullanıcının yanıt jetonunu nasıl doğrulayacağınızı öğrenmek için Kullanıcının yanıtını doğrulama bölümüne bakın.