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

FirebaseUI एक लाइब्रेरी है जो इस्तेमाल करने के लिए ड्रॉप-इन यूज़र इंटरफ़ेस (यूआई) फ़्लो उपलब्ध कराता है. आपके ऐप्लिकेशन में. 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 console में, पुष्टि करने की सुविधा सेक्शन खोलें और पर जाएं. साइन-इन करने के कुछ तरीकों की ज़रूरत है अतिरिक्त जानकारी, जो आम तौर पर सेवा के डेवलपर में उपलब्ध होती है कंसोल.

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

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

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

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

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

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

डिफ़ॉल्ट रूप से, FirebaseUI थीम के लिए 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);

अगले चरण