'Google से साइन इन करें' सुविधा की मदद से, अपने Android ऐप्लिकेशन में उपयोगकर्ता की पुष्टि करने की सुविधा को आसानी से इंटिग्रेट किया जा सकता है. उपयोगकर्ता, आपके ऐप्लिकेशन में साइन इन करने के लिए अपने Google खाते का इस्तेमाल कर सकते हैं. साथ ही, वे अपनी सहमति दे सकते हैं और आपके ऐप्लिकेशन के साथ अपनी प्रोफ़ाइल की जानकारी सुरक्षित तरीके से शेयर कर सकते हैं. Android की Credential Manager Jetpack लाइब्रेरी की मदद से, इस इंटिग्रेशन को आसानी से किया जा सकता है. साथ ही, यह एक ही एपीआई का इस्तेमाल करके, Android डिवाइसों पर एक जैसा अनुभव देती है.
इस दस्तावेज़ में, Android ऐप्लिकेशन में 'Google से साइन इन करें' सुविधा को लागू करने का तरीका बताया गया है. साथ ही, इसमें 'Google से साइन इन करें' बटन का यूज़र इंटरफ़ेस (यूआई) सेट अप करने और ऐप्लिकेशन के हिसाब से ऑप्टिमाइज़ किए गए, एक टैप से साइन अप और साइन इन करने की सुविधा को कॉन्फ़िगर करने का तरीका बताया गया है. डिवाइस को आसानी से माइग्रेट करने के लिए, 'Google से साइन इन करें' सुविधा में अपने-आप साइन इन करने की सुविधा उपलब्ध है. साथ ही, यह सुविधा Android, iOS, और वेब प्लैटफ़ॉर्म पर काम करती है. इससे आपको किसी भी डिवाइस पर अपने ऐप्लिकेशन में साइन इन करने की सुविधा देने में मदद मिलती है. अगर आपने अपने ऐप्लिकेशन के लिए Firebase Authentication का इस्तेमाल किया है, तो Android पर Google से पुष्टि करें गाइड में, 'Google से साइन इन करें' और Credential Manager को इंटिग्रेट करने के बारे में ज़्यादा जानें.
'Google से साइन इन करें' सुविधा सेट अप करने के लिए, यह दो मुख्य चरण पूरे करें:
क्रेडेंशियल मैनेजर के बॉटम शीट यूज़र इंटरफ़ेस (यूआई) के लिए, 'Google से साइन इन करें' को एक विकल्प के तौर पर कॉन्फ़िगर करें. इसे इस तरह कॉन्फ़िगर किया जा सकता है कि उपयोगकर्ता को साइन इन करने के लिए अपने-आप प्रॉम्प्ट मिले. अगर आपने पासकी या पासवर्ड में से किसी एक को लागू किया है, तो एक साथ सभी ज़रूरी क्रेडेंशियल टाइप के लिए अनुरोध किया जा सकता है. इससे उपयोगकर्ता को यह याद रखने की ज़रूरत नहीं होगी कि उसने साइन इन करने के लिए पहले कौनसे विकल्प का इस्तेमाल किया था.

अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में, 'Google से साइन इन करें' बटन जोड़ें. 'Google से साइन इन करें' बटन की मदद से, लोग अपने मौजूदा Google खातों का इस्तेमाल करके Android ऐप्लिकेशन में आसानी से साइन अप या साइन इन कर सकते हैं. अगर उपयोगकर्ता बॉटम शीट यूज़र इंटरफ़ेस (यूआई) को खारिज करते हैं या उन्हें साइन अप और साइन इन करने के लिए, अपने Google खाते का इस्तेमाल करना है, तो वे 'Google से साइन इन करें' बटन पर क्लिक करेंगे. डेवलपर के लिए इसका मतलब है कि उपयोगकर्ताओं को आसानी से शामिल किया जा सकता है और साइन-अप के दौरान रुकावटें कम आती हैं.

इस दस्तावेज़ में, Google ID हेल्पर लाइब्रेरी का इस्तेमाल करके, Credential Manager API के साथ 'Google से साइन इन करें' बटन और बॉटम शीट डायलॉग को इंटिग्रेट करने का तरीका बताया गया है.
अपना प्रोजेक्ट सेट अप करना
- में अपना प्रोजेक्ट खोलें. अगर आपके पास पहले से कोई प्रोजेक्ट नहीं है, तो एक प्रोजेक्ट बनाएं.
- पर जाकर, पक्का करें कि दी गई सारी जानकारी पूरी और सटीक हो.
- पक्का करें कि आपके ऐप्लिकेशन के लिए सही ऐप्लिकेशन का नाम, ऐप्लिकेशन का लोगो, और ऐप्लिकेशन का होम पेज असाइन किया गया हो. ये वैल्यू, उपयोगकर्ताओं को साइन अप करने के दौरान 'Google से साइन इन करें' सुविधा के लिए सहमति वाली स्क्रीन पर और तीसरे पक्ष के ऐप्लिकेशन और सेवाओं वाली स्क्रीन पर दिखेंगी.
- पक्का करें कि आपने अपने ऐप्लिकेशन की निजता नीति और सेवा की शर्तों के यूआरएल दिए हों.
- में जाकर, अपने ऐप्लिकेशन के लिए Android क्लाइंट आईडी बनाएं. ऐसा तब करें, जब आपके पास पहले से कोई आईडी न हो. आपको अपने ऐप्लिकेशन के पैकेज का नाम और SHA-1 हस्ताक्षर बताना होगा.
- अगर आपने अब तक नया "वेब ऐप्लिकेशन" क्लाइंट आईडी नहीं बनाया है, तो में जाकर, नया क्लाइंट आईडी बनाएं. फ़िलहाल, "अनुमति वाले JavaScript ऑरिजिन" और "अनुमति वाले रीडायरेक्ट यूआरआई" फ़ील्ड को अनदेखा किया जा सकता है. इस क्लाइंट आईडी का इस्तेमाल, आपके बैकएंड सर्वर की पहचान करने के लिए किया जाएगा. ऐसा तब होगा, जब वह Google की पुष्टि करने वाली सेवाओं से कम्यूनिकेट करेगा.
डिपेंडेंसी का एलान करना
अपने मॉड्यूल की build.gradle फ़ाइल में, Credential Manager के नए वर्शन का इस्तेमाल करके डिपेंडेंसी का एलान करें:
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 साइन-इन के अनुरोध को इंस्टैंशिएट करना
इसे लागू करने के लिए, Google साइन-इन के अनुरोध को इंस्टैंशिएट करें. किसी उपयोगकर्ता का Google आईडी टोकन वापस पाने के लिए, GetGoogleIdOption
का इस्तेमाल करें.
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()
सबसे पहले, यह देखें कि उपयोगकर्ता के पास ऐसे खाते हैं या नहीं जिनका इस्तेमाल पहले आपके ऐप्लिकेशन में साइन इन करने के लिए किया गया था. इसके लिए, एपीआई को कॉल करें और setFilterByAuthorizedAccounts
पैरामीटर को true
पर सेट करें. उपयोगकर्ता, साइन इन करने के लिए उपलब्ध खातों में से कोई एक खाता चुन सकते हैं.
अगर कोई भी मान्य Google खाता उपलब्ध नहीं है, तो उपयोगकर्ता को उपलब्ध खातों में से किसी एक से साइन अप करने के लिए कहा जाना चाहिए. इसके लिए, एपीआई को फिर से कॉल करके उपयोगकर्ता को सूचना दें और setFilterByAuthorizedAccounts
को false
पर सेट करें.
साइन अप करने के बारे में ज़्यादा जानें.
दोबारा आने वाले उपयोगकर्ताओं के लिए, अपने-आप साइन-इन होने की सुविधा चालू करें (सुझाया गया)
डेवलपर को उन उपयोगकर्ताओं के लिए, अपने-आप साइन-इन होने की सुविधा चालू करनी चाहिए जो एक ही खाते से रजिस्टर करते हैं. इससे अलग-अलग डिवाइसों पर एक जैसा अनुभव मिलता है. खास तौर पर, डिवाइस माइग्रेट करने के दौरान, उपयोगकर्ता अपने खाते को तुरंत ऐक्सेस कर सकते हैं. इसके लिए, उन्हें फिर से क्रेडेंशियल डालने की ज़रूरत नहीं होती. अगर आपके उपयोगकर्ताओं ने पहले ही साइन इन किया हुआ है, तो इससे उन्हें बिना किसी वजह के होने वाली परेशानी से बचाया जा सकता है.
अपने-आप साइन-इन होने की सुविधा चालू करने के लिए, setAutoSelectEnabled(true)
का इस्तेमाल करें. अपने-आप साइन इन होने की सुविधा सिर्फ़ तब काम करती है, जब ये शर्तें पूरी की गई हों:
- अनुरोध से मेल खाने वाला एक ही क्रेडेंशियल मौजूद है. यह क्रेडेंशियल, Google खाता या पासवर्ड हो सकता है. साथ ही, यह क्रेडेंशियल, Android डिवाइस पर मौजूद डिफ़ॉल्ट खाते से मेल खाता है.
- उपयोगकर्ता ने साफ़ तौर पर साइन आउट नहीं किया है.
- उपयोगकर्ता ने Google खाते की सेटिंग में, अपने-आप साइन इन होने की सुविधा बंद न की हो.
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()
अपने-आप साइन इन होने की सुविधा लागू करते समय, साइन-आउट करने की सुविधा को सही तरीके से मैनेज करना न भूलें. इससे उपयोगकर्ता, आपके ऐप्लिकेशन से साइन आउट करने के बाद, हमेशा सही खाता चुन पाएंगे.
सुरक्षा को बेहतर बनाने के लिए, एक नॉनस सेट करना
साइन इन करने की सुरक्षा को बेहतर बनाने और रीप्ले हमलों से बचने के लिए, हर अनुरोध में नॉन्स शामिल करने के लिए setNonce
जोड़ें. नॉन्स जनरेट करने के बारे में
ज़्यादा जानें.
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 से साइन इन करें' फ़्लो बनाना
'Google से साइन इन करें' फ़्लो सेट अप करने का तरीका यहां दिया गया है:
GetCredentialRequest
को इंस्टैंशिएट करें. इसके बाद, क्रेडेंशियल पाने के लिए, पहले से बनाए गएgoogleIdOption
कोaddCredentialOption()
का इस्तेमाल करके जोड़ें.- उपयोगकर्ता के उपलब्ध क्रेडेंशियल पाने के लिए, इस अनुरोध को
getCredential()
(Kotlin) याgetCredentialAsync()
(Java) कॉल पर भेजें. - एपीआई के काम करने के बाद,
CustomCredential
निकालें. इसमेंGoogleIdTokenCredential
डेटा का नतीजा होता है. CustomCredential
का टाइप,GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
की वैल्यू के बराबर होना चाहिए.GoogleIdTokenCredential.createFrom
तरीके का इस्तेमाल करके, ऑब्जेक्ट कोGoogleIdTokenCredential
में बदलें.अगर कन्वर्ज़न पूरा हो जाता है, तो
GoogleIdTokenCredential
आईडी निकालें, उसकी पुष्टि करें, और अपने सर्वर पर क्रेडेंशियल की पुष्टि करें.अगर
GoogleIdTokenParsingException
के साथ कन्वर्ज़न नहीं होता है, तो आपको Sign in with Google लाइब्रेरी का वर्शन अपडेट करना पड़ सकता है.पहचान न किए गए कस्टम क्रेडेंशियल टाइप का पता लगाएं.
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 से साइन इन करें' बटन का फ़्लो ट्रिगर करना
'Google से साइन इन करें' बटन के फ़्लो को ट्रिगर करने के लिए, GetGoogleIdOption
के बजाय GetSignInWithGoogleOption
का इस्तेमाल करें:
val signInWithGoogleOption: GetSignInWithGoogleOption = GetSignInWithGoogleOption.Builder(
serverClientId = WEB_CLIENT_ID
).setNonce(nonce)
.build()
लौटाए गए GoogleIdTokenCredential
को मैनेज करने के लिए, यहां दिया गया कोड देखें.
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 खाते से साइन इन करने के अनुरोध को इंस्टैंशिएट करने के बाद, पुष्टि करने की प्रोसेस शुरू करें. यह प्रोसेस, Google खाते से साइन इन करें सेक्शन में बताई गई प्रोसेस की तरह ही होनी चाहिए.
नए उपयोगकर्ताओं के लिए साइन-अप करने की सुविधा चालू करें (सुझाया गया)
'Google से साइन इन करें' सुविधा, उपयोगकर्ताओं के लिए आपके ऐप्लिकेशन या सेवा पर नया खाता बनाने का सबसे आसान तरीका है. इसके लिए, उन्हें सिर्फ़ कुछ बार टैप करना होता है.
अगर सेव किए गए क्रेडेंशियल नहीं मिलते हैं (getGoogleIdOption
से कोई Google खाता नहीं मिलता है), तो अपने उपयोगकर्ता को साइन अप करने के लिए कहें. सबसे पहले, setFilterByAuthorizedAccounts(true)
पर जाकर देखें कि पहले इस्तेमाल किए गए कोई खाते मौजूद हैं या नहीं. अगर कोई भी खाता नहीं मिलता है, तो उपयोगकर्ता को अपने Google खाते से साइन अप करने के लिए कहें. इसके लिए, setFilterByAuthorizedAccounts(false)
का इस्तेमाल करें
उदाहरण:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(WEB_CLIENT_ID)
.build()
Google से साइन अप करने का अनुरोध शुरू करने के बाद, पुष्टि करने की प्रोसेस शुरू करें. अगर उपयोगकर्ता साइन अप करने के लिए, 'Google से साइन इन करें' सुविधा का इस्तेमाल नहीं करना चाहते हैं, तो अपने ऐप्लिकेशन को अपने-आप भरने की सुविधा के लिए ऑप्टिमाइज़ करें. जब आपका उपयोगकर्ता खाता बना लेता है, तो खाता बनाने की प्रोसेस के आखिरी चरण के तौर पर, उसे पासकी में रजिस्टर करें.
साइन आउट करने की सुविधा
जब कोई उपयोगकर्ता आपके ऐप्लिकेशन से साइन आउट करता है, तो एपीआई clearCredentialState()
मेथड को कॉल करें. इससे क्रेडेंशियल की सेवा देने वाली सभी कंपनियों से, मौजूदा उपयोगकर्ता के क्रेडेंशियल की स्थिति मिट जाएगी.
इससे क्रेडेंशियल देने वाली सभी कंपनियों को सूचना मिलेगी कि दिए गए ऐप्लिकेशन के लिए, सेव किए गए क्रेडेंशियल सेशन को मिटा दिया जाए.
क्रेडेंशियल प्रोवाइडर ने चालू क्रेडेंशियल सेशन को सेव किया हो सकता है. साथ ही, आने वाले समय में get-credential कॉल के लिए, साइन इन करने के विकल्पों को सीमित करने के लिए इसका इस्तेमाल किया हो सकता है. उदाहरण के लिए, यह उपलब्ध किसी भी अन्य क्रेडेंशियल के मुकाबले, चालू क्रेडेंशियल को प्राथमिकता दे सकता है. जब आपका उपयोगकर्ता आपके ऐप्लिकेशन से साइन आउट करता है, तब आपको इस एपीआई को कॉल करना चाहिए. इससे, सेवा देने वाली कंपनी को सेव किए गए क्रेडेंशियल सेशन को मिटाने की अनुमति मिलती है. ऐसा इसलिए किया जाता है, ताकि अगली बार साइन इन करने पर उपयोगकर्ता को सभी विकल्प मिल सकें.