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

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

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

তুমি শুরু করার আগে

  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 Auth SDK-এর Firebase SDK এবং Google Play পরিষেবা SDK-এর উপর ট্রানজিটিভ নির্ভরতা রয়েছে।

  3. Firebase কনসোলে , প্রমাণীকরণ বিভাগটি খুলুন এবং আপনি যে সাইন-ইন পদ্ধতিগুলি সমর্থন করতে চান তা সক্ষম করুন৷ কিছু সাইন-ইন পদ্ধতির জন্য অতিরিক্ত তথ্যের প্রয়োজন হয়, সাধারণত পরিষেবার বিকাশকারী কনসোলে পাওয়া যায়।

  4. আপনি যদি Google সাইন-ইন সক্ষম করেন:

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

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

    3. আপনি যদি এখনও আপনার অ্যাপের SHA ফিঙ্গারপ্রিন্ট নির্দিষ্ট না করে থাকেন, তাহলে Firebase কনসোলের সেটিংস পৃষ্ঠা থেকে তা করুন৷ কীভাবে আপনার অ্যাপের SHA ফিঙ্গারপ্রিন্ট পেতে হয় তার বিশদ বিবরণের জন্য আপনার ক্লায়েন্টকে প্রমাণীকরণ দেখুন।

  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 কনসোলে , নেভিগেশন বারে Engage- এর অধীনে ডায়নামিক লিঙ্কগুলিতে ক্লিক করুন৷ Getting start এ ক্লিক করুন এবং একটি ডোমেন যোগ করুন। আপনি এখানে যে ডোমেনটি বেছে নেবেন তা আপনার ব্যবহারকারীদের পাঠানো ইমেল লিঙ্কগুলিতে প্রতিফলিত হবে।

  4. আপনি একটি EmailBuilder উদাহরণে enableEmailLinkSignIn কল করে FirebaseUI-তে ইমেল লিঙ্ক সাইন সক্ষম করতে পারেন৷ আপনাকে একটি বৈধ ActionCodeSettings অবজেক্ট সরবরাহ করতে হবে যাতে setHandleCodeInApp সত্য সেট করা হয়। উপরন্তু, আপনি setUrl এ পাস করা URLটিকে সাদা তালিকাভুক্ত করতে হবে, যা 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. ঐচ্ছিক ক্রস ডিভাইস ইমেল লিঙ্ক সাইন ইন সমর্থিত, যার মানে আপনার Android অ্যাপের মাধ্যমে পাঠানো লিঙ্কটি আপনার ওয়েব বা Apple অ্যাপে লগ ইন করতে ব্যবহার করা যেতে পারে। ডিফল্টরূপে, ক্রস ডিভাইস সমর্থন সক্রিয় করা হয়। আপনি 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 সমস্যা ট্র্যাকার ব্যবহার করুন।