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

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

  • एक से ज़्यादा प्रोवाइडर - ईमेल/पासवर्ड, ईमेल लिंक, फ़ोन से पुष्टि करने की सुविधा, Google से साइन इन करें, Facebook Login, Twitter Login, और GitHub Login के लिए साइन-इन फ़्लो.
  • खाता मैनेजमेंट - खाता मैनेजमेंट से जुड़े टास्क को पूरा करने के लिए फ़्लो, जैसे कि खाता बनाना और पासवर्ड रीसेट करना.
  • खाता लिंक करना - यह अलग-अलग पहचान देने वाली कंपनियों के प्लैटफ़ॉर्म पर, उपयोगकर्ता खातों को सुरक्षित तरीके से लिंक करने की सुविधा देता है.
  • Anonymous User Upgrading - flows to safely upgrade anonymous users.
  • कस्टम थीम - FirebaseUI के लुक को अपने ऐप्लिकेशन के हिसाब से पसंद के मुताबिक बनाएं. इसके अलावा, FirebaseUI ओपन सोर्स होने की वजह से, प्रोजेक्ट को फ़ोर्क किया जा सकता है और अपनी ज़रूरत के हिसाब से कस्टमाइज़ किया जा सकता है.
  • Credential Manager - अलग-अलग डिवाइसों पर तेज़ी से साइन इन करने के लिए, Credential Manager के साथ अपने-आप इंटिग्रेट होने की सुविधा.

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

  1. अगर आपने पहले से ही A/B टेस्टिंग नहीं बनाई है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें.

  2. ऐप्लिकेशन-लेवल की build.gradle(.kts) फ़ाइल में, FirebaseUI के लिए डिपेंडेंसी जोड़ें. अगर आपको Facebook या Twitter से साइन-इन करने की सुविधा देनी है, तो Facebook और Twitter SDK टूल भी शामिल करें:

        dependencies {
            // ...
    
            implementation("com.firebaseui:firebase-ui-auth:9.0.0")
    
            // 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")
        }
    

    FirebaseUI Auth SDK की ट्रांज़िटिव डिपेंडेंसी, Firebase SDK और Google Play services SDK पर होती है.

  3. Firebase console में, Security > Authentication पर जाएं.

  4. साइन-इन करने का तरीका टैब में जाकर, साइन-इन करने की सुविधा देने वाली उन कंपनियों को चालू करें जिनकी आपको सहायता चाहिए. साइन-इन की सुविधा देने वाली कुछ कंपनियों को अतिरिक्त जानकारी की ज़रूरत होती है. यह जानकारी आम तौर पर, सेवा की डेवलपर कंसोल में उपलब्ध होती है.

  5. अगर आपने Google से साइन इन करने की सुविधा चालू की है, तो:

    1. अपनी Firebase कॉन्फ़िगरेशन फ़ाइल अपडेट करें.

      1. Firebase कंसोल में प्रॉम्प्ट मिलने पर, अपडेट की गई Firebase कॉन्फ़िगरेशन फ़ाइल (google-services.json) डाउनलोड करें. इसमें अब Google साइन-इन के लिए ज़रूरी OAuth क्लाइंट की जानकारी शामिल है.

      2. अपडेट की गई इस कॉन्फ़िगरेशन फ़ाइल को अपने Android Studio प्रोजेक्ट में ले जाएं. साथ ही, अब पुरानी हो चुकी कॉन्फ़िगरेशन फ़ाइल को बदलें. (अपने Android प्रोजेक्ट में Firebase जोड़ना लेख पढ़ें.)

    2. अगर आपने अब तक अपने ऐप्लिकेशन का SHA-1 फ़िंगरप्रिंट नहीं दिया है, तो उसे दें.

      1. Firebase कंसोल में, सेटिंग > सामान्य टैब पर जाएं.

      2. नीचे की ओर स्क्रोल करके आपके ऐप्लिकेशन कार्ड पर जाएं. इसके बाद, अपना Android ऐप्लिकेशन चुनें और SHA सर्टिफ़िकेट फ़िंगरप्रिंट फ़ील्ड में अपना SHA-1 फ़िंगरप्रिंट जोड़ें.

      अपने ऐप्लिकेशन के SHA फ़िंगरप्रिंट को पाने के तरीके के बारे में जानने के लिए, अपने क्लाइंट की पुष्टि करना लेख पढ़ें.

  6. अगर Facebook या Twitter से साइन इन करने की सुविधा उपलब्ध है, तो strings.xml में स्ट्रिंग रिसॉर्स जोड़ें. इनमें, हर प्रोवाइडर के लिए ज़रूरी पहचान से जुड़ी जानकारी दी गई हो:

    
    <resources>
      <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). -->
      <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string>
      <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string>
    </resources>

साइन इन करें

एक ActivityResultLauncher बनाएं, जो FirebaseUI Activity के नतीजे के लिए कॉलबैक रजिस्टर करता है:

Kotlin

// See: https://developer.android.com/training/basics/intents/result
private val signInLauncher = registerForActivityResult(
    FirebaseAuthUIActivityResultContract(),
) { res ->
    this.onSignInResult(res)
}

Java

// See: https://developer.android.com/training/basics/intents/result
private final ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult(
        new FirebaseAuthUIActivityResultContract(),
        new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() {
            @Override
            public void onActivityResult(FirebaseAuthUIAuthenticationResult result) {
                onSignInResult(result);
            }
        }
);

FirebaseUI के साइन इन फ़्लो को शुरू करने के लिए, साइन इन करने का इंटेंट बनाएं. इसके लिए, साइन इन करने के अपने पसंदीदा तरीके इस्तेमाल करें:

Kotlin

// Choose authentication providers
val providers = arrayListOf(
    AuthUI.IdpConfig.EmailBuilder().build(),
    AuthUI.IdpConfig.PhoneBuilder().build(),
    AuthUI.IdpConfig.GoogleBuilder().build(),
    AuthUI.IdpConfig.FacebookBuilder().build(),
    AuthUI.IdpConfig.TwitterBuilder().build(),
)

// Create and launch sign-in intent
val signInIntent = AuthUI.getInstance()
    .createSignInIntentBuilder()
    .setAvailableProviders(providers)
    .build()
signInLauncher.launch(signInIntent)

Java

// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
        new AuthUI.IdpConfig.EmailBuilder().build(),
        new AuthUI.IdpConfig.PhoneBuilder().build(),
        new AuthUI.IdpConfig.GoogleBuilder().build(),
        new AuthUI.IdpConfig.FacebookBuilder().build(),
        new AuthUI.IdpConfig.TwitterBuilder().build());

// Create and launch sign-in intent
Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .build();
signInLauncher.launch(signInIntent);

साइन-इन करने की प्रोसेस पूरी होने के बाद, आपको onSignInResult में नतीजे दिखेंगे:

Kotlin

private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
    val response = result.idpResponse
    if (result.resultCode == RESULT_OK) {
        // Successfully signed in
        val user = FirebaseAuth.getInstance().currentUser
        // ...
    } else {
        // Sign in failed. If response is null the user canceled the
        // sign-in flow using the back button. Otherwise check
        // response.getError().getErrorCode() and handle the error.
        // ...
    }
}

Java

private void onSignInResult(FirebaseAuthUIAuthenticationResult result) {
    IdpResponse response = result.getIdpResponse();
    if (result.getResultCode() == RESULT_OK) {
        // Successfully signed in
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        // ...
    } else {
        // Sign in failed. If response is null the user canceled the
        // sign-in flow using the back button. Otherwise check
        // response.getError().getErrorCode() and handle the error.
        // ...
    }
}

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

  1. Firebase console में, सुरक्षा > Authentication पर जाएं.

  2. साइन इन करने का तरीका टैब पर जाकर, ईमेल/पासवर्ड से साइन इन करने का तरीका चालू करें. ध्यान दें कि ईमेल लिंक से साइन इन करने की सुविधा का इस्तेमाल करने के लिए, ईमेल/पासवर्ड से साइन इन करने की सुविधा चालू होनी चाहिए.

  3. उसी सेक्शन में, ईमेल लिंक (बिना पासवर्ड के साइन-इन करें) साइन-इन करने का तरीका चालू करें. इसके बाद, सेव करें पर क्लिक करें.

  4. ईमेल-लिंक से साइन इन करने की सुविधा का इस्तेमाल करने के लिए, आपको Firebase Dynamic Links भी चालू करना होगा:

    1. Firebase console में, DevOps & Engagement > Dynamic Links पर जाएं.

    2. शुरू करें पर क्लिक करें. इसके बाद, कोई डोमेन जोड़ें. यहां चुना गया डोमेन, आपके उपयोगकर्ताओं को भेजे गए ईमेल लिंक में दिखेगा.

  5. enableEmailLinkSignIn इंस्टेंस पर EmailBuilder को कॉल करके, FirebaseUI में ईमेल लिंक से साइन इन करने की सुविधा चालू की जा सकती है. आपको एक मान्य ActionCodeSettings ऑब्जेक्ट भी देना होगा. साथ ही, setHandleCodeInApp को सही पर सेट करना होगा.

    इसके अलावा, आपको setUrl को पास किए गए यूआरएल को अनुमति वाली सूची में शामिल करना होगा:

    1. Firebase console में, सुरक्षा > पुष्टि करें > सेटिंग टैब पर जाएं.

    2. अनुमति वाले डोमेन सेक्शन में जाकर, डोमेन जोड़ें पर क्लिक करें. इसके बाद, अपना डोमेन जोड़ें.

    Kotlin

    val actionCodeSettings = ActionCodeSettings.newBuilder()
        .setAndroidPackageName( // yourPackageName=
            "...", // installIfNotAvailable=
            true, // minimumVersion=
            null,
        )
        .setHandleCodeInApp(true) // This must be set to true
        .setUrl("https://google.com") // This URL needs to be whitelisted
        .build()
    
    val providers = listOf(
        EmailBuilder()
            .enableEmailLinkSignIn()
            .setActionCodeSettings(actionCodeSettings)
            .build(),
    )
    val signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .build()
    signInLauncher.launch(signInIntent)

    Java

    ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
            .setAndroidPackageName(
                    /* yourPackageName= */ "...",
                    /* installIfNotAvailable= */ true,
                    /* minimumVersion= */ null)
            .setHandleCodeInApp(true) // This must be set to true
            .setUrl("https://google.com") // This URL needs to be whitelisted
            .build();
    
    List<AuthUI.IdpConfig> providers = Arrays.asList(
            new AuthUI.IdpConfig.EmailBuilder()
                    .enableEmailLinkSignIn()
                    .setActionCodeSettings(actionCodeSettings)
                    .build()
    );
    Intent signInIntent = AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(providers)
            .build();
    signInLauncher.launch(signInIntent);
  6. अगर आपको किसी गतिविधि में लिंक ढूंढना है, तो कृपया यहां दिया गया तरीका अपनाएं. इसके अलावा, लिंक को लॉन्चर गतिविधि पर रीडायरेक्ट कर दिया जाएगा.

  7. डीप लिंक मिलने के बाद, आपको पुष्टि करनी होगी कि हम आपके लिए इसे मैनेज कर सकते हैं. अगर हम ऐसा कर सकते हैं, तो आपको इसे setEmailLink के ज़रिए हमें भेजना होगा.

    Kotlin

    if (AuthUI.canHandleIntent(intent)) {
        val extras = intent.extras ?: return
        val link = extras.getString("email_link_sign_in")
        if (link != null) {
            val signInIntent = AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setEmailLink(link)
                .setAvailableProviders(providers)
                .build()
            signInLauncher.launch(signInIntent)
        }
    }

    Java

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
            return;
        }
        String link = getIntent().getExtras().getString("email_link_sign_in");
        if (link != null) {
            Intent signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build();
            signInLauncher.launch(signInIntent);
        }
    }
  8. ज़रूरी नहीं ईमेल से भेजे गए लिंक का इस्तेमाल करके, अलग-अलग डिवाइसों पर साइन इन करने की सुविधा उपलब्ध है. इसका मतलब है कि आपके Android ऐप्लिकेशन से भेजे गए लिंक का इस्तेमाल, वेब या Apple के ऐप्लिकेशन पर लॉग इन करने के लिए किया जा सकता है. डिफ़ॉल्ट रूप से, क्रॉस डिवाइस की सुविधा चालू होती है. EmailBuilder इंस्टेंस पर setForceSameDevice को कॉल करके, इसे बंद किया जा सकता है.

    ज़्यादा जानकारी के लिए, FirebaseUI-Web और FirebaseUI-iOS देखें.

साइन आउट करें

FirebaseUI, Firebase Authentication के साथ-साथ सभी सोशल आइडेंटिटी प्रोवाइडर से साइन आउट करने के लिए, सुविधाजनक तरीके उपलब्ध कराता है:

Kotlin

AuthUI.getInstance()
    .signOut(this)
    .addOnCompleteListener {
        // ...
    }

Java

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

आपके पास उपयोगकर्ता के खाते को पूरी तरह से मिटाने का विकल्प भी है:

Kotlin

AuthUI.getInstance()
    .delete(this)
    .addOnCompleteListener {
        // ...
    }

Java

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

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

डिफ़ॉल्ट रूप से, FirebaseUI थीम के लिए AppCompat का इस्तेमाल करता है. इसका मतलब है कि यह आपके ऐप्लिकेशन की कलर स्कीम को अपने-आप अपना लेगा. अगर आपको और बदलाव करने हैं, तो साइन-इन Intent बिल्डर को थीम और लोगो पास करें:

Kotlin

val signInIntent = AuthUI.getInstance()
    .createSignInIntentBuilder()
    .setAvailableProviders(providers)
    .setLogo(R.drawable.my_great_logo) // Set logo drawable
    .setTheme(R.style.MySuperAppTheme) // Set theme
    .build()
signInLauncher.launch(signInIntent)

Java

Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setLogo(R.drawable.my_great_logo)      // Set logo drawable
        .setTheme(R.style.MySuperAppTheme)      // Set theme
        .build();
signInLauncher.launch(signInIntent);

आपके पास निजता नीति और सेवा की शर्तों को पसंद के मुताबिक सेट करने का विकल्प भी है:

Kotlin

val signInIntent = AuthUI.getInstance()
    .createSignInIntentBuilder()
    .setAvailableProviders(providers)
    .setTosAndPrivacyPolicyUrls(
        "https://example.com/terms.html",
        "https://example.com/privacy.html",
    )
    .build()
signInLauncher.launch(signInIntent)

Java

Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .build();
signInLauncher.launch(signInIntent);

अगले चरण

  • FirebaseUI को इस्तेमाल करने और उसे पसंद के मुताबिक बनाने के बारे में ज़्यादा जानने के लिए, GitHub पर README फ़ाइल देखें.
  • अगर आपको FirebaseUI में कोई समस्या मिलती है और आपको इसकी शिकायत करनी है, तो GitHub issue tracker का इस्तेमाल करें.