Retrofit ve Slim Framework Yardımıyla Login İşlemi
Merhaba, bu yazımda sizlere Restful Web Service ile uygulamamızda nasıl etkin bir login activitysi oluşturacağımızdan bahsedeceğim. Öncelikle işin web service kısmını halledelim. Bunun için Composerı kuralım. Composer güncel bir şekilde kütüphanelerimizi kullanmamızı sağlar. Bununla ilgili detaylı bir yazıyı da yakın tarihlerde sizlere sunacağım. Şimdi işlemlerimize geçelim. Composerımızı şuradan indirelim. Kurulumumuzu gerçekleştirdikten sonra Slim Frameworku indirmek için composer.json dosyasını oluşturmamız gerekiyor. İçeriği ise şu şekilde olmalı. Ben Slim 2.0′ ı kullanacağım.
{
Şimdi ise composerımızı çalıştırmamız gerekmekte. Bunun için Komut Satırında proje dizinine gidilerek şu komutu çalıştırmalıyız.
"require": {
"slim/slim": "~2.0",
}
}
composer install
“vendor” isimli klasörümüz oluşmuş olmalı.Bu şekilde kullanmak istediğimiz frameworkleri projemize ekleyebiliriz.
Yukarıda görülen kodu da proje sayfamıza eklersek vendor klasörünün içindeki dosyalar da kullanılabilir hale gelecektir. İşin bu kısımlarını kolayca hallettikten sonra işin php tarafınıza geçebiliriz.
Öncelikle databaseimizi kullanabilmek için bilgilerimizi ekleyelim. Veriyi elde edeceğimiz siteyi, kullanıcı adımızı, şifremizi ve veritabanı adımızı ekleyelim.
require 'vendor/autoload.php'
$app = new \Slim\Slim();
Daha sonra ise index sayfasına gönderdiğimiz parametreler yardımıyla bir sonuç döndürmemiz gerekiyor. “example.com/index.php/api?email=kullaniciEmaili&sifre=kullaniciSifresi” iki değer döndürmeli. “email” ve “sifre” ikilisi yardımlarıyla yaptığımız sorguların doğru ise 1 değilse 0 döndürmesi gerekmektedir. 1 döndürürse status success, 0 döndürürse failed ifadesini JSON tipinde ekrana basıyoruz.
{
function getDb()
{
return $db = new MysqliDb ('example.com', 'name_user', '123456', 'name_db');
}
{
Bu kodlarımızı çalıştırdıktan sonra karşımıza gelen ekran şu şekilde olmalı.
$app->get("/api", function () use ($app) {
$request = $app->request();
$email= $request->get('email');
$sifre = $request->get('sifre');
$db = getDb();
$db->where ('email', $email);
$db->where ('sifre', $sifre);
$result = $db->get('tabloAdi');
if (sizeof($result) == 0) {
echo '{"status":"failed"}';
} else {
echo '{"status":"success"}';
}
});
$app->run();
Browserların JSON eklentileri kullanarak, karmaşık JSON kodlarınızı browserlarda bu şekilde görüntüleyebilirsiniz. Google Chrome’ da JSON View, JSON Viewer gibi eklentileri kullanabilirsiniz. İşin Android kısmına geçelim şimdi de.Öncelikle build.gradle’ in dependencies kısmına aşağıdaki kodları ekleyerek retrofit2 ve okhttp3 kütüphanelerini kullanılabilir hale getirelim. Ardından ise build.gradle’ ı senkronize etmeliyiz.
Daha sonra “api?email=kullaniciEmaili&sifre=kullaniciSifresi” kısmının döndüreceği JSON tipindeki veriyi kullanabilmemiz için bir model ve interface oluşturmalıyız. Model sınıfımız aşağıdaki gibi olmalıdır.
{
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
{
İnterface ise şöyle olmalıdır.
private String status;
public ModelClass(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
{
Interfaceimizi de oluşturduktan sonra login işlemini gerçekleştirmeliyiz. Öncelikle gerekli tanımlamaları yapmalıyız.
public interface JSONApi{
@GET("deneme/index.php/api")
Call
}
{
URL’ imizi belirttikten sonra onCreate methodumuzu doldurmalıyız. Layoutumuzda 2 adet edittext ve 1 adet button bulunuyor. Edittextlerimizin idleri edittextEmailId ve edittextPasswordId, butonumuzun ise buttonGiris. Butonumuzu tıkladığımız zaman yapılacak işlemleri de setOnClickListener kısmına yazıyoruz.
private EditText email, sifre;
private Button button;
public static Retrofit retrofit = null;
static OkHttpClient.Builder httpClient;
public static final String URL = "http://www.example.com/";
email ve sifre doğru ise MainActivity sayfasından Profil sayfasına yönlendirme yapıyoruz.
email = (EditText) findViewById(R.id.edittextEmailId);
sifre = (EditText) findViewById(R.id.edittextPasswordId);
buton= (Button) findViewById(R.id.buttonGiris);
httpClient = new OkHttpClient.Builder();
retrofit = new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
button.setOnClickListener(new View.OnClickListener() {
JSONApi service = retrofit.create(JSONApi.class);
@Override
public void onClick(View v) {
Call
mService.enqueue(new Callback
@Override
public void onResponse(Call
ModelClass mLoginObject = response.body();
String returnedResponse = mLoginObject.getStatus();
if (returnedResponse.toString().equals("success")) {
Intent intent=new Intent(MainActivity.this, Profil.class);
startActivity(intent);
}
else if (returnedResponse.trim().equals("failed")) {
email ve şifre ifadesi yanlış ise Toast mesaj basıyoruz.
Toast.makeText(MainActivity.this, "Yanlış şifre ve email kombinasyonu. Düzelterek tekrar deneyiniz.", Toast.LENGTH_LONG).show();
}
}
@Override
onFailure methodu ise internetin kullanılamadığı durumlarda çalışan methottur. Umarım yardımcı olmuşumdur. Sağlıcakla kalın.
public void onFailure(Call
Toast.makeText(MainActivity.this, "Internet baglantnizi kontrol ediniz", Toast.LENGTH_LONG).show();
}
}
);
}
}
);
}