Firebase Google Giriş Entegrasyonlu Kotlin Uygulaması
Aşağıda Firebase Authentication kullanarak Google ile giriş yapmayı sağlayan bir Kotlin uygulaması örneği bulacaksınız. Bu örnek, temel bir giriş arayüzü ve Google giriş işlevselliği içerir.
Aşağıda Firebase Authentication kullanarak Google ile giriş yapmayı sağlayan bir Kotlin uygulaması örneği bulacaksınız. Bu örnek, temel bir giriş arayüzü ve Google giriş işlevselliği içerir.
1. Ön Hazırlıklar
build.gradle (Module: app) Dosyasına Eklemeler
dependencies {
// Firebase Auth ve Google Sign-In
implementation ("com.google.firebase:firebase-auth-ktx:22.1.2")
}
dependencies { // Firebase Auth ve Google Sign-In implementation ("com.google.firebase:firebase-auth-ktx:22.1.2") }
2. activity_login.xml (Giriş Arayüzü)
<?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="16dp"
tools:context=".LoginActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Google ile Giriş Yap"
android:textSize="24sp"
android:textStyle="bold"
android:layout_marginBottom="32dp"/>
<com.google.android.gms.common.SignInButton
android:id="@+id/signInButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"/>
<TextView
android:id="@+id/userInfoTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginTop="16dp"
android:visibility="gone"/>
<Button
android:id="@+id/signOutButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Çıkış Yap"
android:layout_marginTop="16dp"
android:visibility="gone"/>
</LinearLayout>
<?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="16dp" tools:context=".LoginActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Google ile Giriş Yap" android:textSize="24sp" android:textStyle="bold" android:layout_marginBottom="32dp"/> <com.google.android.gms.common.SignInButton android:id="@+id/signInButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp"/> <TextView android:id="@+id/userInfoTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:layout_marginTop="16dp" android:visibility="gone"/> <Button android:id="@+id/signOutButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Çıkış Yap" android:layout_marginTop="16dp" android:visibility="gone"/> </LinearLayout>
3. LoginActivity.kt
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.common.SignInButton
import com.google.android.gms.common.api.ApiException
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.GoogleAuthProvider
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
class LoginActivity : AppCompatActivity() {
private lateinit var auth: FirebaseAuth
private lateinit var googleSignInClient: GoogleSignInClient
private lateinit var signInButton: SignInButton
private lateinit var signOutButton: Button
private lateinit var userInfoTextView: TextView
companion object {
private const val RC_SIGN_IN = 9001
private const val TAG = "GoogleActivity"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
// View'leri bağlama
signInButton = findViewById(R.id.signInButton)
signOutButton = findViewById(R.id.signOutButton)
userInfoTextView = findViewById(R.id.userInfoTextView)
// Firebase Auth başlatma
auth = Firebase.auth
// Google Sign-In ayarları
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id)) // strings.xml'de tanımlı olmalı
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this, gso)
// Giriş butonu tıklama olayı
signInButton.setOnClickListener {
signIn()
}
// Çıkış butonu tıklama olayı
signOutButton.setOnClickListener {
signOut()
}
}
override fun onStart() {
super.onStart()
// Kullanıcı oturum açık mı kontrol et
val currentUser = auth.currentUser
updateUI(currentUser)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Google giriş sonucu
if (requestCode == RC_SIGN_IN) {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
try {
// Google giriş başarılı, Firebase ile yetkilendir
val account = task.getResult(ApiException::class.java)!!
Log.d(TAG, "firebaseAuthWithGoogle:" + account.id)
firebaseAuthWithGoogle(account.idToken!!)
} catch (e: ApiException) {
// Google giriş başarısız
Log.w(TAG, "Google giriş başarısız", e)
updateUI(null)
}
}
}
private fun firebaseAuthWithGoogle(idToken: String) {
val credential = GoogleAuthProvider.getCredential(idToken, null)
auth.signInWithCredential(credential)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Giriş başarılı
Log.d(TAG, "signInWithCredential:success")
val user = auth.currentUser
updateUI(user)
} else {
// Giriş başarısız
Log.w(TAG, "signInWithCredential:failure", task.exception)
Toast.makeText(this, "Kimlik doğrulama başarısız.", Toast.LENGTH_SHORT).show()
updateUI(null)
}
}
}
private fun signIn() {
val signInIntent = googleSignInClient.signInIntent
startActivityForResult(signInIntent, RC_SIGN_IN)
}
private fun signOut() {
// Firebase'den çıkış yap
auth.signOut()
// Google'dan çıkış yap
googleSignInClient.signOut().addOnCompleteListener(this) {
updateUI(null)
Toast.makeText(this, "Başarıyla çıkış yapıldı", Toast.LENGTH_SHORT).show()
}
}
private fun updateUI(user: Any?) {
if (user != null) {
// Kullanıcı giriş yapmış
signInButton.visibility = android.view.View.GONE
signOutButton.visibility = android.view.View.VISIBLE
userInfoTextView.visibility = android.view.View.VISIBLE
val currentUser = auth.currentUser
currentUser?.let {
val userInfo = "Hoş geldiniz!\n\n" +
"Ad: ${it.displayName}\n" +
"Email: ${it.email}\n" +
"UID: ${it.uid}"
userInfoTextView.text = userInfo
}
} else {
// Kullanıcı giriş yapmamış
signInButton.visibility = android.view.View.VISIBLE
signOutButton.visibility = android.view.View.GONE
userInfoTextView.visibility = android.view.View.GONE
userInfoTextView.text = ""
}
}
}
import android.content.Intent import android.os.Bundle import android.util.Log import android.widget.Button import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInAccount import com.google.android.gms.auth.api.signin.GoogleSignInClient import com.google.android.gms.auth.api.signin.GoogleSignInOptions import com.google.android.gms.common.SignInButton import com.google.android.gms.common.api.ApiException import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.GoogleAuthProvider import com.google.firebase.auth.ktx.auth import com.google.firebase.ktx.Firebase class LoginActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth private lateinit var googleSignInClient: GoogleSignInClient private lateinit var signInButton: SignInButton private lateinit var signOutButton: Button private lateinit var userInfoTextView: TextView companion object { private const val RC_SIGN_IN = 9001 private const val TAG = "GoogleActivity" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) // View'leri bağlama signInButton = findViewById(R.id.signInButton) signOutButton = findViewById(R.id.signOutButton) userInfoTextView = findViewById(R.id.userInfoTextView) // Firebase Auth başlatma auth = Firebase.auth // Google Sign-In ayarları val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) // strings.xml'de tanımlı olmalı .requestEmail() .build() googleSignInClient = GoogleSignIn.getClient(this, gso) // Giriş butonu tıklama olayı signInButton.setOnClickListener { signIn() } // Çıkış butonu tıklama olayı signOutButton.setOnClickListener { signOut() } } override fun onStart() { super.onStart() // Kullanıcı oturum açık mı kontrol et val currentUser = auth.currentUser updateUI(currentUser) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) // Google giriş sonucu if (requestCode == RC_SIGN_IN) { val task = GoogleSignIn.getSignedInAccountFromIntent(data) try { // Google giriş başarılı, Firebase ile yetkilendir val account = task.getResult(ApiException::class.java)!! Log.d(TAG, "firebaseAuthWithGoogle:" + account.id) firebaseAuthWithGoogle(account.idToken!!) } catch (e: ApiException) { // Google giriş başarısız Log.w(TAG, "Google giriş başarısız", e) updateUI(null) } } } private fun firebaseAuthWithGoogle(idToken: String) { val credential = GoogleAuthProvider.getCredential(idToken, null) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Giriş başarılı Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // Giriş başarısız Log.w(TAG, "signInWithCredential:failure", task.exception) Toast.makeText(this, "Kimlik doğrulama başarısız.", Toast.LENGTH_SHORT).show() updateUI(null) } } } private fun signIn() { val signInIntent = googleSignInClient.signInIntent startActivityForResult(signInIntent, RC_SIGN_IN) } private fun signOut() { // Firebase'den çıkış yap auth.signOut() // Google'dan çıkış yap googleSignInClient.signOut().addOnCompleteListener(this) { updateUI(null) Toast.makeText(this, "Başarıyla çıkış yapıldı", Toast.LENGTH_SHORT).show() } } private fun updateUI(user: Any?) { if (user != null) { // Kullanıcı giriş yapmış signInButton.visibility = android.view.View.GONE signOutButton.visibility = android.view.View.VISIBLE userInfoTextView.visibility = android.view.View.VISIBLE val currentUser = auth.currentUser currentUser?.let { val userInfo = "Hoş geldiniz!\n\n" + "Ad: ${it.displayName}\n" + "Email: ${it.email}\n" + "UID: ${it.uid}" userInfoTextView.text = userInfo } } else { // Kullanıcı giriş yapmamış signInButton.visibility = android.view.View.VISIBLE signOutButton.visibility = android.view.View.GONE userInfoTextView.visibility = android.view.View.GONE userInfoTextView.text = "" } } }
4. strings.xml Dosyasına Eklemeler
<resources>
<!-- Firebase Google Sign-In için gerekli -->
<string name="default_web_client_id">YOUR_WEB_CLIENT_ID</string>
</resources>
<resources> <!-- Firebase Google Sign-In için gerekli --> <string name="default_web_client_id">YOUR_WEB_CLIENT_ID</string> </resources>
5. AndroidManifest.xml Eklentileri
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application ...>
<activity android:name=".LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <application ...> <activity android:name=".LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
6. Firebase Console Ayarları
Firebase Console'da projenizi açın
"Authentication" sekmesine gidin
"Sign-in method" tabına tıklayın
Google'ı etkinleştirin ve kaydedin
"Authorized domains" kısmına uygulamanızın domainlerini ekleyin
Firebase Console'da projenizi açın
"Authentication" sekmesine gidin
"Sign-in method" tabına tıklayın
Google'ı etkinleştirin ve kaydedin
"Authorized domains" kısmına uygulamanızın domainlerini ekleyin
Önemli Notlar:
default_web_client_id değerini Firebase Console'dan almalısınız. Bu değer google-services.json dosyasında da bulunur.
Uygulamanızın SHA-1 parmak izini Firebase proje ayarlarına eklemelisiniz. Bunu Android Studio'nun Gradle panelinden (Gradle > [proje adı] > Tasks > android > signingReport) veya aşağıdaki komutla alabilirsiniz:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
Google Sign-In butonunu özelleştirmek isterseniz, SignInButton yerine kendi buton tasarımınızı kullanabilir ve tıklama olayını aynı şekilde yönetebilirsiniz.
Bu örnek, kullanıcıların Google hesaplarıyla giriş yapmasını sağlar ve temel kullanıcı bilgilerini gösterir. Uygulamanızın ihtiyaçlarına göre bu yapıyı genişletebilirsiniz.
default_web_client_iddeğerini Firebase Console'dan almalısınız. Bu değergoogle-services.jsondosyasında da bulunur.Uygulamanızın SHA-1 parmak izini Firebase proje ayarlarına eklemelisiniz. Bunu Android Studio'nun Gradle panelinden (Gradle > [proje adı] > Tasks > android > signingReport) veya aşağıdaki komutla alabilirsiniz:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
Google Sign-In butonunu özelleştirmek isterseniz,
SignInButtonyerine kendi buton tasarımınızı kullanabilir ve tıklama olayını aynı şekilde yönetebilirsiniz.
Bu örnek, kullanıcıların Google hesaplarıyla giriş yapmasını sağlar ve temel kullanıcı bilgilerini gösterir. Uygulamanızın ihtiyaçlarına göre bu yapıyı genişletebilirsiniz.
0 Yorumlar