SafetyNet reCAPTCHA API'si

SafetyNet hizmeti, uygulamanızı kötü amaçlı trafikten korumak için kullanabileceğiniz bir reCAPTCHA API'si içerir.

reCAPTCHA, uygulamanızı spam'e ve kötüye kullanım amaçlı diğer eylemlere karşı korumak için gelişmiş bir risk analizi motoru kullanan ücretsiz bir hizmettir. Hizmet, uygulamanızla etkileşim kuran kullanıcının bot olabileceğinden şüphelenirse uygulamanızın yürütülmeye devam edebilmesi için kullanıcının çözmesi gereken bir CAPTCHA yayınlar.

Bu belgede, SafetyNet'teki reCAPTCHA API'nin uygulamanıza nasıl entegre edileceği açıklanmaktadır.

Ek hizmet şartları

reCAPTCHA API'ye erişerek veya bu API'yi kullanarak Google API'leri Hizmet Şartları'nı ve aşağıdaki reCAPTCHA Hizmet Şartları'nı kabul etmiş olursunuz. Lütfen API'lere erişmeden önce 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 bilgilerini ve bütünlük denetimi sonuçlarını toplayıp bu 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 ile 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:

  1. 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 ve 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ı, uygulamanın paket adıyla tam olarak eşleşmelidir. Her paket adını kendi satırına girin.
    • Sahipler: Kuruluşunuzda uygulamanızın reCAPTCHA değerlendirmelerini izleyen her kişi için bir e-posta adresi ekleyin.
  2. reCAPTCHA Hizmet Şartları'nı kabul edin onay kutusunu işaretleyin.

  3. Uyarıları sahiplere gönder: reCAPTCHA API ile ilgili e-postalar almak istiyorsanız bu onay kutusunu işaretleyin, ardından Gönder'i tıklayın.

  4. Bir sonraki sayfada, ortak ve özel anahtarlarınız sırasıyla Site anahtarı ve Gizli anahtar altında gösterilir. Doğrulama isteğini 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ı ekleyin

reCAPTCHA API'yi kullanmadan önce projenize SafetyNet API'yi 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önderin

SafetyNet reCAPTCHA API'yi çağırmak için verifyWithRecaptcha() yöntemini çağırırsınız. Genellikle bu yöntem, kullanıcının etkinliğinizde bir düğme gibi bir kullanıcı arayüzü öğesi seçmesine karşılık gelir.

Uygulamanızda verifyWithRecaptcha() yöntemini kullanırken aşağıdakileri yapmanız gerekir:

  • API site anahtarınızı parametre olarak iletin.
  • Doğrulama isteği görevinin olası iki sonucunu da işlemek için onSuccess() ve onFailure() yöntemlerini geçersiz kılın. Özellikle API, ApiException örneğini onFailure()'ye iletiyorsa getStatusCode() kullanarak alabileceğiniz her olası durum kodunu işlemeniz gerekir.

Aşağıdaki kod snippet'inde bu yöntemin nasıl çağrılacağı gösterilmektedir:

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 çözdüğünü gösterir. Kullanıcının yanıt belirtecini 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 başlıklı makaleyi inceleyin.