ReCAPTCHA Android API Kullanımı

Uzun yıllardır oluşturulan  web site, mobil  veya masaüstü yazılımları için  güvenlik önlemlerinin alınması  her zaman önemli ve hassas  bir konu olmuştur.

 Google’da  bundan 10 yıl önce reCAPTCHA teknolojisiyle web sayfalarında  güvenlik önlemini almayı başlamıştı. ReCAPTCHAforumlarda, blogların yorum bölümlerinde, facebook gibi sosyal ağlarda spam yazılarını önlemek için kullanılan bir işlemdir. ReCAPTCHA ihtiyaç duyulmasının en büyük nedenlerinden biride, Vandalist saldırılardan web servisleri korumasıdır.

Bu makalemde ise  Google’ın yeni  çıkarmış olduğu  reCAPTCHA Android API’yi bir Android uygulamasında kullanmayı örnekleyeceğim.

ReCAPTCHA API, mobil cihazlarda aerodinamik bir kullanıcı deneyimi sağlamak için insana ve robotlara ayrı ayrı bilgi verebilmektedir. Sahnenin arkasında risk analizi çalıştıran ve milyonlarca insanın her gün sıfır tıklama ile geçmesine olanak tanıyan en yeni görünmez reCAPTCHA teknolojisini kullanımımıza sunmuştur. Artık mobil kullanıcılar, spam ve istismardan uzak dururken, kesintiye uğramaksızın uygulamanın keyfini çıkarabilirler.

Şimdi ise makale için hazırladığım örneğin ekran görüntüsüne bakalım.

Gördüğünüz üzere,  kullanıcı login işlemi yaparken direk  reCAPTCHA ile doğrulama işlemimizi yapabildik. Birkaç adımda reCAPTCHA API’yi uygulamamızda  nasıl kullanacağımızı görelim.

 1-Android Uygulamaya Kütüphane Yükleme

Android Sdk Manager’ı açtıktan sonra Sdk Tools tabında bulunan Google Repository   seçerek bu özeliği yükleyelim. Sonrasında Android Studio Idesi ile  minSdk versiyonu  14 olan bir proje oluşturuyoruz. Oluşturduğum projemin app dizinin altındaki build.gradle dosyasını açıyoruz. Dependencies kod bloklarının arasına aşağıdaki kodları yerleştirerek  reCAPTCHA kütüphanesini yüklüyoruz.

compile 'com.google.android.gms:play-services-base:11.0.2'
compile 'com.google.android.gms:play-services-basement:11.0.2'
compile 'com.google.android.gms:play-services-safetynet:11.0.2'
compile 'com.google.android.gms:play-services-tasks:11.0.2'

2- Key Değerlerinin Elde Edilmesi

Google  reCAPTCHA API’nin sitesine gmail hesabınızla giriş yapmalısınız. Bu sitede Package Names alanına uygulamanızın paket ismini, Label alanına da bir başlık girmelisiniz. reCAPTCHA servis kullanımını onaylamak için tik alanınız seçtikten sonra kayıt  olmalısınız.

Bu işlemi yaptığınızda site size, uygulamanızda reCAPTCHA API’sini tanıtabilmek için  SecretKey ve SiteKey adında anahtar bilgiler verecektir. Biz bu bilgileri Java kodlarımızda kullanacağız.

3- Java Kodları

Kodda yazdığım açıklamaları biraz inceleyelim.

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.safetynet.SafetyNet;
import com.google.android.gms.safetynet.SafetyNetApi;
public class MainActivity extends AppCompatActivity
implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener{
// Google ReCAPTCHA sistemine giriş yapmanızla verilen key değerlerini buraya giriyoruz
final String SiteKey = "6Lcz4CgUAAAAAGHlQtUMB8VdijHSSS1fh6SBKrNc\n";
final String SecretKey  = "6Lcz4CgUAAAAAOLQHCtoMo7kSeusWDOtzKpSS8bE";
private GoogleApiClient mGoogleApiClient;
Button btnRequest;
TextView tvResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
tvResult = (TextView)findViewById(R.id.result);
btnRequest = (Button)findViewById(R.id.request);
btnRequest.setOnClickListener(RqsOnClickListener);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(SafetyNet.API)
.addConnectionCallbacks(MainActivity.this)
.addOnConnectionFailedListener(MainActivity.this)
.build();
mGoogleApiClient.connect();
}
View.OnClickListener RqsOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
tvResult.setText("");
SafetyNet.SafetyNetApi.verifyWithRecaptcha(mGoogleApiClient, SiteKey)
.setResultCallback(new ResultCallback<SafetyNetApi.RecaptchaTokenResult>() {
@Override
public void onResult(SafetyNetApi.RecaptchaTokenResult result) {
Status status = result.getStatus();
if ((status != null) && status.isSuccess()) {
tvResult.setText("Doğrulamanız basarılı...");
// Kullanıcıyı tanıyıp robot olmadıgını dönen reCAPTCHA servisinin basarılı oldugu
//bölüm.Kullanıcının geri donen token bilgisini almak icinde
//  result.getTokenResult() kullanmalısınız
//Kullanıcının geri donen token bilgisini boş olup olmadgı kontrolu
if (!result.getTokenResult().isEmpty()) {
//Token deger dönüyor
}else{
//Token deger dönmuyor ...
}
} else {
Log.e("MY_APP_TAG", "Error occurred " +
"when communicating with the reCAPTCHA service.");
// status.getStatusCode() kodunu kullanarak reCAPTCHA servisinden dönen hataları tespit edebilirsiniz
}
}
});
}
};
@Override
public void onConnected(@Nullable Bundle bundle) {
Toast.makeText(this, "onConnected()", Toast.LENGTH_LONG).show();
}
@Override
public void onConnectionSuspended(int i) {
Toast.makeText(this,
"onConnectionSuspended: " + i,
Toast.LENGTH_LONG).show();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Toast.makeText(this,
"onConnectionFailed():\n" + connectionResult.getErrorMessage(),
Toast.LENGTH_LONG).show();
}
}

4- Xml Kodları

Burda hazırlamış olduğum basit form arayüzüdür. Siz dilerseniz kendiniz sadece bir buton tanımlayarak, Java tarafında onclick event inde reCAPTCHA metodlarını kullanabilirsiniz.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Email"
android:inputType="textPersonName" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Şifre"
android:inputType="textPersonName" />
<Button
android:id="@+id/request"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Login" />
<TextView
android:paddingTop="15dp"
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

 

Kategori Genel
Etiketler