FirebaseUI का इस्तेमाल करके, अपने Android ऐप्लिकेशन में आसानी से साइन इन करने की सुविधा जोड़ें

FirebaseUI Auth Firebase Authentication SDK पर बनी एक लाइब्रेरी है. यह आपके ऐप्लिकेशन में इस्तेमाल के लिए, ड्रॉप-इन यूज़र इंटरफ़ेस (यूआई) फ़्लो उपलब्ध कराती है.

साइन-इन करने के लिए, सुझाए गए फ़्लो में Compose स्क्रीन का इस्तेमाल किया जाता है. ऐसे ऐप्लिकेशन जो अब भी Activities का इस्तेमाल करते हैं उनके लिए, Activity-आधारित मौजूदा ऐप्लिकेशन सेक्शन देखें.

FirebaseUI Auth से ये फ़ायदे मिलते हैं:

  • कई प्रोवाइडर — ईमेल/पासवर्ड, फ़ोन, Google, Facebook, Apple, GitHub, Microsoft, Yahoo, Twitter, अनाम उपयोगकर्ता के तौर पर पुष्टि, और कस्टम OAuth के लिए साइन-इन फ़्लो.
  • खाता मैनेजमेंट — खाता बनाने और पासवर्ड रीसेट करने जैसे खाता मैनेजमेंट से जुड़े टास्क को मैनेज करने के लिए फ़्लो.
  • खाता लिंक करना — पहचान की पुष्टि करने वाले अलग-अलग प्रोवाइडर के उपयोगकर्ताओं के खातों को सुरक्षित तरीके से लिंक करने के लिए फ़्लो.
  • अनाम उपयोगकर्ता को अपग्रेड करना — अनाम उपयोगकर्ताओं को सुरक्षित तरीके से अपग्रेड करने के लिए फ़्लो.
  • कस्टम थीम — मटीरियल 3 यूज़र इंटरफ़ेस (यूआई) की सुविधा. यह आपके ऐप्लिकेशन की थीम को इनहेरिट कर सकती है. इसके अलावा, FirebaseUI ओपन सोर्स है. इसलिए, प्रोजेक्ट को फ़ोर्क किया जा सकता है और अपनी ज़रूरत के हिसाब से कस्टमाइज़ किया जा सकता है.
  • Credential Manager — क्रॉस-डिवाइस पर तेज़ी से साइन-इन करने के लिए, Credential Manager के साथ अपने-आप इंटिग्रेशन.
  • कई चरणों में पुष्टि — बेहतर सुरक्षा के लिए, एसएमएस और टीओटीपी की सुविधा.

शुरू करने से पहले

  1. अगर आपने पहले से ऐसा नहीं किया है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें.
  2. Firebase कंसोल में, साइन-इन करने के वे तरीके चालू करें जिन्हें आपको अपने ऐप्लिकेशन में इस्तेमाल करना है.
  3. अपने ऐप्लिकेशन के मॉड्यूल में FirebaseUI Auth जोड़ें:
dependencies {
    // Check Maven Central for the latest version:
    // https://central.sonatype.com/artifact/com.firebaseui/firebase-ui-auth/versions
    implementation("com.firebaseui:firebase-ui-auth:10.0.0-beta02")

    // Required only if Facebook login support is required
    // Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94
    implementation("com.facebook.android:facebook-android-sdk:8.x")
}

साइन-इन करने के तरीके सेट अप करना

Google साइन-इन

Google साइन-इन का कॉन्फ़िगरेशन, google-services Gradle प्लग-इन से अपने-आप मिल जाता है. पक्का करें कि आपने Firebase कंसोल में Google साइन-इन की सुविधा चालू की हो.

Facebook से लॉगिन करना

अगर Facebook से लॉगिन करने की सुविधा का इस्तेमाल किया जा रहा है, तो strings.xml में अपना Facebook ऐप्लिकेशन आईडी जोड़ें:

<resources>
    <string name="facebook_application_id" translatable="false">YOUR_FACEBOOK_APP_ID</string>
    <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_FACEBOOK_APP_ID</string>
    <string name="facebook_client_token" translatable="false">CHANGE-ME</string>
</resources>

सेटअप के निर्देशों के लिए, Facebook for Developers का दस्तावेज़ देखें.

अन्य प्रोवाइडर

Twitter, GitHub, Microsoft, Yahoo, और Apple के प्रोवाइडर के लिए, Firebase कंसोल में कॉन्फ़िगरेशन की ज़रूरत होती है. हालांकि, Android के लिए अलग से कोई सेटअप करने की ज़रूरत नहीं होती. प्रोवाइडर के हिसाब से निर्देश पाने के लिए, Firebase Auth का दस्तावेज़ देखें.

authUIConfiguration में, वे प्रोवाइडर चुनें जिन्हें आपको इस्तेमाल करना है:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(
            AuthProvider.Phone(
                defaultCountryCode = "US",
            )
        )
        provider(
            AuthProvider.Google(
                scopes = listOf("email"),
                serverClientId = null,
            )
        )
        provider(AuthProvider.Facebook())
    }
}

ईमेल लिंक से साइन-इन करने की सुविधा, ईमेल प्रोवाइडर के कॉन्फ़िगरेशन में मौजूद होती है:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(
            AuthProvider.Email(
                isEmailLinkSignInEnabled = true,
                emailLinkActionCodeSettings = actionCodeSettings {
                    url = "https://example.com/auth"
                    handleCodeInApp = true
                    setAndroidPackageName(
                        "com.example.app",
                        true,
                        null,
                    )
                },
            )
        )
    }
}

डीप-लिंक हैंडलिंग के पूरे फ़्लो के लिए, GitHub में मौजूद README का ईमेल लिंक से साइन-इन करना सेक्शन देखें.

साइन इन करें

AuthUIConfiguration बनाएं. इसके बाद, FirebaseAuthScreen दिखाएं.

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val authUI = FirebaseAuthUI.getInstance()

        setContent {
            MyAppTheme {
                val configuration = authUIConfiguration {
                    context = applicationContext
                    theme = AuthUITheme.fromMaterialTheme()
                    providers {
                        provider(AuthProvider.Email())
                        provider(
                            AuthProvider.Google(
                                scopes = listOf("email"),
                                serverClientId = null,
                            )
                        )
                    }
                }

                if (authUI.isSignedIn()) {
                    HomeScreen()
                } else {
                    FirebaseAuthScreen(
                        configuration = configuration,
                        authUI = authUI,
                        onSignInSuccess = { result ->
                            // User signed in successfully
                        },
                        onSignInFailure = { exception ->
                            // Sign in failed
                        },
                        onSignInCancelled = {
                            finish()
                        },
                    )
                }
            }
        }
    }
}

इससे आपको पुष्टि करने का पूरा फ़्लो मिलता है. इसमें ये सुविधाएं शामिल होती हैं:

  • पासवर्ड से पुष्टि.
  • Google साइन-इन.
  • पासवर्ड फिर सेट करें.
  • मटीरियल 3 स्टाइलिंग.
  • Credential Manager की सुविधा.
  • सीधे कॉलबैक के ज़रिए, गड़बड़ी को ठीक करना.

साइन आउट करें

FirebaseUI Auth, साइन-आउट करने और खाता मिटाने के लिए आसान तरीके उपलब्ध कराता है:

lifecycleScope.launch {
    FirebaseAuthUI.getInstance().signOut(applicationContext)
}
lifecycleScope.launch {
    FirebaseAuthUI.getInstance().delete(applicationContext)
}

कस्टमाइज़ेशन

FirebaseUI Auth को कस्टमाइज़ किया जा सकता है. इसे कस्टमाइज़ करने के लिए, सबसे आसान तरीका यह है कि authUIConfiguration में सीधे कोई थीम सेट की जाए:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(AuthProvider.Google(scopes = listOf("email"), serverClientId = null))
    }
    theme = AuthUITheme.Adaptive
}

ये काम भी किए जा सकते हैं:

  • AuthUITheme.Default, AuthUITheme.DefaultDark या AuthUITheme.Adaptive का इस्तेमाल करना.
  • AuthUITheme.fromMaterialTheme() की मदद से, अपने ऐप्लिकेशन की थीम को इनहेरिट करना.
  • .copy() की मदद से, डिफ़ॉल्ट थीम को कस्टमाइज़ करना.
  • AuthUITheme को पूरी तरह से कस्टम बनाना.
  • authUIConfiguration में, लोगो, सेवा की शर्तों का यूआरएल, और निजता नीति का यूआरएल सेट करना.

थीमिंग और कस्टमाइज़ेशन की पूरी जानकारी के लिए, इसमें थीम की प्राथमिकता, प्रोवाइडर बटन की स्टाइलिंग, और कस्टम थीम के बारे में जानकारी शामिल है, GitHub में मौजूद readme का थीमिंग और कस्टमाइज़ेशन सेक्शन देखें.

Activity-आधारित मौजूदा ऐप्लिकेशन

अगर आपका ऐप्लिकेशन अब भी Activities और Activity Result API का इस्तेमाल करता है, तो AuthFlowController का इस्तेमाल करके, Activity-आधारित लॉन्च फ़्लो को बनाए रखा जा सकता है:

private val authLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult(),
) { result ->
    if (result.resultCode == RESULT_OK) {
        val user = FirebaseAuth.getInstance().currentUser
        // ...
    } else {
        // User cancelled or sign-in failed
    }
}

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(
            AuthProvider.Google(
                scopes = listOf("email"),
                serverClientId = null,
            )
        )
    }
}

val controller = FirebaseAuthUI.getInstance().createAuthFlow(configuration)
authLauncher.launch(controller.createIntent(this))