Google ile oturum açma, kullanıcı kimlik doğrulamasını Android uygulamanıza hızlı bir şekilde entegre etmenize yardımcı olur. Kullanıcılar, Google Hesaplarını kullanarak uygulamanızda oturum açabilir, izin verebilir ve profil bilgilerini uygulamanızla güvenli bir şekilde paylaşabilir. Android'in Credential Manager Jetpack kitaplığı, tek bir API kullanarak Android cihazlarda tutarlı bir deneyim sunarak bu entegrasyonu sorunsuz hale getirir.
Bu belgede, Android uygulamalarında Google ile oturum açma özelliğini uygulama, Google ile oturum açma düğmesi kullanıcı arayüzünü ayarlama ve uygulamalar için optimize edilmiş tek dokunuşla kaydolma ve oturum açma deneyimlerini yapılandırma konularında size yol gösterilir. Google ile oturum açma, cihaz geçişini sorunsuz hale getirmek için otomatik olarak oturum açmayı destekler. Ayrıca Android, iOS ve web yüzeylerinde platformlar arası çalışabilmesi sayesinde uygulamanızda oturum açma erişimi sağlamanıza yardımcı olur. Uygulamanız için Firebase Authentication kullanıyorsanız Google ile Oturum Açma ve Credential Manager'ı entegre etme hakkında daha fazla bilgiyi Android'de Google ile kimlik doğrulama kılavuzunda bulabilirsiniz.
Google ile oturum açma özelliğini ayarlamak için şu iki ana adımı uygulayın:
Google ile oturum açma özelliğini, Kimlik Bilgisi Yöneticisi'nin alt sayfa kullanıcı arayüzü için bir seçenek olarak yapılandırın. Bu ayar, kullanıcıdan otomatik olarak oturum açmasını isteyecek şekilde yapılandırılabilir. Geçiş anahtarlarını veya şifreleri uyguladıysanız kullanıcının daha önce oturum açmak için kullandığı seçeneği hatırlaması gerekmez. Bu nedenle, ilgili tüm kimlik bilgisi türlerini aynı anda isteyebilirsiniz.

Google ile oturum açma düğmesini uygulamanızın kullanıcı arayüzüne ekleyin. Google ile oturum açma düğmesi, kullanıcıların mevcut Google Hesaplarını kullanarak Android uygulamalarına kaydolmalarını veya bu uygulamalarda oturum açmalarını kolaylaştırır. Kullanıcılar, alt sayfa kullanıcı arayüzünü kapatırsa veya kayıt ve oturum açma işlemleri için Google Hesaplarını kullanmak isterse Google ile oturum aç düğmesini tıklar. Bu değişiklik, geliştiriciler için kullanıcı oryantasyonunu kolaylaştırır ve kaydolma sürecinde daha az sorun yaşanmasını sağlar.

Bu belgede, GoogleID yardımcı kitaplığı kullanılarak Google ile oturum açma düğmesinin ve alt sayfa iletişim kutusunun Kimlik Bilgisi Yöneticisi API'si ile nasıl entegre edileceği açıklanmaktadır.
Projenizi oluşturma
- Projenizi 'da açın veya henüz projeniz yoksa proje oluşturun.
- bölümünde tüm bilgilerin eksiksiz ve doğru olduğundan emin olun.
- Uygulamanızın doğru bir uygulama adı, uygulama logosu ve uygulama ana sayfası atandığından emin olun. Bu değerler, kayıt sırasında Google ile oturum açma izni ekranında ve Üçüncü taraf uygulamaları ve hizmetleri ekranında kullanıcılara gösterilir.
- Uygulamanızın gizlilik politikası ve hizmet şartları URL'lerini belirttiğinizden emin olun.
- 'da henüz yoksa uygulamanız için bir Android istemci kimliği oluşturun. Uygulamanızın paket adını ve SHA-1 imzasını belirtmeniz gerekir.
- bölümünde, henüz yapmadıysanız yeni bir "Web uygulaması" istemci kimliği oluşturun. Şimdilik "Yetkilendirilmiş JavaScript Kaynakları" ve "Yetkilendirilmiş yönlendirme URI'leri" alanlarını yok sayabilirsiniz. Bu istemci kimliği, arka uç sunucunuz Google'ın kimlik doğrulama hizmetleriyle iletişim kurduğunda sunucunuzu tanımlamak için kullanılır.
Bağımlılıkları bildirme
Modülünüzün build.gradle dosyasında, Credential Manager'ın en yeni sürümünü kullanarak bağımlılıkları bildirin:
dependencies {
// ... other dependencies
implementation "androidx.credentials:credentials:<latest version>"
implementation "androidx.credentials:credentials-play-services-auth:<latest version>"
implementation "com.google.android.libraries.identity.googleid:googleid:<latest version>"
}
Google ile oturum açma isteği oluşturma
Uygulamanıza başlamak için Google'da oturum açma isteği oluşturun. Kullanıcının Google kimliği jetonunu almak için GetGoogleIdOption
kodunu kullanın.
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
// nonce string to use when generating a Google ID token
.setNonce(nonce)
.build()
Öncelikle, setFilterByAuthorizedAccounts
parametresi true
olarak ayarlanmış API'yi çağırarak kullanıcının daha önce uygulamanızda oturum açmak için kullanılan hesapları olup olmadığını kontrol edin. Kullanıcılar oturum açmak için mevcut hesaplar arasından seçim yapabilir.
Yetkili Google Hesabı yoksa kullanıcıdan mevcut hesaplarından biriyle kaydolması istenir. Bunu yapmak için API'yi tekrar çağırıp setFilterByAuthorizedAccounts
değerini false
olarak ayarlayarak kullanıcıya istem gönderin.
Kaydolma hakkında daha fazla bilgi edinin.
Geri gelen kullanıcılar için otomatik oturum açmayı etkinleştirme (önerilir)
Geliştiriciler, tek hesaplarıyla kaydolan kullanıcılar için otomatik oturum açmayı etkinleştirmelidir. Bu sayede, özellikle cihaz taşıma sırasında cihazlar arasında sorunsuz bir deneyim sunulur. Kullanıcılar, kimlik bilgilerini yeniden girmeden hesaplarına hızlıca erişebilir. Bu sayede, daha önce oturum açmış olan kullanıcılarınız için gereksiz zorluklar ortadan kalkar.
Otomatik oturum açmayı etkinleştirmek için setAutoSelectEnabled(true)
kullanın. Otomatik oturum açma
yalnızca aşağıdaki ölçütler karşılandığında mümkündür:
- İsteğe uygun tek bir kimlik bilgisi var. Bu kimlik bilgisi, Google Hesabı veya şifre olabilir ve Android destekli cihazdaki varsayılan hesapla eşleşir.
- Kullanıcı, oturumu açıkça kapatmamışsa
- Kullanıcı, Google Hesabı ayarlarında otomatik oturum açmayı devre dışı bırakmamışsa.
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
// nonce string to use when generating a Google ID token
.setNonce(nonce)
.build()
Otomatik oturum açma özelliğini uygularken oturum kapatma işlemini doğru şekilde ele almayı unutmayın. Böylece kullanıcılar, uygulamanızda oturumlarını açıkça kapattıktan sonra her zaman uygun hesabı seçebilir.
Güvenliği artırmak için nonce ayarlama
Oturum açma güvenliğini artırmak ve yeniden oynatma saldırılarını önlemek için her isteğe bir nonce eklemek üzere setNonce
değerini ekleyin. Tek seferlik sayı oluşturma hakkında daha fazla bilgi edinin.
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
// nonce string to use when generating a Google ID token
.setNonce(nonce)
.build()
Google ile oturum açma akışını oluşturma
Google ile oturum açma akışı oluşturma adımları şunlardır:
GetCredentialRequest
oluşturun, ardından kimlik bilgilerini almak içinaddCredentialOption()
kullanarak daha önce oluşturulangoogleIdOption
öğesini ekleyin.- Kullanıcının mevcut kimlik bilgilerini almak için bu isteği
getCredential()
(Kotlin) veyagetCredentialAsync()
(Java) çağrısına iletin. - API başarılı olduktan sonra
GoogleIdTokenCredential
verilerinin sonucunu içerenCustomCredential
öğesini çıkarın. CustomCredential
türü,GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
değerine eşit olmalıdır.GoogleIdTokenCredential.createFrom
yöntemini kullanarak nesneyiGoogleIdTokenCredential
biçimine dönüştürün.Dönüşüm başarılı olursa
GoogleIdTokenCredential
kimliğini ayıklayın, doğrulayın ve sunucunuzda kimlik bilgisini doğrulayın.Dönüştürme işlemi
GoogleIdTokenParsingException
ile başarısız olursa Google ile oturum açma kitaplığı sürümünüzü güncellemeniz gerekebilir.Tanınmayan özel kimlik bilgisi türlerini yakalama
val request: GetCredentialRequest = GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build()
coroutineScope {
try {
val result = credentialManager.getCredential(
request = request,
context = activityContext,
)
handleSignIn(result)
} catch (e: GetCredentialException) {
// Handle failure
}
}
fun handleSignIn(result: GetCredentialResponse) {
// Handle the successfully returned credential.
val credential = result.credential
val responseJson: String
when (credential) {
// Passkey credential
is PublicKeyCredential -> {
// Share responseJson such as a GetCredentialResponse to your server to validate and
// authenticate
responseJson = credential.authenticationResponseJson
}
// Password credential
is PasswordCredential -> {
// Send ID and password to your server to validate and authenticate.
val username = credential.id
val password = credential.password
}
// GoogleIdToken credential
is CustomCredential -> {
if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
try {
// Use googleIdTokenCredential and extract the ID to validate and
// authenticate on your server.
val googleIdTokenCredential = GoogleIdTokenCredential
.createFrom(credential.data)
// You can use the members of googleIdTokenCredential directly for UX
// purposes, but don't use them to store or control access to user
// data. For that you first need to validate the token:
// pass googleIdTokenCredential.getIdToken() to the backend server.
// see [validation instructions](https://developers.google.com/identity/gsi/web/guides/verify-google-id-token)
} catch (e: GoogleIdTokenParsingException) {
Log.e(TAG, "Received an invalid google id token response", e)
}
} else {
// Catch any unrecognized custom credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
else -> {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
}
Google ile oturum açma düğmesi akışını tetikleme
Google ile oturum açma düğmesi akışını tetiklemek için
GetGoogleIdOption
yerine GetSignInWithGoogleOption
kullanın:
val signInWithGoogleOption: GetSignInWithGoogleOption = GetSignInWithGoogleOption.Builder(
serverClientId = WEB_CLIENT_ID
).setNonce(nonce)
.build()
Döndürülen GoogleIdTokenCredential
değerini aşağıdaki kod örneğinde açıklandığı şekilde işleyin.
fun handleSignInWithGoogleOption(result: GetCredentialResponse) {
// Handle the successfully returned credential.
val credential = result.credential
when (credential) {
is CustomCredential -> {
if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
try {
// Use googleIdTokenCredential and extract id to validate and
// authenticate on your server.
val googleIdTokenCredential = GoogleIdTokenCredential
.createFrom(credential.data)
} catch (e: GoogleIdTokenParsingException) {
Log.e(TAG, "Received an invalid google id token response", e)
}
}
else {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
else -> {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
}
Google ile oturum açma isteğini oluşturduktan sonra, Google ile oturum açma bölümünde belirtildiği gibi kimlik doğrulama akışını başlatın.
Yeni kullanıcılar için kaydı etkinleştirme (önerilir)
Google ile oturum açma, kullanıcıların uygulamanızda veya hizmetinizde birkaç dokunuşla yeni bir hesap oluşturmasının en kolay yoludur.
Kayıtlı kimlik bilgisi bulunamazsa (getGoogleIdOption
tarafından Google Hesabı döndürülmezse) kullanıcınızdan kaydolmasını isteyin. Öncelikle, daha önce kullanılan hesapların olup olmadığını görmek için setFilterByAuthorizedAccounts(true)
simgesini kontrol edin. Hiçbiri bulunamazsa kullanıcıdan setFilterByAuthorizedAccounts(false)
kullanarak Google Hesabı ile kaydolmasını isteyin.
Örnek:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(WEB_CLIENT_ID)
.build()
Google kayıt isteğini oluşturduktan sonra kimlik doğrulama akışını başlatın. Kullanıcılar kaydolmak için Google ile oturum açma özelliğini kullanmak istemiyorsa uygulamanızı otomatik doldurma için optimize etmeyi düşünebilirsiniz. Kullanıcınız hesap oluşturduktan sonra, hesap oluşturma işleminin son adımı olarak geçiş anahtarlarına kaydetmeyi düşünebilirsiniz.
Oturumu kapatma
Bir kullanıcı uygulamanızın oturumunu kapattığında, mevcut kullanıcı kimliği bilgilerinin durumunu tüm kimlik bilgisi sağlayıcılarından temizlemek için clearCredentialState()
API yöntemini çağırın.
Bu işlem, belirtilen uygulama için depolanan tüm kimlik bilgisi oturumlarının temizlenmesi gerektiğini tüm kimlik bilgisi sağlayıcılarına bildirir.
Kimlik bilgisi sağlayıcı, etkin bir kimlik bilgisi oturumunu saklamış olabilir ve gelecekteki get-credential çağrıları için oturum açma seçeneklerini sınırlamak üzere bu oturumu kullanabilir. Örneğin, etkin kimlik bilgilerine diğer mevcut kimlik bilgilerine göre öncelik verebilir. Kullanıcınız uygulamanızdan açıkça çıktığında ve bir sonraki seferde bütünsel oturum açma seçeneklerini elde etmek için sağlayıcının depolanan kimlik bilgisi oturumunu temizlemesine izin vermek üzere bu API'yi çağırmanız gerekir.