FirebaseUI এর মাধ্যমে আপনার Android অ্যাপে সহজেই সাইন-ইন করুন

FirebaseUI Auth হলো Firebase Authentication SDK-এর উপর ভিত্তি করে নির্মিত একটি লাইব্রেরি, যা আপনার অ্যাপে ব্যবহারের জন্য ড্রপ-ইন UI ফ্লো প্রদান করে।

প্রস্তাবিত সাইন-ইন পদ্ধতিতে কম্পোজ স্ক্রিন ব্যবহার করা হয়। যেসব অ্যাপ এখনও অ্যাক্টিভিটি ব্যবহার করে, সেগুলোর জন্য ‘বিদ্যমান অ্যাক্টিভিটি-ভিত্তিক অ্যাপ’ বিভাগটি দেখুন।

FirebaseUI Auth নিম্নলিখিত সুবিধাগুলো প্রদান করে:

  • একাধিক প্রোভাইডার — ইমেল/পাসওয়ার্ড, ফোন, গুগল, ফেসবুক, অ্যাপল, গিটহাব, মাইক্রোসফট, ইয়াহু, টুইটার, অ্যানোনিমাস অথেন্টিকেশন এবং কাস্টম OAuth-এর জন্য সাইন-ইন ফ্লো।
  • অ্যাকাউন্ট ম্যানেজমেন্ট — অ্যাকাউন্ট তৈরি এবং পাসওয়ার্ড রিসেটের মতো অ্যাকাউন্ট পরিচালনার কাজগুলো সম্পাদনের কার্যপ্রণালী।
  • অ্যাকাউন্ট লিঙ্কিং — বিভিন্ন আইডেন্টিটি প্রোভাইডারের মধ্যে ব্যবহারকারীর অ্যাকাউন্টগুলোকে নিরাপদে লিঙ্ক করার প্রক্রিয়া।
  • বেনামী ব্যবহারকারীর আপগ্রেডিং — বেনামী ব্যবহারকারীদের নিরাপদে আপগ্রেড করার প্রক্রিয়া।
  • কাস্টম থিম — ম্যাটেরিয়াল ৩ ইউআই সাপোর্ট, যা আপনার অ্যাপের থিম গ্রহণ করতে পারে। এছাড়াও, ফায়ারবেসইউআই ওপেন সোর্স হওয়ায়, আপনি প্রজেক্টটি ফর্ক করে আপনার প্রয়োজন অনুযায়ী নিখুঁতভাবে কাস্টমাইজ করতে পারেন।
  • ক্রেডেনশিয়াল ম্যানেজার — দ্রুত বিভিন্ন ডিভাইসে সাইন-ইন করার জন্য ক্রেডেনশিয়াল ম্যানেজারের সাথে স্বয়ংক্রিয় ইন্টিগ্রেশন।
  • মাল্টি-ফ্যাক্টর অথেনটিকেশন — অতিরিক্ত নিরাপত্তার জন্য এসএমএস এবং টিওটিপি (TOTP) সাপোর্ট।

শুরু করার আগে

  1. যদি আগে থেকে না করে থাকেন, তাহলে আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যোগ করুন
  2. Firebase কনসোলে , আপনি যে সাইন-ইন পদ্ধতিগুলো সমর্থন করতে চান, সেগুলো সক্রিয় করুন।
  3. আপনার অ্যাপ মডিউলে FirebaseUI Auth যোগ করুন:
dependencies {
    // Check Maven Central for the latest version:
    // https://central.sonatype.com/artifact/com.firebaseui/firebase-ui-auth/versions
    implementation("com.firebaseui:firebase-ui-auth:10.0.0-beta02")

    // 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")
}

সাইন-ইন পদ্ধতি সেট আপ করুন

গুগল সাইন-ইন

google-services Gradle প্লাগইন দ্বারা Google Sign-In কনফিগারেশন স্বয়ংক্রিয়ভাবে প্রদান করা হয়। নিশ্চিত করুন যে আপনি Firebase Console- এ Google Sign-In সক্রিয় করেছেন।

ফেসবুক লগইন

ফেসবুক লগইন ব্যবহার করলে, আপনার ফেসবুক অ্যাপ আইডি strings.xml এ যোগ করুন:

<resources>
    <string name="facebook_application_id" translatable="false">YOUR_FACEBOOK_APP_ID</string>
    <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_FACEBOOK_APP_ID</string>
    <string name="facebook_client_token" translatable="false">CHANGE-ME</string>
</resources>

সেটআপ নির্দেশাবলীর জন্য Facebook for Developers ডকুমেন্টেশন দেখুন।

অন্যান্য সরবরাহকারী

Twitter, GitHub, Microsoft, Yahoo, এবং Apple প্রোভাইডারদের জন্য Firebase Console-এ কনফিগারেশন প্রয়োজন, কিন্তু Android-এর জন্য কোনো অতিরিক্ত সেটআপের প্রয়োজন নেই। প্রোভাইডার-নির্দিষ্ট নির্দেশাবলীর জন্য Firebase Auth ডকুমেন্টেশন দেখুন।

authUIConfiguration ভিতরে আপনার পছন্দের প্রোভাইডারগুলি বেছে নিন:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(
            AuthProvider.Phone(
                defaultCountryCode = "US",
            )
        )
        provider(
            AuthProvider.Google(
                scopes = listOf("email"),
                serverClientId = null,
            )
        )
        provider(AuthProvider.Facebook())
    }
}

ইমেল লিঙ্কের মাধ্যমে সাইন-ইন করার ব্যবস্থাটি ইমেল প্রদানকারীর কনফিগারেশনে থাকে:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(
            AuthProvider.Email(
                isEmailLinkSignInEnabled = true,
                emailLinkActionCodeSettings = actionCodeSettings {
                    url = "https://example.com/auth"
                    handleCodeInApp = true
                    setAndroidPackageName(
                        "com.example.app",
                        true,
                        null,
                    )
                },
            )
        )
    }
}

ডিপ-লিঙ্ক পরিচালনার সম্পূর্ণ কার্যপ্রণালীর জন্য, গিটহাবের README-এর ইমেল লিঙ্ক সাইন-ইন বিভাগটি দেখুন।

সাইন ইন করুন

একটি AuthUIConfiguration তৈরি করুন, তারপর FirebaseAuthScreen দেখান।

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val authUI = FirebaseAuthUI.getInstance()

        setContent {
            MyAppTheme {
                val configuration = authUIConfiguration {
                    context = applicationContext
                    theme = AuthUITheme.fromMaterialTheme()
                    providers {
                        provider(AuthProvider.Email())
                        provider(
                            AuthProvider.Google(
                                scopes = listOf("email"),
                                serverClientId = null,
                            )
                        )
                    }
                }

                if (authUI.isSignedIn()) {
                    HomeScreen()
                } else {
                    FirebaseAuthScreen(
                        configuration = configuration,
                        authUI = authUI,
                        onSignInSuccess = { result ->
                            // User signed in successfully
                        },
                        onSignInFailure = { exception ->
                            // Sign in failed
                        },
                        onSignInCancelled = {
                            finish()
                        },
                    )
                }
            }
        }
    }
}

এটি আপনাকে নিম্নলিখিত বিষয়গুলো সহ একটি সম্পূর্ণ প্রমাণীকরণ প্রবাহ প্রদান করে:

  • পাসওয়ার্ড দ্বারা প্রমাণীকরণ।
  • গুগল সাইন-ইন।
  • পাসওয়ার্ড রিসেট করা হয়েছে।
  • উপাদান ৩ স্টাইলিং।
  • ক্রেডেনশিয়াল ম্যানেজার সহায়তা।
  • সরাসরি কলব্যাকের মাধ্যমে ত্রুটি ব্যবস্থাপনা।

সাইন আউট

FirebaseUI Auth সাইন-আউট এবং অ্যাকাউন্ট মুছে ফেলার জন্য সুবিধাজনক পদ্ধতি প্রদান করে:

lifecycleScope.launch {
    FirebaseAuthUI.getInstance().signOut(applicationContext)
}
lifecycleScope.launch {
    FirebaseAuthUI.getInstance().delete(applicationContext)
}

কাস্টমাইজেশন

FirebaseUI Auth কাস্টমাইজ করা যায়, এবং এটি শুরু করার সবচেয়ে সহজ উপায় হলো সরাসরি authUIConfiguration এ একটি থিম সেট করা।

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(AuthProvider.Google(scopes = listOf("email"), serverClientId = null))
    }
    theme = AuthUITheme.Adaptive
}

আপনি আরও করতে পারেন:

  • AuthUITheme.Default , AuthUITheme.DefaultDark , অথবা AuthUITheme.Adaptive ব্যবহার করুন।
  • AuthUITheme.fromMaterialTheme() ব্যবহার করে আপনার অ্যাপ থিমটি ইনহেরিট করুন।
  • .copy() ব্যবহার করে ডিফল্ট থিমটি কাস্টমাইজ করুন।
  • একটি সম্পূর্ণ কাস্টম AuthUITheme তৈরি করুন।
  • authUIConfiguration এ একটি লোগো, পরিষেবার শর্তাবলীর URL এবং গোপনীয়তা নীতির URL সেট করুন।

থিমের অগ্রাধিকার, প্রোভাইডার বাটনের স্টাইলিং এবং কাস্টম থিম সহ থিমিং ও কাস্টমাইজেশনের সম্পূর্ণ বিবরণের জন্য, GitHub-এর readme ফাইলের থিমিং এবং কাস্টমাইজেশন বিভাগটি দেখুন।

বিদ্যমান কার্যকলাপ-ভিত্তিক অ্যাপ

আপনার অ্যাপে যদি এখনও অ্যাক্টিভিটি এবং অ্যাক্টিভিটি রেজাল্ট এপিআই ব্যবহৃত হয়, তাহলে আপনি AuthFlowController ব্যবহার করে অ্যাক্টিভিটি-ভিত্তিক লঞ্চ ফ্লো বজায় রাখতে পারেন।

private val authLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult(),
) { result ->
    if (result.resultCode == RESULT_OK) {
        val user = FirebaseAuth.getInstance().currentUser
        // ...
    } else {
        // User cancelled or sign-in failed
    }
}

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(
            AuthProvider.Google(
                scopes = listOf("email"),
                serverClientId = null,
            )
        )
    }
}

val controller = FirebaseAuthUI.getInstance().createAuthFlow(configuration)
authLauncher.launch(controller.createIntent(this))