Firebase + Google Girişi Yapma

Selamlar herkese.

Bildiğiniz üzere Firebase üzerinden uygulamalarımıza kullanıcı kayıtları oluşturma,giriş yaptırma gibi işlevleri çok basit bir şekilde yapabiliyoruz.Ama iş Google yardımıyla giriş yaptırmaya gelince biraz zor oluyor.Aslında oluyor gibi gözüküyor ama hiçte öyle değil.Gelin bugün bunu birlikte yapalım.

Öncelikle projemize Firebase kurulum aşamalarını yaptığınızı varsayıyorum ve google girişini aktif etmeye geçiyorum.

Google girişini aktif etme

 

Daha sonraysa uygulamamızdan SHA-1 anahtarını almamız lazım.

SHA-1 (Secure Hash Algorithm) : Çeşitli karma şifreleme işlevlerinden biridir.Genellikle bir dosyanın değiştirilmediğini doğrulamak için kullanılır. Bu, dosya iletilmeden önce bir sağlama toplamı üretilerek ve sonra tekrar hedefine ulaştığında yapılır. İletilen dosya yalnızca her iki sağlama toplamı aynıysa orijinal olarak kabul edilebilir. Burada key ekleme amacımızda android cihazımızdan gönderilen key ile veritabanındaki keyin eşleşmesini sağlamaktır.Yani başka bir cihazdan veritabanına izinsiz girişi engellemektir.

Sha-1 anahtarı alma ve Firebase’ye ekleme

NOT : Son aşamada indirdiğimiz “google-services.json” dosyasını Androi Studio içerisine atmayı unutmayın.Başta firebase kurulumunu yaparken indirip atmıştık.Bu yeni servis dosyasını onunla değiştirin.

 

 

Google girişini ve sha-1 anahtarını aktif ettiğimize göre şimdide Android Studio’ya iki kütüphane ekliyoruz.

app/build.gradle
 
implementation 'com.google.firebase:firebase-auth:18.1.0'
implementation 'com.google.android.gms:play-services-auth:17.0.0'

asdasd

(Kütüphane ekleme)

 

Bu ayarlamaları yaptıktan sonra kod kısmına geçebiliriz.

MainActivity
 
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build();
  • Google’den kullanıcı verilerini istemek için öncelikle yapılandırmamız lazım.
  • Örneğin, Google Oturum Açma’yı, kullanıcıların kimliğini ve temel profil bilgilerini isteyecek şekilde yapılandırmak için, DEFAULT_SIGN_IN parametresiyle bir GoogleSignInOptions nesnesi oluşturuyoruz.

Not :  Eğer kullanıcının temel özellikleri hariç (isim,email,profil resmi vs) başka bilgileri ve Google Api’de başka özelliklere erişim istenecekse bunu requestScopes olarak belirtmemiz lazım. Daha fazla bilgi için:

https://developers.google.com/identity/sign-in/android/additional-scopes

https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInOptions.Builder#requestScopes(com.google.android.gms.common.api.Scope,%20com.google.android.gms.common.api.Scope…)

 

 

Ardından oturum açma etkinliği için GoogleSignInClient nesnesi oluşturuyoruz.

MainActivity
 
private GoogleSignInClient mGoogleSignInClient;
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

 

 

Şimdiyse Google giriş butonu oluşturalım.

activity_main.xml
 
<com.google.android.gms.common.SignInButton
 android:onClick="google_giris_butonu"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

 

Şimdide tıklama işlemini yaptıralım ve tıklama sonucuna göre giriş yapılıp yapılmayacığını kontrol edelim.

MainActivity
 
    public void google_giris_butonu(View view) {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, 99);
    }

 

Activity sonucuna göre Google ile giriş yapılıp yapılmadığını onaylatıyoruz.

Bu adım sadece Google ile giriş yapılıp yapılmadığının denetlendiği kısım.Firebase ile doğrulama kısmı bir sonraki metotta yapılacaktır.

MainActivity
 
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 99) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                // Google Oturum Açma başarılı oldu,Firebase 
                // ile kimlik doğrulaması yapılması gerekiyor.
                 
                GoogleSignInAccount account = task.getResult(ApiException.class);
                firebaseAuthWithGoogle(account);
            } catch (ApiException e) {
                
                //Google girişi başarısız oldu
            }
        }
    }

 

 

Burada da üstte belirttiğim gibi Google oturum açması başarılıyken son aşama olan Firebase ile kimlik doğrulama aşaması yapılacaktır.

MainActivity
 
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    FirebaseAuth.getInstance().signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Firebase bağlantısı başarılı oldu.
                        // Sonraki sayfaya veya işleme geçebilirsiniz.
                    } 
                    else {
                        // Firebase bağlantısıbaşarısız oldu.
                        // Hata mesajı burada gösterilecektir.
                    }
                }
            });
}

 

Eğer sadece Google girişi yapacak ve başka bir veritabanı kullanacak olsaydık onActivityResult metotu altında girişi yapacaktık.Ama firebase kullandığımız için iki aşamalı işlem yapıyor.Neden derseniz de:

  • Bir kullanıcı ilk kez oturum açtıktan sonra, yeni bir kullanıcı hesabı oluşturulur ve kimlik bilgileriyle (yani kullanıcı adı ve şifresi, telefon numarası veya kimlik doğrulaması sağlayıcı bilgisi) Firebase’ye bağlanır.
  • Bu yeni hesap Firebase projenizin bir parçası olarak saklanır ve kullanıcının nasıl oturum açtığından bağımsız olarak, projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir

 

 

  • Şimdi de Google girişi esnasında kullanıcıdan izin almamız gerekiyor.Bunun için de Google Api’lerden uygulamamızı etkinleştirmemiz gerekiyor.
  • Linke gidiyoruz : https://console.developers.google.com/apis ve sol üste basarak uygulamamızı bulup seçiyoruz.

 

 

  • Uygulama Adı dediği yer kullanıcı google ile giriş yaparken izin verdiği kısımda göreceği uygulama ismidir.
  • Uygulama Logosu kullanıcının uygulama isminin yanında göreceği logodur.
  • Kapsam Ekle kısmına dikkat edilmesi gerekiyor.Eğer üstte belirttiğim gibi kullanıcıdan ekstra izinler almışsanız bu aldığınız izinleri bu kapsam ekle ksımında seçmeniz lazım.Eğer kullanıcıdan herhangi bir ekstra izin almamışsanız , googlenin verdiği kodları yani benim üstte paylaştığım kodları kullanıyorsanız ekstra kapsam eklemenize gerek yok.
  • Kaydet diyerek çıkıyoruz ve uygulamamızın çalıştığına şahit oluyoruz 🙂

 

Son Not : Uygulamamız şu anda debug modda çalışacaktır.Ama play storeye yüklediğimizde veya imzalanmış apk çıkartıp bunu kurduğumuzda çalışmayacaktır.Bunun sebebide firebaseye debug modda aldığımız sha1 anahtarını eklemiş olmamız. E peki bu sorunu nasıl çözeceğim derseniz sizi şöyle diğer yazıma alayım 🙂

https://iamcodder.com/2019/07/15/firebase-googlesignin-error-code-10/

 

Okuduğunuz için teşekkür eder iyi çalışmalar dilerim…

 

Kaynakça :

  1. https://www.lifewire.com/what-is-sha-1-2626011
  2. https://firebase.google.com/docs/auth/android/google-signin
  3. https://developers.google.com/identity/sign-in/android/sign-in