Kullanıcılarınızın Google Hesaplarını kullanarak Firebase'de kimlik doğrulamasına izin verebilirsiniz.
Başlamadan önce
Henüz yapmadıysanız Firebase'i Android projenize ekleyin.
Modülünüzün (uygulama düzeyinde) Gradle dosyasında (genellikle
<project>/<app-module>/build.gradle.kts
veya<project>/<app-module>/build.gradle
), Android için Firebase Authentication kitaplığının bağımlılığını ekleyin. Kitaplık sürüm oluşturmayı kontrol etmek için Firebase Android BoM kullanmanızı öneririz.Ayrıca, Firebase Authentication kurulumunun bir parçası olarak Credential Manager SDK'sını uygulamanıza eklemeniz gerekir.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.0.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth")
// Also add the dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1") }Firebase Android BoM kullanıldığında uygulamanız Firebase Android kitaplıklarının daima uyumlu sürümlerini kullanır.
(Alternatif) Firebase kitaplığı bağımlılıklarını BoM kullanmadan ekleyin.
Firebase BoM kullanmamayı tercih ederseniz her Firebase kitaplık sürümünü bağımlılık satırında belirtmeniz gerekir.
Uygulamanızda birden fazla Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için BoM kullanmanızı önemle tavsiye ederiz. Bu sayede tüm sürümlerin uyumlu olması sağlanır.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:24.0.0")
// Also add the dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1") }Uygulamanızın SHA parmak izini henüz belirtmediyseniz Firebase konsolunun Ayarlar sayfasından yapın. Uygulamanızın SHA parmak izini alma hakkında ayrıntılı bilgi için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.
- Firebase konsolunda Google'ı oturum açma yöntemi olarak etkinleştirin:
- Firebase konsolunda Auth (Kimlik Doğrulama) bölümünü açın.
- Oturum açma yöntemi sekmesinde Google oturum açma yöntemini etkinleştirin ve Kaydet'i tıklayın.
Konsolda istendiğinde, Google ile oturum açma için gereken OAuth istemci bilgilerini içeren güncellenmiş Firebase yapılandırma dosyasını (
google-services.json
) indirin.Bu güncellenmiş yapılandırma dosyasını Android Studio projenize taşıyın ve artık güncel olmayan ilgili yapılandırma dosyasının yerine koyun. (Firebase'i Android projenize ekleme başlıklı makaleyi inceleyin.)
Firebase ile kimlik doğrulama
- Credential Manager dokümanındaki adımları uygulayarak Google ile oturum açma özelliğini uygulamanıza entegre edin. Genel talimatları aşağıda bulabilirsiniz:
GetGoogleIdOption
kullanarak Google oturum açma isteği oluşturun. Ardından,GetCredentialRequest
kullanarak kimlik bilgisi yöneticisi isteğini oluşturun:Kotlin
// Instantiate a Google sign-in request val googleIdOption = GetGoogleIdOption.Builder() // Your server's client ID, not your Android client ID. .setServerClientId(getString(R.string.default_web_client_id)) // Only show accounts previously used to sign in. .setFilterByAuthorizedAccounts(true) .build() // Create the Credential Manager request val request = GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build()
Java
// Instantiate a Google sign-in request GetGoogleIdOption googleIdOption = new GetGoogleIdOption.Builder() .setFilterByAuthorizedAccounts(true) .setServerClientId(getString(R.string.default_web_client_id)) .build(); // Create the Credential Manager request GetCredentialRequest request = new GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build();
Yukarıdaki istekte, "sunucu" istemci kimliğinizi
setServerClientId
yöntemine iletmeniz gerekir. OAuth 2.0 istemci kimliğini bulmak için:- Google Cloud konsolunda Kimlik bilgileri sayfasını açın.
- Web uygulaması türü istemci kimliği, arka uç sunucunuzun OAuth 2.0 istemci kimliğidir.
- Google ile oturum açma özelliğini entegre ettikten sonra oturum açma etkinliğinizin aşağıdaki gibi bir koda sahip olduğunu kontrol edin:
Kotlin
private fun handleSignIn(credential: Credential) { // Check if credential is of type Google ID if (credential is CustomCredential && credential.type == TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) { // Create Google ID Token val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data) // Sign in to Firebase with using the token firebaseAuthWithGoogle(googleIdTokenCredential.idToken) } else { Log.w(TAG, "Credential is not of type Google ID!") } }
Java
private void handleSignIn(Credential credential) { // Check if credential is of type Google ID if (credential instanceof CustomCredential customCredential && credential.getType().equals(TYPE_GOOGLE_ID_TOKEN_CREDENTIAL)) { // Create Google ID Token Bundle credentialData = customCredential.getData(); GoogleIdTokenCredential googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credentialData); // Sign in to Firebase with using the token firebaseAuthWithGoogle(googleIdTokenCredential.getIdToken()); } else { Log.w(TAG, "Credential is not of type Google ID!"); } }
- Oturum açma etkinliğinizin
onCreate
yönteminde,FirebaseAuth
nesnesinin paylaşılan örneğini alın:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Etkinliğinizi başlatırken kullanıcının oturumunun açık olup olmadığını kontrol edin:
Kotlin
override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
- Şimdi 1. adımda oluşturulan kullanıcının Google kimlik jetonunu alın, bunu bir Firebase kimlik bilgisiyle değiştirin ve Firebase kimlik bilgisini kullanarak Firebase ile kimlik doğrulayın:
Kotlin
private fun firebaseAuthWithGoogle(idToken: String) { val credential = GoogleAuthProvider.getCredential(idToken, null) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user Log.w(TAG, "signInWithCredential:failure", task.exception) updateUI(null) } } }
Java
private void firebaseAuthWithGoogle(String idToken) { AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, task -> { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user Log.w(TAG, "signInWithCredential:failure", task.getException()); updateUI(null); } }); }
signInWithCredential
çağrısı başarılı olursa kullanıcının hesap verilerini almak içingetCurrentUser
yöntemini kullanabilirsiniz.
Sonraki adımlar
Bir kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgilerine (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.
Uygulamalarınızda, kullanıcının temel profil bilgilerini
FirebaseUser
nesnesinden alabilirsiniz. Kullanıcıları yönetme başlıklı makaleyi inceleyin.Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için bu kimliği kullanabilirsiniz.
Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut
işlevini çağırın. Ayrıca, Kimlik Bilgisi Yöneticisi dokümanlarında önerildiği gibi, mevcut kullanıcı kimlik bilgisi durumunu tüm kimlik bilgisi sağlayıcılarından temizlemeniz gerekir:
Kotlin
private fun signOut() { // Firebase sign out auth.signOut() // When a user signs out, clear the current user credential state from all credential providers. lifecycleScope.launch { try { val clearRequest = ClearCredentialStateRequest() credentialManager.clearCredentialState(clearRequest) updateUI(null) } catch (e: ClearCredentialException) { Log.e(TAG, "Couldn't clear user credentials: ${e.localizedMessage}") } } }
Java
private void signOut() { // Firebase sign out mAuth.signOut(); // When a user signs out, clear the current user credential state from all credential providers. ClearCredentialStateRequest clearRequest = new ClearCredentialStateRequest(); credentialManager.clearCredentialStateAsync( clearRequest, new CancellationSignal(), Executors.newSingleThreadExecutor(), new CredentialManagerCallback<>() { @Override public void onResult(@NonNull Void result) { updateUI(null); } @Override public void onError(@NonNull ClearCredentialException e) { Log.e(TAG, "Couldn't clear user credentials: " + e.getLocalizedMessage()); } }); }