Android Firebase'e Başlarken - Giriş ve Kayıt Doğrulama
Firebase'in nasıl basitleştirilmiş ve kullanımı kolay olduğunu göstermek için Firebase E-posta ve Şifre kimlik doğrulamasını kullanarak basit bir giriş / kayıt ( Firebase Authentication ) demosu oluşturacağız .

Firebase'in Özellikleri
Firebase , uygulamayı barındıran kimlik doğrulamasından başlayarak her android uygulama için gerekli olan grup özelliklerine sahiptir .

 

Aşağıda Firebase'i genel olarak kullanmanın avantajları : 
> Süper kolay ve hızlı uygulama. 
> Sunucu tarafı yapılandırması gerekli değildir. PHP Scripts Yok ve Veritabanı Tasarımları Yok. 
> GCM'yi kullanmadan gerçek zamanlı güncelleme. 
> Otomatik ölçeklendirme yerleşik 
> Ücretsiz olarak başlayabilir (yalnızca 50 kayıttan sonra ödeme yapmanız gerekmekte) 
> Javascript için Güçlü API'ler (Angular gibi çeşitli çerçeveler dahil), iOS ve Android 
> Facebook gibi kimlik doğrulama hizmetleri için yerleşik destek, Google ve Twitter 

 

1. Firebase Kimlik Doğrulamasını Etkinleştirme
1 . Yapmanız gereken ilk şey, https://firebase.google.com/ adresine gitmek ve konsollarına erişmek için bir hesap oluşturmaktır. Konsola eriştikten sonra ilk projenizi oluşturarak başlayabilirsiniz.

2 . Firebase'i entegre edeceğiniz projenizin paket adını (benimki com.radkod.sanalyer ) verin. Buraya google-services.json dosyası, uygulama ekle düğmesine bastığınızda indirilecek.

3 . Ardından proje kontrol panelinize gidin. Auth'u bulun ve başlamak için tıklayın. Oturum açma yöntemini kurmaya gidin ve E-posta ve Şifre'yi seçip etkinleştirin .

Şimdi Android projemiz ile başlamaya hazırız. Firebase kimlik doğrulaması ve profil yönetimi içeren basit bir uygulama oluşturacağız. Genel olarak Giriş , Kayıt , Şifremi unuttum , Epostayı Değiştir , Şifreyi Değiştirve Son olarak Çıkış seçeneğini nasıl ekleyeceğimizi göreceğiz .

 

2. Android Projesi Oluşturma
1 . Android Studio'da Dosya ⇒ Yeni Proje'den yeni bir proje oluşturun . Varsayılan etkinliği seçmenizi istediğinde, Boş Etkinlik'i seçin ve devam edin.

Proje detaylarını doldururken, firebase konsolunda verdiğiniz aynı paket adını kullanın. Ben bu durumda aynı paket adını com.radkod.sanalyer kullanıyorum .

2 . AndroidManifest.xml dosyasını açın ve ağ aramaları yapmamız için INTERNET iznini ekleyin .


3 . Google-services.json dosyasını projenizin uygulama klasörüne yapıştırın . Bu adım, projeniz bu dosya olmadan oluşturulmayacağı için çok önemlidir.

4 . Şimdi projenin giriş dizininde bulunan build.gradle dosyasını açın ve firebase bağımlılığı ekleyin.

build.gradle
dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        classpath 'com.google.gms:google-services:3.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }


5 . App / build.gradle uygulamasını açın ve firebase auth bağımlılığını ekleyin. Dosyanın en altında, eklenti ekle’yi ekleyin : 'com.google.gms.google-services'

app/ build.gradle
dependencies {
    implementation"com.google.firebase:firebase-auth:16.0.2"
}

apply plugin: 'com.google.gms.google-services'
6 . Aşağıdaki kaynakları dimens.xml , colors.xml ve strings.xml'ye ekleyin .

dimens.xml

    

    16dp
    16dp
    16dp
    100dp


colors.xml

 #00bcd4
    #0097a7
    #f2fe71

    #26ae90
    #2e3237
    #428bca
    #ffffff
    #222222
    #999999
    #888888
    #3b4148
    #5e6266
    #26ae90
    #eceef1
    #333333
    #ff6861


strings.xml

    Firebase Auth
    Register
    Email
    Password too short, enter minimum 6 characters!
    Authentication failed, check your email and password or sign up
    Change Email
    Change Password
    Send Password reset email
    Remove user
    New Password
    Firebase
    Sign in
    Email
    Password
    Fullname
    LOGIN
    Not a member? Get registered in Firebase now!
    Already registered. Login Me!
    ResetPasswordActivity
    Forgot your password?
    Reset Password
    
    New Email
    Change
    Send
    Remove
    Sign Out
    Forgot password?
    We just need your registered Email Id to sent you password reset instructions.



Artık projeye eklenen tüm bağımlılıklar ile hazırız. Kayıt ekranını ekleyerek başlayalım.

2.1 E-posta ve Şifre ile Kaydolun
Kayıt ekranı, e-posta ve şifre için iki EditText alanı içerir ve giriş yap şifremi unuttum gibi bazı bağlantılar içerir.

7 . SignupActivity.java Adında bir activity oluşturun ve xml dosyasına aşağıdaki kodu ekleyin activity_signup.xml

activity_signup.xml

 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:fitsSystemWindows="true"
    tools:context="com.radkod.sanalyer.LoginActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="@dimen/activity_horizontal_margin">


        <ImageView
            android:layout_width="@dimen/logo_w_h"
            android:layout_height="@dimen/logo_w_h"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="30dp"
            android:src="@mipmap/ic_launcher" />

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/email"
                android:inputType="textEmailAddress"
                android:maxLines="1"
                android:singleLine="true"
                android:textColor="@android:color/white" />

        

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:focusableInTouchMode="true"
                android:hint="@string/hint_password"
                android:imeActionId="@+id/login"
                android:imeOptions="actionUnspecified"
                android:inputType="textPassword"
                android:maxLines="1"
                android:singleLine="true"
                android:textColor="@android:color/white" />

        

        <Button
            android:id="@+id/sign_up_button"
            style="?android:textAppearanceSmall"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:background="@color/colorAccent"
            android:text="@string/action_sign_in_short"
            android:textColor="@android:color/black"
            android:textStyle="bold" />

        <Button
            android:id="@+id/btn_reset_password"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:background="@null"
            android:text="@string/btn_forgot_password"
            android:textAllCaps="false"
            android:textColor="@color/colorAccent" />

        

        <Button
            android:id="@+id/sign_in_button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:background="@null"
            android:text="@string/btn_link_to_login"
            android:textAllCaps="false"
            android:textColor="@color/white"
            android:textSize="15dp" />
    

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="center|bottom"
        android:layout_marginBottom="20dp"
        android:visibility="gone" />


8 . SignupActivity.java'yı açın ve aşağıdakini ekleyin. Firebase, e-posta ve şifre verileriyle yeni bir kullanıcı oluşturmak için createUserWithEmailAndPassword () yöntemini sağlar .

SignupActivity.java
package com.radkod.sanalyer;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class SignupActivity extends AppCompatActivity {

    private EditText inputEmail, inputPassword;
    private Button btnSignIn, btnSignUp, btnResetPassword;
    private ProgressBar progressBar;
    private FirebaseAuth auth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);

       
        auth = FirebaseAuth.getInstance();

        btnSignIn =  findViewById(R.id.sign_in_button);
        btnSignUp =  findViewById(R.id.sign_up_button);
        inputEmail =  findViewById(R.id.email);
        inputPassword =  findViewById(R.id.password);
        progressBar =  findViewById(R.id.progressBar);
        btnResetPassword = findViewById(R.id.btn_reset_password);

        btnResetPassword.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(SignupActivity.this, ResetPasswordActivity.class));
            }
        });

        btnSignIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        btnSignUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String email = inputEmail.getText().toString().trim();
                String password = inputPassword.getText().toString().trim();

                if (TextUtils.isEmpty(email)) {
                    Toast.makeText(getApplicationContext(), "E-mail adresi giriniz!", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (TextUtils.isEmpty(password)) {
                    Toast.makeText(getApplicationContext(), "Şifre giriniz!", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (password.length() < 6) {
                    Toast.makeText(getApplicationContext(), "Girilen şifre çok kısa, minumum 6 karakter olmalı!", Toast.LENGTH_SHORT).show();
                    return;
                }

                progressBar.setVisibility(View.VISIBLE);
                //yeni kullanıcı
                auth.createUserWithEmailAndPassword(email, password)
                        .addOnCompleteListener(SignupActivity.this, new OnCompleteListener() {
                            @Override
                            public void onComplete(@NonNull Task task) {
                                Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
                                progressBar.setVisibility(View.GONE);
                              
                              
                                if (!task.isSuccessful()) {
                                    Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
                                            Toast.LENGTH_SHORT).show();
                                } else {
                                    startActivity(new Intent(SignupActivity.this, MainActivity.class));
                                    finish();
                                }
                            }
                        });

            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        progressBar.setVisibility(View.GONE);
    }
}


AndroidManifest.xml dosyasını açın ve başlatıcı etkinliği olarak SignupActivity (geçici olarak) yapın ve kaydolun.

2.2 E-posta ve Şifre ile Giriş Yapın
Şimdi giriş ekranını ekleyeceğiz ve kayıt ekranında oluşturduğumuz kimlik bilgilerini kontrol edeceğiz.

9 . LoginActivity.java adında başka bir activity oluşturun ve aşağıdaki kodu aktivite_login.xml düzen dosyasına ekleyin .

activity_login.xml

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:fitsSystemWindows="true"
    tools:context="com.radkod.sanalyer.LoginActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/colorPrimary"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="@dimen/activity_horizontal_margin">


        <ImageView
            android:layout_width="@dimen/logo_w_h"
            android:layout_height="@dimen/logo_w_h"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="30dp"
            android:src="@mipmap/ic_launcher" />

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:hint="@string/hint_email"
                android:inputType="textEmailAddress"
                android:textColor="@android:color/white"
                android:textColorHint="@android:color/white" />
        

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/password"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:hint="@string/hint_password"
                android:inputType="textPassword"
                android:textColor="@android:color/white"
                android:textColorHint="@android:color/white" />
        

       

        <Button
            android:id="@+id/btn_login"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:background="@color/colorAccent"
            android:text="@string/btn_login"
            android:textColor="@android:color/black" />

        <Button
            android:id="@+id/btn_reset_password"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:background="@null"
            android:text="@string/btn_forgot_password"
            android:textAllCaps="false"
            android:textColor="@color/colorAccent" />

        

        <Button
            android:id="@+id/btn_signup"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:background="@null"
            android:text="@string/btn_link_to_register"
            android:textAllCaps="false"
            android:textColor="@color/white"
            android:textSize="15dp" />
    

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="center|bottom"
        android:layout_marginBottom="20dp"
        android:visibility="gone" />


10 . LoginActivity.java'yı açın ve aşağıdaki değişiklikleri yapın. Firebase

içerir  kullanıcının oturum açması  için signInWithEmailAndPassword () içerir 

LoginActivity.java
package com.radkod.sanalyer;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class LoginActivity extends AppCompatActivity {

    private EditText inputEmail, inputPassword;
    private FirebaseAuth auth;
    private ProgressBar progressBar;
    private Button btnSignup, btnLogin, btnReset;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        
        auth = FirebaseAuth.getInstance();

        if (auth.getCurrentUser() != null) {
            startActivity(new Intent(LoginActivity.this, MainActivity.class));
            finish();
        }

       
        setContentView(R.layout.activity_login);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        inputEmail =  findViewById(R.id.email);
        inputPassword =  findViewById(R.id.password);
        progressBar =  findViewById(R.id.progressBar);
        btnSignup =  findViewById(R.id.btn_signup);
        btnLogin =  findViewById(R.id.btn_login);
        btnReset =  findViewById(R.id.btn_reset_password);

        
        auth = FirebaseAuth.getInstance();

        btnSignup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginActivity.this, SignupActivity.class));
            }
        });

        btnReset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginActivity.this, ResetPasswordActivity.class));
            }
        });

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email = inputEmail.getText().toString();
                final String password = inputPassword.getText().toString();

                if (TextUtils.isEmpty(email)) {
                    Toast.makeText(getApplicationContext(), "E-mail adresinizi giriniz!", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (TextUtils.isEmpty(password)) {
                    Toast.makeText(getApplicationContext(), "Şifrenizi giriniz!", Toast.LENGTH_SHORT).show();
                    return;
                }

                progressBar.setVisibility(View.VISIBLE);

               
                auth.signInWithEmailAndPassword(email, password)
                        .addOnCompleteListener(LoginActivity.this, new OnCompleteListener() {
                            @Override
                            public void onComplete(@NonNull Task task) {
                               
                                progressBar.setVisibility(View.GONE);
                                if (!task.isSuccessful()) {
                                   
                                    if (password.length() < 6) {
                                        inputPassword.setError(getString(R.string.minimum_password));
                                    } else {
                                        Toast.makeText(LoginActivity.this, getString(R.string.auth_failed), Toast.LENGTH_LONG).show();
                                    }
                                } else {
                                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                    startActivity(intent);
                                    finish();
                                }
                            }
                        });
            }
        });
    }
}


11 . AndroidManifest.xml dosyasını açın ve oturum açma ekranını ilk ekran yapmak için LoginActivity.java'yı başlatıcı olarak belirtin.

Projeyi çalıştırın ve kayıt sırasında kullandığınız kimlik bilgileriyle giriş yapın.

2.3 Şifremi Unuttum - Parola Sıfırla Gönder
Firebase'in sağladığı başka bir özellik ise gerektiğinde şifre sıfırlama e-postası göndermektir.

12 . ResetPasswordActivity.java Adlı başka bir activity oluşturun  ve aşağıdaki kodu xml dosyasına ekleyin activity_reset_password.xml


activity_reset_password.xml

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:layout_gravity="center"
    android:background="@color/colorPrimary"
    android:fitsSystemWindows="true"
    tools:context="com.radkod.sanalyer.LoginActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="@dimen/activity_horizontal_margin">


        <ImageView
            android:layout_width="@dimen/logo_w_h"
            android:layout_height="@dimen/logo_w_h"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="10dp"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:padding="10dp"
            android:text="@string/lbl_forgot_password"
            android:textColor="@android:color/white"
            android:textSize="20dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:gravity="center_horizontal"
            android:padding="@dimen/activity_horizontal_margin"
            android:text="@string/forgot_password_msg"
            android:textColor="@android:color/white"
            android:textSize="14dp" />

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginTop="20dp"
                android:hint="@string/hint_email"
                android:inputType="textEmailAddress"
                android:textColor="@android:color/white"
                android:textColorHint="@android:color/white" />
        

       

        <Button
            android:id="@+id/btn_reset_password"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:background="@color/colorAccent"
            android:text="@string/btn_reset_password"
            android:textColor="@android:color/black" />

        <Button
            android:id="@+id/btn_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:background="@null"
            android:text="@string/btn_back"
            android:textColor="@color/colorAccent" />

    

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="center|bottom"
        android:layout_marginBottom="20dp"
        android:visibility="gone" />

13 . ResetPasswordActivity.java dosyasını açıp aşağıdaki kodu ekleyin. Firebase şifre sıfırlama e-postası göndermek için sendPasswordResetEmail () yöntemini kullanır.

ResetPasswordActivity.java
package com.radkod.sanalyer;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;

public class ResetPasswordActivity extends AppCompatActivity {

    private EditText inputEmail;
    private Button btnReset, btnBack;
    private FirebaseAuth auth;
    private ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reset_password);

        inputEmail =  findViewById(R.id.email);
        btnReset =  findViewById(R.id.btn_reset_password);
        btnBack =  findViewById(R.id.btn_back);
        progressBar =  findViewById(R.id.progressBar);

        auth = FirebaseAuth.getInstance();

        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        btnReset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String email = inputEmail.getText().toString().trim();

                if (TextUtils.isEmpty(email)) {
                    Toast.makeText(getApplication(), "Hesabınıza ait e-mail adresini giriniz!", Toast.LENGTH_SHORT).show();
                    return;
                }

                progressBar.setVisibility(View.VISIBLE);
                auth.sendPasswordResetEmail(email)
                        .addOnCompleteListener(new OnCompleteListener() {
                            @Override
                            public void onComplete(@NonNull Task task) {
                                if (task.isSuccessful()) {
                                    Toast.makeText(ResetPasswordActivity.this, "Şifrenizi sıfırlamak için size talimatlar gönderdik!", Toast.LENGTH_SHORT).show();
                                } else {
                                    Toast.makeText(ResetPasswordActivity.this, "Sıfırlama e-postası gönderilemedi!", Toast.LENGTH_SHORT).show();
                                }

                                progressBar.setVisibility(View.GONE);
                            }
                        });
            }
        });
    }

}

"Android Firebase'e Başlarken - Giriş ve Kayıt Doğrulama konulu haberimizde Teknoloji Haberleri olarak sizlere Android Firebase'e Başlarken - Giriş ve Kayıt Doğrulama ile ilgili son gelişmeleri aktarmak istedik. Hemen yukarıda Android Firebase'e Başlarken - Giriş ve Kayıt Doğrulama ile ilgili yorum ve görüşleri inceleyerek sizlerde yorum bırakabilirsiniz. "
5
4
2
1
0