FirebaseUI की मदद से, अपने Android ऐप्लिकेशन में आसानी से साइन इन करें

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

  • एक से ज़्यादा कंपनियां - ईमेल/पासवर्ड, ईमेल लिंक, फ़ोन की पुष्टि करने, Google साइन-इन, Facebook लॉगिन, Twitter लॉगिन, और GitHub लॉगिन के लिए साइन-इन फ़्लो.
  • खाता मैनेजमेंट - इसका इस्तेमाल, खाता बनाने और पासवर्ड रीसेट करने जैसे कामों के लिए किया जाता है.
  • खाता लिंक करना - इसकी मदद से, पहचान देने वाली सभी सेवाओं के साथ उपयोगकर्ता खातों को सुरक्षित तरीके से लिंक किया जा सकता है.
  • उपयोगकर्ता की पहचान छिपाकर उसे अपग्रेड करना - इसमें, पहचान छिपाने वाले उपयोगकर्ताओं को सुरक्षित तरीके से अपग्रेड करने की सुविधा शामिल है.
  • कस्टम थीम - अपने ऐप्लिकेशन से मैच करने के लिए, FirebaseUI का लुक पसंद के मुताबिक बनाएं. साथ ही, FirebaseUI ओपन सोर्स है. इसलिए, प्रोजेक्ट को फ़ोर्क करके अपने हिसाब से उसमें बदलाव किया जा सकता है.
  • पासवर्ड के लिए Smart Lock - क्रॉस-डिवाइस में तेज़ी से साइन-इन करने के लिए, पासवर्ड के लिए Smart Lock के साथ अपने-आप इंटिग्रेशन की सुविधा.

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

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

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

    dependencies {
        // ...
    
        implementation 'com.firebaseui:firebase-ui-auth:7.2.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 के पुष्टि वाले SDK टूल को Firebase SDK टूल और Google Play services के SDK टूल पर निर्भर करता है.

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

  4. अगर आपने 'Google साइन इन' चालू किया है, तो:

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

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

    3. अगर आपने अब तक अपने ऐप्लिकेशन के SHA फ़िंगरप्रिंट की जानकारी नहीं दी है, तो'Firebase कंसोल' के सेटिंग पेज पर जाकर ऐसा करें. अपने ऐप्लिकेशन का SHA फ़िंगरप्रिंट पाने के तरीके के बारे में जानने के लिए, अपने क्लाइंट की पुष्टि करना लेख देखें.

  5. अगर 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 गतिविधि नतीजे के अनुबंध के लिए कॉलबैक रजिस्टर करता हो:

Kotlin+KTX

// 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+KTX

// 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+KTX

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 कंसोल में, पुष्टि करने की सुविधा सेक्शन खोलें. साइन इन करने का तरीका टैब में, ईमेल/पासवर्ड सेवा देने वाली कंपनी को चालू करें. ध्यान दें कि ईमेल लिंक से साइन-इन करने के लिए, ईमेल/पासवर्ड साइन इन सुविधा चालू होनी चाहिए.

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

  3. ईमेल-लिंक में साइन इन करने की सुविधा का इस्तेमाल करने के लिए, आपको Firebase डाइनैमिक लिंक को भी चालू करना होगा. Firebase कंसोल के नेविगेशन बार में मौजूद दिलचस्पी बढ़ाएं सेक्शन में जाकर, डाइनैमिक लिंक पर क्लिक करें. शुरू करें पर क्लिक करें और डोमेन जोड़ें. आप यहां जो डोमेन चुनेंगे वह आपके उपयोगकर्ताओं को भेजे गए ईमेल लिंक में दिखेगा.

  4. EmailBuilder इंस्टेंस पर enableEmailLinkSignIn को कॉल करके, ईमेल लिंक साइन इन FirebaseUI को चालू किया जा सकता है. आपको एक मान्य ActionCodeSettings ऑब्जेक्ट भी देना होगा, जिसमें setHandleCodeInApp को 'सही' पर सेट किया गया हो. इसके अलावा, आपको उस यूआरएल को व्हाइटलिस्ट में शामिल करना होगा जिसे setUrl को भेजा जाता है. ऐसा करने के लिए, Firebase कंसोल में 'पुष्टि करें' -> साइन इन करने के तरीके -> अनुमति वाले डोमेन पर जाएं.

    Kotlin+KTX

    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);
  5. अगर आपको किसी खास गतिविधि का लिंक चाहिए, तो कृपया यहां दिया गया तरीका अपनाएं. ऐसा न करने पर, वह लिंक आपकी लॉन्चर गतिविधि पर रीडायरेक्ट करेगा.

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

    Kotlin+KTX

    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);
        }
    }
  7. ज़रूरी नहीं क्रॉस-डिवाइस ईमेल लिंक साइन इन की सुविधा काम करती है. इसका मतलब है कि आपके Android ऐप्लिकेशन से भेजे गए लिंक का इस्तेमाल, आपके वेब या Apple ऐप्लिकेशन में लॉग इन करने के लिए किया जा सकता है. डिफ़ॉल्ट रूप से, क्रॉस-डिवाइस सपोर्ट चालू होता है. इसे बंद करने के लिए, EmailBuilder इंस्टेंस पर setForceSameDevice को कॉल करें.

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

साइन आउट करें

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

Kotlin+KTX

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

Java

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

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

Kotlin+KTX

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

Java

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

पसंद के मुताबिक बनाएं

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

Kotlin+KTX

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+KTX

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 समस्या को ट्रैक करने वाले टूल का इस्तेमाल करें.