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

फायरबेसयूआई फायरबेस ऑथेंटिकेशन एसडीके के शीर्ष पर बनी एक लाइब्रेरी है जो आपके ऐप में उपयोग के लिए ड्रॉप-इन यूआई प्रवाह प्रदान करती है। FirebaseUI निम्नलिखित लाभ प्रदान करता है:

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

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

  1. यदि आपने पहले से नहीं किया है, तो अपने एंड्रॉइड प्रोजेक्ट में फायरबेस जोड़ें

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

    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 सेवाओं SDK पर सकर्मक निर्भरता है।

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

  4. यदि आपने Google साइन-इन सक्षम किया है:

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

    2. इस अद्यतन कॉन्फ़िग फ़ाइल को अपने एंड्रॉइड स्टूडियो प्रोजेक्ट में ले जाएँ, अब पुरानी हो चुकी संबंधित कॉन्फ़िग फ़ाइल को प्रतिस्थापित करें । ( अपने एंड्रॉइड प्रोजेक्ट में फायरबेस जोड़ें देखें।)

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

  5. यदि आप फेसबुक या ट्विटर के साथ साइन-इन का समर्थन करते हैं, तो 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);
            }
        }
);

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

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

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

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

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

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

अगले कदम

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