Firebase Authentication

By | 17 Mayıs 2021

Yeni ders serime hoş geldiniz. Bundan önce java kullanarak firebase’i anlattığım 8-10 tane içeriğim vardı ve bazı kısımları güncel değildi. Kotlin’e geçmem ve kaynakları daha güncel tutmak için bu seriye yeniden başladım. Şu anda da ilk dersi okumaktasınız.

Firebase’in belli bir aşamaya kadar ücretsiz ve kolay bir veri tabanı hizmeti sunduğunu önceden belirtmek isterim. Google tarafından desteklenen, sürekli geliştirilmeye çalışılan ve birçok işi bizim yerimize hazır sistemlerle yerine getiren bir veri tabanıdır. Bunun gibi detaylara burada daha fazla yer vermek istemiyorum. Firebase’in avantaj ve dezavantajlarını kolaylıkla kendi sitesinden öğrenebilirsiniz. Ben şimdi nasıl kullanılacağını örnekler üzerinden göstermeye çalışacağım.

Firebase, kendi içerisinde birkaç bölüme ayrılmakta. Biz 3 ana konu üzerinden işleyeceğiz ve ileriki zamanlarda diğer kısımlara da değiniriz. Bunlar;

  • Authentication
  • Firestore
  • Storage

Authentication, kullanıcı işlemlerini ilgilendiren bir bölümdür. Burada kullanıcı oluşturma, onaylatma, silme ve güncelleme gibi birçok işlem hızlıca yapılabilinir.

Firestore, verilerin tutulduğu bölümdür. Burada String, int, boolean vb türde veriler tutulup üzerlerinde işlemler yapılabilinir. Bundan önce RealtimeDatabase kullanılıyordu ama bunun çıkmasıyla beraber buraya bir geçiş oldu. Bu sebepten Firestore’u işleyeceğiz. İleride belki RealtimeDatabase’i de işleyebiliriz.

Storage, dosyaların tutulduğu bölümdür. Burada belge, müzik, resim vb şeyleri tutabiliriz.

3 ana konumuzu öğrendiğimize göre ilk dersimizin konusu olan Authentication konusuna artık yavaştan girelim.

Firebase kullanırken internet üzerinden işlemler yapacağımızdan dolayı internet iznini vermemiz gerekir. Manifest dosyasında aşağıdaki gibi izin vermeniz yeterlidir.

<uses-permission android:name="android.permission.INTERNET"/>

Not: Firebase kullanarak geliştirdiğiniz bir uygulamada internet izni vermeden uygulamayı çalıştırırsanız daha sonradan izni verseniz bile işlemleriniz gerçekleşmeyebilir. Bu durumda izni uygulamayı daha ilk geliştirirken verin. Unutursanız da uygulamayı cihazdan kaldırıp tekrar yüklerseniz düzelecektir.

Authentication Kurulum

Kurulum işlemlerinde önceden çok uzun adımlar yer almaktaydı. Bugünün tarihi ile beraber bende bulunan Android 4.1.3 ile çok hızlı bir şekilde kurulum işlemleri yapılmakta.

Yeni bir android projesi oluşturduktan sonra aşağıdaki resimde de görüldüğü gibi Üst kısımdaki menüler kısmında Tools > Firebase’e tıklayınca sağ tarafta Assistant çıkmakta.

Üstteki resimde Authentication kısmını bulup Authenticate using a custom authentication system’e tıklandıktan sonra karşımıza aşağıdaki gibi bir çıktı çıkmakta. Burada yapacağınız işlemleri sizlere adım adım anlatan ufak bir doküman yer almakta.

Burada Connect to Firebase’e(Daha önceden yaptığım için yeşil tik yer almakta) tıkladığımızda bizi tarayıcıya yönlendirdi. Orada Add Project (Yeni Proje Oluştur) diyerek yeni bir proje oluşturma işlemlerini yapacağız.

Aşağıdaki resimler sırasıyla neler yapacağımızı göstermekte. İlk aşamada proje ismini belirledik. İkinci aşamada şimdilik kullanmayacağımız bazı özellikleri disable ederek devre dışı bıraktık ve projenin oluşturulmasını bekledik.

Bunları yaptıktan sonra karşınıza Connect vb bir şey çıkarsa tıklayıp geçin. Android Studio içerisine gerekli olan google-services.json dosyasını bizim yerimize ilgili alana yerleştirecektir.

Şu ana kadar firebase bağlantısını oluşturduk şimdi de Authentication için gerekli kütüphanelerin eklenmesi. Tekrardan Assistan kısmına gelip 2. Adımdaki Add the Firebase Authentication ile başlayan butona tıklayalım ve gerekli değişikliklerin yapılmasını onaylayalım. Gradle dosyasında gerekli işlemler bittikten sonra artık kod yazar duruma geldik.

Yapacağımız uygulama neye benzeyecek öncelikle ondan bahsedelim. Aşağıda örnek çıktılar yer almakta.

Giriş işlemlerinden önce kayıt işlemlerini yapmak daha doğru olacaktır.

Kullanıcı Oluşturma ve Onaylatma

Firebase Console’da yapmamız gereken ufak bir ayar bulunmakta.

activity_sign_up.xml dosyası

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="25dp"
    tools:context=".SignUpActivity">

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sıgn Up"
            android:textSize="40sp"
            android:textStyle="bold|italic" />

        <EditText
            android:id="@+id/edt_user_emil"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:hint="User E-Mail" />

        <EditText
            android:id="@+id/edt_user_pass1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:hint="User Password" />

        <EditText
            android:id="@+id/edt_user_pass2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:hint="Retry User Password" />

        <ImageView
            android:id="@+id/img_create_account"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="end"
            android:layout_marginTop="15dp"
            android:src="@drawable/ic_baseline_login_24" />

    </LinearLayout>

    <TextView
        android:id="@+id/txt_go_to_login_screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Click to go to the login screen"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/linearLayout"
        app:layout_constraintStart_toStartOf="@+id/linearLayout" />

</androidx.constraintlayout.widget.ConstraintLayout>

SignUpActivity.kt dosyası

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import com.mrcaracal.firebaseuseroperations.databinding.ActivitySignUpBinding

class SignUpActivity : AppCompatActivity() {

    private lateinit var binding: ActivitySignUpBinding
    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySignUpBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        auth = FirebaseAuth.getInstance()

        binding.imgCreateAccount.setOnClickListener {
            val email = binding.edtUserEmil.text.toString()
            val pass1 = binding.edtUserPass1.text.toString()
            val pass2 = binding.edtUserPass2.text.toString()

            if (email.equals("") || pass1.equals("") || pass2.equals("")) {
                Toast.makeText(applicationContext, "Please enter data", Toast.LENGTH_SHORT).show()
            } else if (!pass1.equals(pass2)) {
                Toast.makeText(applicationContext, "Passwords are not the same", Toast.LENGTH_SHORT).show()
            } else {
                auth.createUserWithEmailAndPassword(email, pass1).addOnCompleteListener { task ->
                    if (task.isSuccessful) {
                        auth.currentUser?.sendEmailVerification()?.addOnCompleteListener { task ->
                            if (task.isSuccessful) {
                                Toast.makeText(applicationContext,"Verify your e-mail account",Toast.LENGTH_SHORT).show()
                                val intent = Intent(applicationContext, SignInActivity::class.java)
                                startActivity(intent)
                                finish()
                            }
                        }
                    }
                }.addOnFailureListener { exception ->
                    if (exception != null) {
                        Toast.makeText(applicationContext,exception.localizedMessage,Toast.LENGTH_SHORT).show()
                    }
                }
            }
        }

        binding.txtGoToLoginScreen.setOnClickListener {
            val intent = Intent(applicationContext, SignInActivity::class.java)
            startActivity(intent)
            finish()
        }
    }
}

Şimdi burada kayıt işlemleri için neler yaptık değinelim.

private lateinit var auth: FirebaseAuth

ile kullanıcı işlemlerini yapacağımızı öncelikle belirttik. Lateinit anahtar kelimesi kullanarak daha sonra initialize edeceğimizi belirttik. O sebepten onCreate() içerisinde

auth = FirebaseAuth.getInstance()

gerekli tanımlama işlemini de yaptık.

imgCreateAccount id’li resme tıklandığında kullanıcıdan alınan verilere göre işlemler yapılmakta. Veri girilmiş mi veya girilen parola bilgileri birbirleriyle uyuşuyor mu?
Asıl kısma gelecek olursak…

auth.createUserWithEmailAndPassword(email, pass1).addOnCompleteListener { task ->

ile kullanıcıdan alınan email ve parolayla bir hesap oluşturulacak. Dönen task değeri ile de bunun kontrolünü yapabiliriz.

auth.currentUser?.sendEmailVerification()?.addOnCompleteListener { task ->

Burada da e-posta adresinin doğrulanması için gerekli e-posta mesajı gönderiliyor. Dönen task değeri ile de bunun kontrolünü yapabiliriz. İşlem başarılı bir şekilde gerçekleşirse Intent() ile kullanıcıyı giriş ekranına yönlendirdik.

Kullanıcı Giriş İşlemleri

activity_sign_in.xml dosyası

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="25dp"
    tools:context=".SignInActivity">

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sıgn In"
            android:textSize="40sp"
            android:textStyle="bold|italic" />

        <EditText
            android:id="@+id/edt_user_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:hint="User E-Mail" />

        <EditText
            android:id="@+id/edt_user_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:hint="User Password" />

        <Switch
            android:id="@+id/sw_remember_me"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="Remember me"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/txt_go_to_reset_pass_screen"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:layout_weight="1"
                android:text="Forgot Password?" />

            <ImageView
                android:id="@+id/img_login"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/ic_baseline_login_24" />

        </LinearLayout>

    </LinearLayout>

    <TextView
        android:id="@+id/txt_create_account_screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Click to create a new account!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/linearLayout"
        app:layout_constraintStart_toStartOf="@+id/linearLayout" />

</androidx.constraintlayout.widget.ConstraintLayout>

SignInActivity.kt dosyası

import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
import com.mrcaracal.firebaseuseroperations.databinding.ActivitySignInBinding

class SignInActivity : AppCompatActivity() {

    private lateinit var binding: ActivitySignInBinding
    private lateinit var auth: FirebaseAuth
    private lateinit var GET: SharedPreferences
    private lateinit var SET: SharedPreferences.Editor
    private var durum: Boolean = false
    private var exitToast: Toast? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySignInBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        auth = FirebaseAuth.getInstance()

        val currentUser = auth.currentUser
        if (currentUser != null) {
            val intent = Intent(applicationContext, HomeActivity::class.java)
            startActivity(intent)
            finish()
        }

        GET = getSharedPreferences(packageName, Context.MODE_PRIVATE)
        SET = GET.edit()

        var remember = GET.getBoolean("bool_key", false)
        if (remember) {
            binding.swRememberMe.isChecked = true
            var save_email = GET.getString("sp_email", "")
            var save_pass = GET.getString("sp_pass", "")
            binding.edtUserEmail.setText(save_email)
            binding.edtUserPassword.setText(save_pass)
        } else {
            binding.swRememberMe.isChecked = false
            binding.edtUserEmail.setText("")
            binding.edtUserPassword.setText("")
        }

        binding.imgLogin.setOnClickListener {
            var email = binding.edtUserEmail.text.toString()
            var pass = binding.edtUserPassword.text.toString()

            if (email.equals("") && pass.equals("")) {
                Toast.makeText(applicationContext, "Please enter data", Toast.LENGTH_SHORT).show()
            } else {
                auth.signInWithEmailAndPassword(email, pass).addOnCompleteListener { task ->
                    if (task.isSuccessful) {
                        if (auth.currentUser?.isEmailVerified!!) {
                            Toast.makeText(applicationContext,"Welcome " + auth.currentUser?.email.toString(),Toast.LENGTH_SHORT).show()
                            val intent = Intent(applicationContext, HomeActivity::class.java)
                            startActivity(intent)
                            finish()
                        } else {
                            Toast.makeText(applicationContext,"Your account not verify",Toast.LENGTH_SHORT).show()
                        }
                    }
                }.addOnFailureListener { exception ->
                    Toast.makeText(applicationContext,exception.localizedMessage.toString(),Toast.LENGTH_SHORT).show()
                }
            }
        }

        binding.txtCreateAccountScreen.setOnClickListener {
            val intent = Intent(this, SignUpActivity::class.java)
            startActivity(intent)
            finish()
        }

        binding.txtGoToResetPassScreen.setOnClickListener {
            val intent = Intent(this, ForgotPassActivity::class.java)
            startActivity(intent)
            finish()
        }
    }

    override fun onResume() {
        super.onResume()

        binding.swRememberMe.setOnClickListener {
            durum = binding.swRememberMe.isChecked

            if (durum) {
                SET.putBoolean("bool_key", true)
                SET.putString("sp_email", binding.edtUserEmail.text.toString())
                SET.putString("sp_pass", binding.edtUserPassword.text.toString())
                SET.commit()
            } else {
                SET.putBoolean("bool_key", false)
                SET.putString("sp_email", "")
                SET.commit()
            }
        }
    }

    override fun onBackPressed() {
        if (exitToast == null || exitToast!!.view == null || exitToast!!.view?.windowToken == null) {
            exitToast = Toast.makeText(this, "Press again to exit", Toast.LENGTH_LONG)
            exitToast!!.show()
        } else {
            exitToast!!.cancel()
            super.onBackPressed()
        }
    }

}

Burada da Giriş işlemleri için neler yaptık tek tek değinelim. Öncelikle

private lateinit var auth: FirebaseAuth

ile kullanıcı işlemlerini yapacağımızı ve tanımlama işlemini daha sonra yapacağımızı belirttik.

onCreate() içerisinde gerekli tanımlamayı aşağıdaki gibi yaptık.

auth = FirebaseAuth.getInstance()

Kullanıcı işlemlerinin yapıldığı uygulamaları düşünürsek. Kullanıcılar bir uygulamaya giriş yaptıklarında her seferinde yeniden bilgilerini girmek zorunda kalmamalı. Bunun için aşağıda yer alan

val currentUser = auth.currentUser
if (currentUser != null) {
    val intent = Intent(applicationContext, HomeActivity::class.java)
    startActivity(intent)
    finish()
}

kod bloğu ile kullanıcının daha önceden giriş yapıp yapmadığı kontrolünü yaptık. Giriş yapmış ise kullanıcıyı HomeActivity’e yönlendirdik. Değilse de yola devamkeeee.

imgLogin id’li resme tıklandığında kullanıcıdan email ve parola bilgisi alınmakta. Girilen değerler var ise;

auth.signInWithEmailAndPassword(email, pass).addOnCompleteListener { task ->

ile kullanıcıdan alınan email ve parola bilgisine göre giriş yapılacaktır.

if (auth.currentUser?.isEmailVerified!!) {

ile kullanıcının e-posta adresinin onaylanıp onaylanmadığının kontrolünü yaptık. Kayıt işleminde e-posta onaylama işlemi de olduğundan burada e-postanın onaylanıp onaylanmadığını kontrol etmemiz gerekecektir. Onaylanmış ise kullanıcı HomeActivity’e yönlendirilecektir.

Parola Sıfırlama İşlemleri

activity_forgot_pass.xml dosyası

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="25dp"
    tools:context=".ForgotPassActivity">

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Reset Pass"
            android:textSize="40sp"
            android:textStyle="bold|italic" />

        <EditText
            android:id="@+id/edt_user_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:hint="User E-Mail" />

        <ImageView
            android:id="@+id/img_reset_pass"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="end"
            android:layout_marginTop="15dp"
            android:src="@drawable/ic_baseline_login_24" />

    </LinearLayout>

    <TextView
        android:id="@+id/txt_go_to_login_screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Click to go to the login screen"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/linearLayout"
        app:layout_constraintStart_toStartOf="@+id/linearLayout" />

</androidx.constraintlayout.widget.ConstraintLayout>

ForgotPassActivity.kt dosyası

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import com.mrcaracal.firebaseuseroperations.databinding.ActivityForgotPassBinding

class ForgotPassActivity : AppCompatActivity() {

    private lateinit var binding: ActivityForgotPassBinding
    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityForgotPassBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        auth = FirebaseAuth.getInstance()

        binding.imgResetPass.setOnClickListener {
            val email = binding.edtUserEmail.text.toString()
            if (email.equals("")) {
                Toast.makeText(applicationContext, "Please enter data", Toast.LENGTH_SHORT).show()
            } else {
                auth.sendPasswordResetEmail(email).addOnCompleteListener { task ->
                    if (task.isSuccessful) {
                        val intent = Intent(this, SignInActivity::class.java)
                        startActivity(intent)
                        finish()
                    }
                }
            }
        }

        binding.txtGoToLoginScreen.setOnClickListener {
            val intent = Intent(this, SignInActivity::class.java)
            startActivity(intent)
            finish()
        }
    }
}

Yine her zamanki gibi

private lateinit var auth: FirebaseAuth

ve

auth = FirebaseAuth.getInstance()

ile kullanıcı işlemleri için gerekli tanımlamaları yaptık.

imgResetPass id’li resme tıklandığında kullanıcıdan veri alınıp alınmadığı gibi sorgulamalardan sonra

auth.sendPasswordResetEmail(email).addOnCompleteListener { task ->

ile kullanıcıdan alınan email’e parola sıfırlama bağlantısı gönderilecektir. İşlem başarılı ise SignInActivity’e yönlendirilecektir.

Çıkış Yapma / Oturum Kapatma

Kullanıcı başarılı bir şekilde hesap oluşturup uygulamaya giriş yaptıktan sonra istediği zaman çıkış da yapabilmeli.

activity_home.xml dosyası

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="25dp"
    tools:context=".HomeActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:text="You are now in the home screen"
        android:textSize="24sp"/>

    <Button
        android:onClick="exit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:text="Exit"
        android:textSize="20sp"
        android:padding="15dp"/>

</LinearLayout>

HomeActivity.kt dosyası

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import com.google.firebase.auth.FirebaseAuth
import com.mrcaracal.firebaseuseroperations.databinding.ActivityHomeBinding

class HomeActivity : AppCompatActivity() {

    private lateinit var binding: ActivityHomeBinding
    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityHomeBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        auth = FirebaseAuth.getInstance()
    }

    fun exit(view: View) {
        auth.signOut()
        val intent = Intent(this, SignInActivity::class.java)
        startActivity(intent)
        finish()
    }
}

exit butonuna tıklanması durumunda

auth.signOut()

ile çıkış işlemi gerçekleşecek

val intent = Intent(this, SignInActivity::class.java)
startActivity(intent)
finish()

ile de kullanıcıyı tekrardan giriş ekranına yönlendirdik.

Örnek uygulamada yer alan Binding, Double click exit ve SharedPreferences gibi konuları ders içeriği ile ilgili olmadığından burada açıklamadım ama en yakın zamanda bunlarla da ilgili bir yazı hazırlayıp paylaşacağım ve buraya bağlantı vereceğim.

Bir sonraki derste görüşmek üzere…

2 thoughts on “Firebase Authentication

  1. Pingback: Firebase Firestore Database - Mr. Caracal - Cloud Firestore Database

  2. Pingback: Firebase Firestore Database -2 - Mr. Caracal - Kayıt, silme ve filtreleme

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir