Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

FirebaseUI के साथ अपने Android ऐप में आसानी से साइन-इन जोड़ें

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

FirebaseUI , Firebase प्रमाणीकरण SDK के शीर्ष पर निर्मित एक लाइब्रेरी है जो आपके ऐप में उपयोग के लिए ड्रॉप-इन UI प्रवाह प्रदान करती है। FirebaseUI निम्नलिखित लाभ प्रदान करता है:

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

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

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

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

    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 Auth SDK की Firebase SDK और Google Play सेवाओं SDK पर ट्रांजिटिव निर्भरताएं हैं।

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

  4. अगर आप Google साइन-इन का समर्थन करते हैं और अभी तक अपने ऐप का SHA-1 फ़िंगरप्रिंट निर्दिष्ट नहीं किया है, तो ऐसा Firebase कंसोल के सेटिंग पृष्ठ से करें। अपने ऐप का SHA-1 फ़िंगरप्रिंट कैसे प्राप्त करें, इसके विवरण के लिए अपने क्लाइंट को प्रमाणित करना देखें।

  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 गतिविधि परिणाम अनुबंध के लिए कॉलबैक पंजीकृत करता है:

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);
            }
        }
);

Kotlin+KTX

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

FirebaseUI साइन इन फ़्लो शुरू करने के लिए, अपनी पसंदीदा साइन-इन विधियों के साथ एक साइन इन इंटेंट बनाएं:

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);

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)

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

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.
        // ...
    }
}

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.
        // ...
    }
}

साइन-इन विधियाँ सेट करें

  1. फायरबेस कंसोल में, प्रमाणीकरण अनुभाग खोलें। साइन इन विधि टैब पर, ईमेल/पासवर्ड प्रदाता को सक्षम करें। ध्यान दें कि ईमेल लिंक साइन-इन का उपयोग करने के लिए ईमेल/पासवर्ड साइन-इन सक्षम होना चाहिए।

  2. उसी अनुभाग में, ईमेल लिंक (पासवर्ड रहित साइन-इन) साइन-इन विधि सक्षम करें और सहेजें पर क्लिक करें।

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

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

    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);

    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)
  5. यदि आप किसी विशिष्ट गतिविधि में लिंक को पकड़ना चाहते हैं, तो कृपया यहां बताए गए चरणों का पालन करें । अन्यथा, लिंक आपकी लॉन्चर गतिविधि पर रीडायरेक्ट कर देगा।

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

    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);
        }
    }

    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)
        }
    }
  7. वैकल्पिक क्रॉस डिवाइस ईमेल लिंक साइन इन समर्थित है, जिसका अर्थ है कि आपके एंड्रॉइड ऐप के माध्यम से भेजे गए लिंक का उपयोग आपके वेब या ऐप्पल ऐप पर लॉग इन करने के लिए किया जा सकता है। डिफ़ॉल्ट रूप से, क्रॉस डिवाइस समर्थन सक्षम है। आप EmailBuilder इंस्टेंस पर setForceSameDevice को कॉल करके इसे अक्षम कर सकते हैं।

    अधिक जानकारी के लिए फायरबेसयूआई-वेब और फायरबेसयूआई-आईओएस देखें।

साइन आउट

FirebaseUI, Firebase प्रमाणीकरण के साथ-साथ सभी सामाजिक पहचान प्रदाताओं से साइन आउट करने के लिए सुविधाजनक तरीके प्रदान करता है:

Java

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

Kotlin+KTX

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

आप उपयोगकर्ता के खाते को पूरी तरह से हटा भी सकते हैं:

Java

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

Kotlin+KTX

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

अनुकूलन

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

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)
        .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)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .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)

अगले कदम

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