Google Hesabı ile Login İşlemleri

Merhabalar..
Bir kaç ay aradan sonra, yine ben geldim. 🙂
Geldim ve artık gitme gibi bi niyetim yok. (Umarım gitmem)
Neyse..

Bu makalede http://umutonur.com/ceviri-google-hesabi-ile-login-olma/ adresinde yapmış olduğum çevirideki olayları ayrıntılarıyla anlatmaya çalışacağım..

Öncelikle boş bir Android Projesi oluşturup bu projemizi Firebase uygulamamıza bağlayalım..

(Android Studio ile bağlamak için : http://umutonur.com/android-studio-2-2-ve-yenilenen-firebase-kullanimi/)

Projemizi Android Studio ile Firebase uygulamamıza bağladıktan sonra Firebase Assistant  penceresine gelerek;
Authentication > Email and Password Authentication kısmındaki Add Firebase Authentication to your app butonuna tıklayarak login olabilmek için gerekli bağımlılıkları (dependencies) projemize ekleyelim..

Tüm işlemler başarılı bir şekilde gerçekleşirse Firebase Assistant görünümü şu şekilde olacaktır.

firebase google login
Gerekli bağımlılıkları projemize entegre ettikten sonra küçük bir işlem daha kalıyor.

build.gradle (app) dosyasına geldiğimizde bağımlılıkların şu şekilde ayarlanmış olduğunu göreceksiniz.

küçük dikdörgen içinde olan

kısmını

şeklinde düzenleyip “Sync Now” yaparak entegrasyon işlemlerini tamamlıyoruz. Burada 10.0.1 versionu benim kullandığım Android SDK‘de yüklü olan Google Play Services‘in versiyonudur.
Yani Firebase uygulamanızı bağladığınızda eklenen firebase-auth ‘un versiyonu ne ise, play-services-auth ‘un versiyonununda aynı olması sizin açınızdan hayırlı olacaktır 🙂

ÖNEMLİ NOT : Uygulamanızın çalışabilmesi için Google Play Services‘in yüklü olması gerekmektedir. Eğer yüklü değilse SDK Manager‘dan yüklemelisiniz.

Burada eklemiş olduğumuz;
“firebase-auth” paketi  Firebase üzerinde yetkilendirme işlemleri için,
“play-services-auth” paketi ise Google hesabımızla oturum açabilmemiz için gerekli sınıfları barındırmaktadır.

Ekleme-çıkarma-entegre etme-ırt-zırt işlemleri hallettikten sonra, nihayet kodlara geçiyoruz..

Sign In ve Sign Out işlemleri için activity_main.xml ‘e 2 adet buton ekleyelim..

 

Arayüz Tasarımı :

 

Arayüzü’de hallettiğimize göre asıl işlemlere geçebiliriz..

Öncelikle; Firebase üzerindeki yetkilendirme işlemlerini yönetebilmek için bir FirebaseAuth nesnesine, bu işlemlerin sonuçlarını takip edebilmek için de FirebaseAuth sınıfı içerisindeki AuthStateListener dinleyicine ihtiyaç duyarız.

Özetle; asıl sign in veya sign out işlemi FirebaseAuth nesnesi üzerinden yapılır. Bu işlemler gerçekleştiğinde ise AuthStateListener dinleyicisi tetiklenir ve bize yapılan işlem hakkında bilgi verir.

Bildiğiniz üzere Firebase üzerinde yetkilendirme için çeşitli yöntemler mevcuttur. (Email & Şifre yöntemi, Facebook Hesabı ile yetkilendirme, Twitter Hesabıyla yetkilendirme gibi..) Google Hesabıyla yetkilendirme de bunlardan biridir. Firebase üzerindeki yetkilendirme işlemlerinin yönetildildiği FirebaseAuth  sınıfı; hangi yöntemi seçersek seçelim, seçtiğimiz yönteme bağlı hesap ile bağlantı kurmak zorundadır.
Yani, biz Google Hesabıyla yetkilendirme yöntemini seçtiğimize göre; FirebaseAuth nesnesinin, Google Hesabımızla bağlantı kurması gerekir. Bu bağlantı işlemi de GoogleApiClient sınıfı aracılığıyla gerçekleştirilir.

Toparlayacak olursak;
FirebaseAuth sınıfı:
AuthStateListener sayesinde yetkilendirme işlemlerini takip eder;
GoogleApiClient sınıfı sayesinde de Login olabilmek için kullanacağımız Google Hesabımızla bağlantı kurar.

ve başlıyoruz… (hele şükür..)

Sırasıyla; FirebaseAuth nesnemizi (mAuth), AuthStateListener dinleyicimizi (mAuthStateListener) ve GoogleApiClient nesnemizi (mGoogleApiClient) tanımlıyoruz.
Farkettiğiniz üzere burada GoogleApiClient içerisindeki OnConnectionFailedListener dinleyicisini de dahil ettim. Bu dinleyici; adındanda anlaşılacağı gibi, Google Hesabı ile yapılan bağlantının başarısız olduğu durumlarda tetiklenir.

Bu kısımdaki 67 değeri isteğe bağlı bir değerdir. Siz istediğiniz değeri verebilirsiniz. Bununla ilgili ayrıntıya daha sonra gireceğim.

mAuth ve mAuthListener nesnesini oluşturuyoruz..

Uygulama içerisinde bir yetki durumu değiştiğinde dinleyici tetiklenir ve onAuthStateChanged() metodu çalışır. Burada yetki durumunun değişimi ile kastettiğim şey şudur:

Kullanıcı Google Hesabı ile (yada Facebook, Twitter v.s..) Login olduğunda; başlangıçta yetkisiz olan kullanıcı Firebase üzerinde yetkili hale gelmiş olmaktadır. Bu da yetki durumunun değişmesi anlamına gelmektedir. Aynı durum Logout olduğunda da gerçekleşir. Kullanıcı yetkili konumdan yetkisiz konuma geçmiş, yani yetki durumu değişmiş olmaktadır.

Kullanıcı, Firebase üzerinde yetkili (login) olduğunda FirebaseAuth nesnesi üzerinde yeni bir FirebaseUser nesnesi oluşturulur, ve kullanıcıya ait bilgiler bu nesneye aktarılır.

FirebaseAuth üzerinde bir FirebaseUser nesnesinin oluşturulmuş olması demek; programatik açıdan bu nesnenin var olduğunu yani bellekte yer kapladığı anlamına gelmektedir. Bu da FirebaseUser nesnesinin null olmadığını gösterir.

 

Kullanıcı, Firebase üzerinde yetkisi sahibi olduğunda FirebaseUser nesnesi null olmadığına göre; aksi durumda da yani Kullanıcı Firebase üzerinde yetki sahibi değil ise FirebaseUser nesnesi oluşturulmamış olacak; dolayısıyla da nesne null değerine eşit olacaktır.

FirebaseUser nesnesinin null değerine eşit olması; Kullanıcının yetkisiz olduğuna yani herhangi bir oturumun açık olmadığına işaret eder.

Buna göre; eğer kullanıcı açık olan oturumu kapattığı zaman sırasıyla:
FirebaseUser nesnesinin değeri null olacak,
onAuthStateChanged() metodu çalıştırılacak,
FirebaseUser tipindeki user nesnesi getCurrentUser() metodundan referans alacak (yani user = null olacak),
if (user != null) koşulu sağlamadığı için else { } kısmına geçecek,
– ve Google Login : Oturum Kapandı. yazısını Logcat’e basacaktır.

Sign In ve Sign Out butonlarına basıldığında gerçekleşecek işlemler :

GoogleApiClient işlemleri :

bu kısımla ilgili ayrıntıya girmiyorum. Yoksa makaleyi bitiremeyeceğim 🙂

Şimdi gelelim signIn() ve signOut() metodlarına..

mAuth.signOut() metodu Kullanıcının Firebase üzerindeki oturumunu kapatır, yani kullanıcıyı yetkisiz hale getirir.

GoogleSignInApi.signOut() metodu ise Firebase ile bağlamış olduğunuz Google Hesabının oturumunu kapatır. Bu Google oturumu kapatma işlemi sona erdiğinde onResult() metodu çalışır.

signIn() metoduna gelecek olursak

Ilk olarak; Google hesabıyla oturum açabilmek için signInIntent adında bir istek (Intent) oluşturuyoruz.

sonrasında istek kodu requestCode_SIGN_IN (yani 67) olan bu isteği sistemimize yolluyoruz. Burada ki startActivityForResult() metodundan biraz bahsetmek gerekirse; Türkçe’ye çevirdiğimiz zaman “Sonuç için aktivite başlat” anlamına gelen bu metod, sistemden herhangi bir aktivite başlatmasını ve aktivitenin sonucunu bize bildirmesini istediğimiz zamanlar kullanılır.

Olay şu şekildedir.
– Uygulamamız;Sistemde kayıtlı olan (Yada kaydedeceğimiz) Google hesabımız ile oturum açabilmek için GoogleSignInApi aracılığı ile bir istek oluşturur. Yani burada bizim aktivite olarak nitelendirdiğimiz şey aslında Google Hesap bilgilerini kullanarak oturum açabilmektir.
– Oluşturduğumuz bu isteği gerçekleştirebilmek, yani aktiviteyi başlatabilmek için startActivityForResult() metodunu çalıştırırız.
startActivityForResult() metodu çalıştığında da Override ettiğimiz onActivityResult() metodu tetiklenir..

Eveeet.. şimdi geldik requestCode olayına… Uygulama içerisinde birden fazla aktivite başlatma isteği yapılabilir. Her başlatma isteği gerçekleştiğinde aynı onActivityResult() metodu tetiklenecektir.. Yapılan her aktivite isteğine göre gerçekleşecek işlemler farklı olacağından, bu işlemleri bir birinden ayırmak; yani hangi isteğe göre hangi işlemlerin yapılacağını belirlemek amacıyla yapılan her aktivity isteğinde bir istek kodu (requestCode) belirtilir..

Yani;
startActivityForResult(intent, 67) metodu çalıştığında

Kodlarımıza dönecek olursak;

 

Bu kısmında ayrıntısına girmeyeceğim.. Logcat mesajlarından hangi bölümde ne gibi olayların oluştuğunu az çok anlayabilirsiniz.
Login işleminin akışını da yine Logcat mesajlarından takip edebilirsiniz.

Şimdilik sizlere anlatacaklarım bu kadar..

Kaynak kodlar için :

https://github.com/umon/GoogleLoginExample

You may also like...

2 Responses

  1. Anonim dedi ki:

    Bilgilendirmelerin için teşekkürler

  2. Anonim dedi ki:

    anlatım acısından güzel örnek olmus aga:)

Bir Cevap Yazın