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

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

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

শুরু করার আগে

  1. যদি আগে থেকে না করে থাকেন, তাহলে আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যোগ করুন

  2. আপনার অ্যাপ-লেভেলের build.gradle(.kts) ফাইলে FirebaseUI-এর ডিপেন্ডেন্সিগুলো যোগ করুন। যদি আপনি Facebook বা Twitter দিয়ে সাইন-ইন সমর্থন করতে চান, তাহলে Facebook এবং Twitter SDK-গুলোও অন্তর্ভুক্ত করুন:

        dependencies {
            // ...
    
            implementation("com.firebaseui:firebase-ui-auth:9.0.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 services SDK-এর উপর পরোক্ষভাবে নির্ভরশীল।

  3. Firebase কনসোলে, Security > Authentication- এ যান।

  4. সাইন-ইন পদ্ধতি ট্যাবে, আপনি যে সাইন-ইন প্রোভাইডারগুলোকে সমর্থন করতে চান, সেগুলোকে সক্রিয় করুন। কিছু সাইন-ইন প্রোভাইডারের জন্য অতিরিক্ত তথ্যের প্রয়োজন হয়, যা সাধারণত পরিষেবাটির ডেভেলপার কনসোলে পাওয়া যায়।

  5. যদি আপনি গুগল সাইন-ইন চালু করে থাকেন:

    1. আপনার Firebase কনফিগারেশন ফাইলটি আপডেট করুন।

      1. Firebase কনসোলে অনুরোধ করা হলে, আপডেট করা Firebase কনফিগারেশন ফাইলটি ( google-services.json ) ডাউনলোড করুন, যেটিতে এখন Google সাইন-ইন করার জন্য প্রয়োজনীয় OAuth ক্লায়েন্টের তথ্য রয়েছে।

      2. এই আপডেট করা কনফিগারেশন ফাইলটি আপনার অ্যান্ড্রয়েড স্টুডিও প্রজেক্টে নিয়ে যান এবং বর্তমানে পুরোনো হয়ে যাওয়া সংশ্লিষ্ট কনফিগারেশন ফাইলটি প্রতিস্থাপন করুন । (দেখুন, আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যোগ করুন ।)

    2. আপনার অ্যাপের SHA-1 ফিঙ্গারপ্রিন্টটি আগে থেকে নির্দিষ্ট করা না থাকলে, তা করে নিন।

      1. Firebase কনসোলে, এখানে যান > সাধারণ ট্যাব

      2. নিচে স্ক্রল করে 'Your apps' কার্ডে যান, আপনার অ্যান্ড্রয়েড অ্যাপটি নির্বাচন করুন এবং 'SHA certificate fingerprints' ফিল্ডে আপনার SHA-1 ফিঙ্গারপ্রিন্ট যোগ করুন।

      আপনার অ্যাপের SHA ফিঙ্গারপ্রিন্ট কীভাবে পাবেন, সে সম্পর্কে বিস্তারিত জানতে ‘আপনার ক্লায়েন্ট প্রমাণীকরণ’ দেখুন।

  6. আপনি যদি ফেসবুক বা টুইটার দিয়ে সাইন-ইন সমর্থন করেন, তাহলে 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 Activity result contract-এর জন্য একটি কলব্যাক রেজিস্টার করে:

Kotlin

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

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

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 কনসোলে, Security > Authentication -এ যান।

  2. সাইন ইন পদ্ধতি ট্যাবে, ইমেল/পাসওয়ার্ড সাইন-ইন পদ্ধতিটি সক্রিয় করুন। মনে রাখবেন, ইমেল লিঙ্ক সাইন-ইন ব্যবহার করার জন্য ইমেল/পাসওয়ার্ড সাইন-ইন অবশ্যই সক্রিয় থাকতে হবে।

  3. একই বিভাগে, ইমেল লিঙ্ক (পাসওয়ার্ডবিহীন সাইন-ইন) পদ্ধতিটি সক্রিয় করুন এবং সেভ -এ ক্লিক করুন।

  4. ইমেল-লিঙ্ক সাইন ইন ব্যবহার করার জন্য আপনাকে Firebase Dynamic Links সক্রিয় করতে হবে:

    1. Firebase কনসোলে, DevOps & Engagement > Dynamic Links- এ যান।

    2. 'Get started'-এ ক্লিক করুন এবং তারপর একটি ডোমেইন যোগ করুন। আপনি এখানে যে ডোমেইনটি নির্বাচন করবেন, সেটি আপনার ব্যবহারকারীদের কাছে পাঠানো ইমেল লিঙ্কগুলিতে প্রতিফলিত হবে।

  5. একটি EmailBuilder ইনস্ট্যান্সে enableEmailLinkSignIn কল করে আপনি FirebaseUI-তে ইমেল লিঙ্ক সাইন ইন সক্রিয় করতে পারেন। এছাড়াও, আপনাকে একটি বৈধ ActionCodeSettings অবজেক্ট প্রদান করতে হবে, যেখানে setHandleCodeInApp true-তে সেট করা থাকবে।

    এছাড়াও, setUrl এ আপনি যে URL-টি পাস করবেন, সেটিকে হোয়াইটলিস্ট করতে হবে:

    1. Firebase কনসোলে, Security > Authentication > Settings ট্যাবে যান।

    2. অনুমোদিত ডোমেইন বিভাগে, 'ডোমেইন যোগ করুন'- এ ক্লিক করুন এবং আপনার ডোমেইনটি যোগ করুন।

    Kotlin

    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);
  6. আপনি যদি কোনো নির্দিষ্ট অ্যাক্টিভিটিতে লিঙ্কটি পেতে চান, তাহলে অনুগ্রহ করে এখানে বর্ণিত ধাপগুলো অনুসরণ করুন। অন্যথায়, লিঙ্কটি আপনার লঞ্চার অ্যাক্টিভিটিতে রিডাইরেক্ট হয়ে যাবে।

  7. আপনি ডিপ লিঙ্কটি পাওয়ার পর, আমরা আপনার জন্য এটি পরিচালনা করতে পারব কিনা তা আপনাকে যাচাই করতে হবে। যদি আমরা তা করতে পারি, তাহলে আপনাকে setEmailLink মাধ্যমে এটি আমাদের কাছে পাঠিয়ে দিতে হবে।

    Kotlin

    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);
        }
    }
  8. ঐচ্ছিক ক্রস-ডিভাইস ইমেল লিঙ্ক সাইন-ইন সমর্থিত, যার অর্থ হলো আপনার অ্যান্ড্রয়েড অ্যাপের মাধ্যমে পাঠানো লিঙ্কটি আপনার ওয়েব বা অ্যাপল অ্যাপে লগ ইন করার জন্য ব্যবহার করা যাবে। ডিফল্টরূপে, ক্রস-ডিভাইস সমর্থন সক্রিয় থাকে। EmailBuilder ইনস্ট্যান্সে setForceSameDevice কল করে আপনি এটি নিষ্ক্রিয় করতে পারেন।

    আরও তথ্যের জন্য FirebaseUI-Web এবং FirebaseUI-iOS দেখুন।

সাইন আউট

FirebaseUI, Firebase Authentication এবং সকল সোশ্যাল আইডেন্টিটি প্রোভাইডার থেকে সাইন আউট করার সুবিধাজনক পদ্ধতি প্রদান করে:

Kotlin

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

Java

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

আপনি ব্যবহারকারীর অ্যাকাউন্টটি সম্পূর্ণভাবে মুছেও ফেলতে পারেন:

Kotlin

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

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

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 ইস্যু ট্র্যাকার ব্যবহার করুন।