একটি ফোন নম্বর ব্যবহার করে Android এ Firebase দিয়ে প্রমাণীকরণ করুন

আপনি ব্যবহারকারীর ফোনে একটি SMS বার্তা পাঠিয়ে ব্যবহারকারীকে সাইন ইন করতে Firebase প্রমাণীকরণ ব্যবহার করতে পারেন। ব্যবহারকারী এসএমএস বার্তায় থাকা একটি এককালীন কোড ব্যবহার করে সাইন ইন করে।

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

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

  1. যদি আপনি ইতিমধ্যেই না করে থাকেন তাহলে আপনার Android প্রকল্পে Firebase যোগ করুন
  2. আপনার মডিউলে (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts বা <project>/<app-module>/build.gradle ), Firebase প্রমাণীকরণের জন্য নির্ভরতা যোগ করুন অ্যান্ড্রয়েডের জন্য লাইব্রেরি। আমরা লাইব্রেরি সংস্করণ নিয়ন্ত্রণ করতে Firebase Android BoM ব্যবহার করার পরামর্শ দিই।
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.7.4"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth")
    }
    

    Firebase Android BoM ব্যবহার করে, আপনার অ্যাপ সবসময় Firebase Android লাইব্রেরির সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

    (বিকল্প) BoM ব্যবহার না করে Firebase লাইব্রেরি নির্ভরতা যোগ করুন

    আপনি যদি Firebase BoM ব্যবহার না করা বেছে নেন, তাহলে আপনাকে অবশ্যই প্রতিটি Firebase লাইব্রেরি সংস্করণ তার নির্ভরতা লাইনে উল্লেখ করতে হবে।

    মনে রাখবেন যে আপনি যদি আপনার অ্যাপে একাধিক ফায়ারবেস লাইব্রেরি ব্যবহার করেন, আমরা দৃঢ়ভাবে লাইব্রেরি সংস্করণগুলি পরিচালনা করতে BoM ব্যবহার করার পরামর্শ দিই, যা নিশ্চিত করে যে সমস্ত সংস্করণ সামঞ্জস্যপূর্ণ।

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth:22.3.1")
    }
    
    একটি কোটলিন-নির্দিষ্ট লাইব্রেরি মডিউল খুঁজছেন? অক্টোবর 2023 থেকে শুরু হচ্ছে (Firebase BoM 32.5.0) , Kotlin এবং Java ডেভেলপাররা প্রধান লাইব্রেরি মডিউলের উপর নির্ভর করতে পারে (বিস্তারিত জানতে, এই উদ্যোগ সম্পর্কে প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন)।
  3. আপনি যদি এখনও আপনার অ্যাপটিকে আপনার Firebase প্রকল্পের সাথে সংযুক্ত না করে থাকেন, তাহলে Firebase কনসোল থেকে তা করুন৷
  4. আপনি যদি ইতিমধ্যেই Firebase কনসোলে আপনার অ্যাপের SHA-1 হ্যাশ সেট না করে থাকেন তাহলে তা করুন৷ আপনার অ্যাপের SHA-1 হ্যাশ খোঁজার বিষয়ে তথ্যের জন্য আপনার ক্লায়েন্ট প্রমাণীকরণ দেখুন।

নিরাপত্তা উদ্বেগ

শুধুমাত্র একটি ফোন নম্বর ব্যবহার করে প্রমাণীকরণ, সুবিধাজনক হলেও, অন্যান্য উপলব্ধ পদ্ধতির তুলনায় কম নিরাপদ, কারণ একটি ফোন নম্বরের দখল ব্যবহারকারীদের মধ্যে সহজেই হস্তান্তর করা যেতে পারে। এছাড়াও, একাধিক ব্যবহারকারীর প্রোফাইল সহ ডিভাইসগুলিতে, যে কোনও ব্যবহারকারী যে এসএমএস বার্তাগুলি পেতে পারে সে ডিভাইসের ফোন নম্বর ব্যবহার করে একটি অ্যাকাউন্টে সাইন ইন করতে পারে৷

আপনি যদি আপনার অ্যাপে ফোন নম্বর ভিত্তিক সাইন-ইন ব্যবহার করেন, তাহলে আপনাকে আরও নিরাপদ সাইন-ইন পদ্ধতির পাশাপাশি এটি অফার করা উচিত এবং ব্যবহারকারীদের ফোন নম্বর সাইন-ইন ব্যবহার করার নিরাপত্তা ট্রেডঅফ সম্পর্কে অবহিত করা উচিত।

আপনার Firebase প্রকল্পের জন্য ফোন নম্বর সাইন-ইন সক্ষম করুন

SMS এর মাধ্যমে ব্যবহারকারীদের সাইন ইন করতে, আপনাকে প্রথমে আপনার Firebase প্রকল্পের জন্য ফোন নম্বর সাইন-ইন পদ্ধতি সক্রিয় করতে হবে:

  1. Firebase কনসোলে , প্রমাণীকরণ বিভাগটি খুলুন।
  2. সাইন-ইন পদ্ধতি পৃষ্ঠায়, ফোন নম্বর সাইন-ইন পদ্ধতি সক্ষম করুন।

Firebase-এর ফোন নম্বর সাইন-ইন অনুরোধের কোটা যথেষ্ট বেশি যে বেশিরভাগ অ্যাপ প্রভাবিত হবে না। যাইহোক, যদি আপনাকে ফোন প্রমাণীকরণের মাধ্যমে খুব বেশি পরিমাণ ব্যবহারকারীদের সাইন ইন করতে হয়, তাহলে আপনাকে আপনার মূল্য পরিকল্পনা আপগ্রেড করতে হতে পারে। মূল্য পৃষ্ঠা দেখুন.

অ্যাপ যাচাইকরণ সক্ষম করুন

ফোন নম্বর প্রমাণীকরণ ব্যবহার করতে, Firebase অবশ্যই আপনার অ্যাপ থেকে ফোন নম্বর সাইন-ইন অনুরোধ আসছে তা যাচাই করতে সক্ষম হবে। তিনটি উপায়ে ফায়ারবেস প্রমাণীকরণ এটি সম্পন্ন করে:

  • Play Integrity API : যদি একজন ব্যবহারকারীর Google Play পরিষেবা সহ একটি ডিভাইস ইনস্টল করা থাকে এবং Firebase প্রমাণীকরণ Play Integrity API এর মাধ্যমে ডিভাইসটিকে বৈধ হিসেবে যাচাই করতে পারে, তাহলে ফোন নম্বর সাইন-ইন এগিয়ে যেতে পারে। Play Integrity API আপনার প্রোজেক্টে নয়, Firebase প্রমাণীকরণের Google-মালিকানাধীন প্রোজেক্টে সক্ষম করা হয়েছে। এটি আপনার প্রোজেক্টের কোনো Play Integrity API কোটায় অবদান রাখে না। প্রমাণীকরণ SDK v21.2.0+ (Firebase BoM v31.4.0+) এর সাথে Play Integrity Support উপলব্ধ।

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

  • reCAPTCHA যাচাইকরণ : যদি Play Integrity ব্যবহার করা না যায়, যেমন Google Play পরিষেবা ইনস্টল না করে কোনো ব্যবহারকারীর ডিভাইস থাকলে, Firebase প্রমাণীকরণ ফোন সাইন-ইন ফ্লো সম্পূর্ণ করতে একটি reCAPTCHA যাচাইকরণ ব্যবহার করে। reCAPTCHA চ্যালেঞ্জ প্রায়শই ব্যবহারকারীকে কিছু সমাধান না করেই সম্পন্ন করা যেতে পারে। মনে রাখবেন যে এই প্রবাহের জন্য আপনার অ্যাপ্লিকেশনের সাথে একটি SHA-1 যুক্ত থাকা প্রয়োজন৷ এই প্রবাহের জন্য আপনার API কীকে PROJECT_ID .firebaseapp.com এর জন্য সীমাবদ্ধ বা অনুমোদিত তালিকাভুক্ত হতে হবে।

    কিছু পরিস্থিতিতে যেখানে reCAPTCHA ট্রিগার করা হয়েছে:

    • যদি শেষ ব্যবহারকারীর ডিভাইসে Google Play পরিষেবা ইনস্টল না থাকে।
    • যদি অ্যাপটি Google Play স্টোরের মাধ্যমে বিতরণ না করা হয় ( অথেন্টিকেশন SDK v21.2.0+ এ)।
    • প্রাপ্ত SafetyNet টোকেন বৈধ না হলে (প্রমাণিকরণ SDK সংস্করণ < v21.2.0)।

    অ্যাপ যাচাইকরণের জন্য যখন SafetyNet বা Play Integrity ব্যবহার করা হয়, তখন SMS টেমপ্লেটের %APP_NAME% ফিল্ডটি Google Play স্টোর থেকে নির্ধারিত অ্যাপের নাম দিয়ে তৈরি হয়। যে পরিস্থিতিতে reCAPTCHA ট্রিগার করা হয়েছে, সেখানে %APP_NAME% PROJECT_ID .firebaseapp.com হিসাবে পপুলেট করা হয়েছে।

আপনি forceRecaptchaFlowForTesting এর মাধ্যমে reCAPTCHA যাচাইকরণ প্রবাহকে জোর করতে পারেন আপনি setAppVerificationDisabledForTesting ব্যবহার করে অ্যাপ যাচাইকরণ (কাল্পনিক ফোন নম্বর ব্যবহার করার সময়) অক্ষম করতে পারেন।

সমস্যা সমাধান

  • অ্যাপ যাচাইয়ের জন্য reCAPTCHA ব্যবহার করার সময় "প্রাথমিক অবস্থা অনুপস্থিত" ত্রুটি৷

    এটি ঘটতে পারে যখন reCAPTCHA ফ্লো সফলভাবে সম্পূর্ণ হয় কিন্তু ব্যবহারকারীকে নেটিভ অ্যাপ্লিকেশনে পুনঃনির্দেশিত করে না। যদি এটি ঘটে, ব্যবহারকারীকে ফলব্যাক URL PROJECT_ID .firebaseapp.com/__/auth/handler এ পুনঃনির্দেশিত করা হয়। ফায়ারফক্স ব্রাউজারে, নেটিভ অ্যাপ লিঙ্ক খোলা ডিফল্টরূপে অক্ষম করা হয়। আপনি যদি ফায়ারফক্সে উপরের ত্রুটিটি দেখতে পান, তাহলে অ্যাপ লিঙ্কগুলি খোলার সক্ষম করতে নেটিভ অ্যাপে লিঙ্কগুলি খুলতে Android এর জন্য Firefox সেট করুন- এর ধাপগুলি অনুসরণ করুন৷

ব্যবহারকারীর ফোনে একটি যাচাইকরণ কোড পাঠান

ফোন নম্বর সাইন-ইন শুরু করতে, ব্যবহারকারীকে একটি ইন্টারফেস উপস্থাপন করুন যা তাদের ফোন নম্বর টাইপ করতে অনুরোধ করে। আইনি প্রয়োজনীয়তা পরিবর্তিত হয়, কিন্তু একটি সর্বোত্তম অনুশীলন হিসাবে এবং আপনার ব্যবহারকারীদের জন্য প্রত্যাশা সেট করার জন্য, আপনাকে তাদের জানানো উচিত যে যদি তারা ফোন সাইন-ইন ব্যবহার করে, তারা যাচাইকরণের জন্য একটি এসএমএস বার্তা পেতে পারে এবং মান হার প্রযোজ্য।

তারপর, Firebase ব্যবহারকারীর ফোন নম্বর যাচাই করার অনুরোধ করতে তাদের ফোন নম্বরটি PhoneAuthProvider.verifyPhoneNumber পদ্ধতিতে পাঠান। উদাহরণ স্বরূপ:

Kotlin+KTX

val options = PhoneAuthOptions.newBuilder(auth)
    .setPhoneNumber(phoneNumber) // Phone number to verify
    .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
    .setActivity(this) // Activity (for callback binding)
    .setCallbacks(callbacks) // OnVerificationStateChangedCallbacks
    .build()
PhoneAuthProvider.verifyPhoneNumber(options)

Java

PhoneAuthOptions options = 
  PhoneAuthOptions.newBuilder(mAuth) 
      .setPhoneNumber(phoneNumber)       // Phone number to verify
      .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
      .setActivity(this)                 // (optional) Activity for callback binding
      // If no activity is passed, reCAPTCHA verification can not be used.
      .setCallbacks(mCallbacks)          // OnVerificationStateChangedCallbacks
      .build();
  PhoneAuthProvider.verifyPhoneNumber(options);     

verifyPhoneNumber পদ্ধতিটি পুনঃপ্রবেশকারী: আপনি যদি এটিকে একাধিকবার কল করেন, যেমন একটি অ্যাক্টিভিটির onStart পদ্ধতিতে, আসল অনুরোধের সময় শেষ না হওয়া পর্যন্ত verifyPhoneNumber পদ্ধতিটি দ্বিতীয় এসএমএস পাঠাবে না।

যদি ব্যবহারকারী সাইন ইন করার আগে আপনার অ্যাপ বন্ধ হয়ে যায় (উদাহরণস্বরূপ, ব্যবহারকারী যখন তাদের এসএমএস অ্যাপ ব্যবহার করছেন তখন) আপনি ফোন নম্বর সাইন ইন প্রক্রিয়া পুনরায় শুরু করতে এই আচরণটি ব্যবহার করতে পারেন। আপনি verifyPhoneNumber এ কল করার পরে, একটি পতাকা সেট করুন যা নির্দেশ করে যে যাচাইকরণ চলছে। তারপর, আপনার কার্যকলাপের onSaveInstanceState পদ্ধতিতে পতাকাটি সংরক্ষণ করুন এবং onRestoreInstanceState এ পতাকাটি পুনরুদ্ধার করুন। অবশেষে, আপনার অ্যাক্টিভিটির onStart পদ্ধতিতে, যাচাইকরণ ইতিমধ্যেই চলছে কিনা তা পরীক্ষা করুন এবং যদি তাই হয়, আবার verifyPhoneNumber এ কল করুন। যাচাইকরণ সম্পূর্ণ বা ব্যর্থ হলে পতাকাটি সাফ করতে ভুলবেন না ( যাচাই কলব্যাক দেখুন)।

স্ক্রিন ঘূর্ণন এবং অ্যাক্টিভিটি রিস্টার্টের অন্যান্য দৃষ্টান্তগুলি সহজে পরিচালনা করতে, আপনার অ্যাক্টিভিটি verifyPhoneNumber পদ্ধতিতে পাস করুন। কার্যকলাপ বন্ধ হয়ে গেলে কলব্যাকগুলি স্বয়ংক্রিয়ভাবে বিচ্ছিন্ন হয়ে যাবে, যাতে আপনি কলব্যাক পদ্ধতিতে অবাধে UI ট্রানজিশন কোড লিখতে পারেন৷

Firebase দ্বারা প্রেরিত এসএমএস বার্তাটি আপনার প্রমাণের উদাহরণে setLanguageCode পদ্ধতির মাধ্যমে প্রমাণীকরণ ভাষা নির্দিষ্ট করে স্থানীয়করণ করা যেতে পারে।

Kotlin+KTX

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

Java

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

আপনি যখন PhoneAuthProvider.verifyPhoneNumber কল করেন, তখন আপনাকে অবশ্যই OnVerificationStateChangedCallbacks এর একটি উদাহরণ প্রদান করতে হবে, যাতে কলব্যাক ফাংশনগুলির বাস্তবায়ন রয়েছে যা অনুরোধের ফলাফলগুলি পরিচালনা করে৷ উদাহরণ স্বরূপ:

Kotlin+KTX

callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    override fun onVerificationCompleted(credential: PhoneAuthCredential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:$credential")
        signInWithPhoneAuthCredential(credential)
    }

    override fun onVerificationFailed(e: FirebaseException) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e)

        if (e is FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e is FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        } else if (e is FirebaseAuthMissingActivityForRecaptchaException) {
            // reCAPTCHA verification attempted with null Activity
        }

        // Show a message and update the UI
    }

    override fun onCodeSent(
        verificationId: String,
        token: PhoneAuthProvider.ForceResendingToken,
    ) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:$verificationId")

        // Save verification ID and resending token so we can use them later
        storedVerificationId = verificationId
        resendToken = token
    }
}

Java

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    @Override
    public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:" + credential);

        signInWithPhoneAuthCredential(credential);
    }

    @Override
    public void onVerificationFailed(@NonNull FirebaseException e) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e);

        if (e instanceof FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e instanceof FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        } else if (e instanceof FirebaseAuthMissingActivityForRecaptchaException) {
            // reCAPTCHA verification attempted with null Activity
        }

        // Show a message and update the UI
    }

    @Override
    public void onCodeSent(@NonNull String verificationId,
                           @NonNull PhoneAuthProvider.ForceResendingToken token) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:" + verificationId);

        // Save verification ID and resending token so we can use them later
        mVerificationId = verificationId;
        mResendToken = token;
    }
};

যাচাইকরণ কলব্যাক

বেশিরভাগ অ্যাপে, আপনি onVerificationCompleted , onVerificationFailed , এবং onCodeSent কলব্যাকগুলি প্রয়োগ করেন৷ আপনি আপনার অ্যাপের প্রয়োজনীয়তার উপর নির্ভর করে onCodeAutoRetrievalTimeOut প্রয়োগ করতে পারেন।

onVerification Completed(PhoneAuthCredential)

এই পদ্ধতি দুটি পরিস্থিতিতে বলা হয়:

  • তাত্ক্ষণিক যাচাইকরণ: কিছু ক্ষেত্রে ফোন নম্বরটি যাচাইকরণ কোড পাঠাতে বা প্রবেশ করার প্রয়োজন ছাড়াই তাৎক্ষণিকভাবে যাচাই করা যেতে পারে।
  • স্বতঃ-পুনরুদ্ধার: কিছু ডিভাইসে, Google Play পরিষেবাগুলি স্বয়ংক্রিয়ভাবে আগত যাচাইকরণ SMS সনাক্ত করতে পারে এবং ব্যবহারকারীর পদক্ষেপ ছাড়াই যাচাইকরণ সম্পাদন করতে পারে। (এই ক্ষমতা কিছু ক্যারিয়ারের সাথে অনুপলব্ধ হতে পারে।) এটি SMS Retriever API ব্যবহার করে, যার মধ্যে SMS বার্তার শেষে একটি 11 অক্ষরের হ্যাশ রয়েছে।
উভয় ক্ষেত্রেই, ব্যবহারকারীর ফোন নম্বর সফলভাবে যাচাই করা হয়েছে, এবং আপনি PhoneAuthCredential অবজেক্ট ব্যবহার করতে পারেন যা ব্যবহারকারীকে সাইন ইন করতে কলব্যাকে পাস করা হয়েছে।

onVerificationFailed(FirebaseException)

এই পদ্ধতিটি একটি অবৈধ যাচাইকরণের অনুরোধের প্রতিক্রিয়া হিসাবে বলা হয়, যেমন একটি অনুরোধ যা একটি অবৈধ ফোন নম্বর বা যাচাইকরণ কোড নির্দিষ্ট করে৷

onCodeSent(স্ট্রিং যাচাইকরণ আইডি, PhoneAuthProvider.ForceResendingToken)

ঐচ্ছিক। প্রদত্ত ফোন নম্বরে এসএমএস দ্বারা যাচাইকরণ কোড পাঠানোর পরে এই পদ্ধতিটি বলা হয়৷

যখন এই পদ্ধতিটি বলা হয়, বেশিরভাগ অ্যাপ একটি UI প্রদর্শন করে যা ব্যবহারকারীকে SMS বার্তা থেকে যাচাইকরণ কোড টাইপ করতে অনুরোধ করে। (একই সময়ে, স্বয়ংক্রিয় যাচাইকরণ পটভূমিতে চলতে পারে।) তারপর, ব্যবহারকারী যাচাইকরণ কোড টাইপ করার পরে, আপনি যাচাইকরণ কোড এবং যাচাইকরণ আইডি ব্যবহার করতে পারেন যা একটি PhoneAuthCredential অবজেক্ট তৈরি করতে পদ্ধতিতে পাস করা হয়েছিল, যা আপনি পালাক্রমে ব্যবহারকারী সাইন ইন করতে ব্যবহার করতে পারেন. যাইহোক, কিছু অ্যাপ যাচাইকরণ কোড UI প্রদর্শন করার আগে onCodeAutoRetrievalTimeOut কল না হওয়া পর্যন্ত অপেক্ষা করতে পারে (প্রস্তাবিত নয়)।

onCodeAutoRetrievalTimeOut(স্ট্রিং যাচাইকরণ আইডি)

ঐচ্ছিক। verifyPhoneNumber জন্য নির্দিষ্ট সময়সীমা শেষ হওয়ার পর এই পদ্ধতিটিকে ডাকা হয় প্রথমে onVerificationCompleted ট্রিগারিং ছাড়াই। SIM কার্ড ছাড়া ডিভাইসগুলিতে, এই পদ্ধতিটি অবিলম্বে বলা হয় কারণ SMS স্বয়ংক্রিয় পুনরুদ্ধার সম্ভব নয়৷

কিছু অ্যাপ্লিকেশান স্বয়ংক্রিয় যাচাইকরণের সময়সীমা শেষ না হওয়া পর্যন্ত ব্যবহারকারীর ইনপুটকে অবরুদ্ধ করে এবং শুধুমাত্র তখনই একটি UI প্রদর্শন করে যা ব্যবহারকারীকে SMS বার্তা থেকে যাচাইকরণ কোড টাইপ করতে অনুরোধ করে (প্রস্তাবিত নয়)।

একটি PhoneAuthCredential অবজেক্ট তৈরি করুন

ব্যবহারকারীর ফোনে Firebase যে যাচাইকরণ কোডটি পাঠিয়েছে সেটি ব্যবহারকারী প্রবেশ করার পরে, যাচাইকরণ কোড এবং onCodeSent বা onCodeAutoRetrievalTimeOut কলব্যাকে পাস করা যাচাইকরণ আইডি ব্যবহার করে একটি PhoneAuthCredential অবজেক্ট তৈরি করুন। (যখন onVerificationCompleted বলা হয়, আপনি সরাসরি একটি PhoneAuthCredential অবজেক্ট পাবেন, তাই আপনি এই ধাপটি এড়িয়ে যেতে পারেন।)

PhoneAuthCredential অবজেক্ট তৈরি করতে, PhoneAuthProvider.getCredential কল করুন:

Kotlin+KTX

val credential = PhoneAuthProvider.getCredential(verificationId!!, code)

Java

PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);

ব্যবহারকারী সাইন ইন করুন

আপনি একটি PhoneAuthCredential অবজেক্ট পাওয়ার পরে, তা onVerificationCompleted কলব্যাকে হোক বা PhoneAuthProvider.getCredential এ কল করে, PhoneAuthCredential অবজেক্টটিকে FirebaseAuth.signInWithCredential এ পাস করে সাইন-ইন ফ্লো সম্পূর্ণ করুন:

Kotlin+KTX

private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) {
    auth.signInWithCredential(credential)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Sign in success, update UI with the signed-in user's information
                Log.d(TAG, "signInWithCredential:success")

                val user = task.result?.user
            } else {
                // Sign in failed, display a message and update the UI
                Log.w(TAG, "signInWithCredential:failure", task.exception)
                if (task.exception is FirebaseAuthInvalidCredentialsException) {
                    // The verification code entered was invalid
                }
                // Update UI
            }
        }
}

Java

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");

                        FirebaseUser user = task.getResult().getUser();
                        // Update UI
                    } else {
                        // Sign in failed, display a message and update the UI
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            // The verification code entered was invalid
                        }
                    }
                }
            });
}

কাল্পনিক ফোন নম্বর দিয়ে পরীক্ষা করুন

আপনি Firebase কনসোলের মাধ্যমে ডেভেলপমেন্টের জন্য কাল্পনিক ফোন নম্বর সেট আপ করতে পারেন। কাল্পনিক ফোন নম্বর দিয়ে পরীক্ষা করা এই সুবিধাগুলি প্রদান করে:

  • আপনার ব্যবহারের কোটা ব্যবহার না করে ফোন নম্বর প্রমাণীকরণ পরীক্ষা করুন।
  • একটি প্রকৃত SMS বার্তা না পাঠিয়ে ফোন নম্বর প্রমাণীকরণ পরীক্ষা করুন।
  • থ্রোটল না হয়ে একই ফোন নম্বর দিয়ে একটানা পরীক্ষা চালান। এটি অ্যাপ স্টোর পর্যালোচনা প্রক্রিয়া চলাকালীন প্রত্যাখ্যানের ঝুঁকি কমিয়ে দেয় যদি পর্যালোচক পরীক্ষার জন্য একই ফোন নম্বর ব্যবহার করেন।
  • কোনও অতিরিক্ত প্রচেষ্টা ছাড়াই বিকাশের পরিবেশে সহজেই পরীক্ষা করুন, যেমন Google Play পরিষেবাগুলি ছাড়াই iOS সিমুলেটর বা Android এমুলেটরে বিকাশ করার ক্ষমতা।
  • প্রোডাকশন এনভায়রনমেন্টে প্রকৃত ফোন নম্বরে সাধারণত প্রয়োগ করা নিরাপত্তা চেক দ্বারা ব্লক না হয়ে ইন্টিগ্রেশন পরীক্ষা লিখুন।

কাল্পনিক ফোন নম্বরগুলি অবশ্যই এই প্রয়োজনীয়তাগুলি পূরণ করবে:

  1. নিশ্চিত করুন যে আপনি এমন ফোন নম্বর ব্যবহার করছেন যা আসলেই কাল্পনিক, এবং ইতিমধ্যেই বিদ্যমান নেই। ফায়ারবেস প্রমাণীকরণ আপনাকে আসল ব্যবহারকারীদের দ্বারা ব্যবহৃত বিদ্যমান ফোন নম্বরগুলিকে পরীক্ষার নম্বর হিসাবে সেট করার অনুমতি দেয় না। একটি বিকল্প হল ইউএস টেস্ট ফোন নম্বর হিসাবে 555 প্রিফিক্সড নম্বর ব্যবহার করা, উদাহরণস্বরূপ: +1 650-555-3434
  2. দৈর্ঘ্য এবং অন্যান্য সীমাবদ্ধতার জন্য ফোন নম্বর সঠিকভাবে ফরম্যাট করতে হবে। তারা এখনও প্রকৃত ব্যবহারকারীর ফোন নম্বরের মতো একই বৈধতার মধ্য দিয়ে যাবে।
  3. আপনি বিকাশের জন্য 10টি পর্যন্ত ফোন নম্বর যোগ করতে পারেন৷
  4. পরীক্ষামূলক ফোন নম্বর/কোডগুলি ব্যবহার করুন যা অনুমান করা কঠিন এবং ঘন ঘন পরিবর্তন করুন।

কাল্পনিক ফোন নম্বর এবং যাচাইকরণ কোড তৈরি করুন

  1. Firebase কনসোলে , প্রমাণীকরণ বিভাগটি খুলুন।
  2. সাইন ইন পদ্ধতি ট্যাবে, ফোন প্রদানকারী সক্ষম করুন যদি আপনি ইতিমধ্যে না করে থাকেন।
  3. অ্যাকর্ডিয়ন মেনু পরীক্ষার জন্য ফোন নম্বর খুলুন।
  4. আপনি যে ফোন নম্বরটি পরীক্ষা করতে চান তা প্রদান করুন, উদাহরণস্বরূপ: +1 650-555-3434
  5. সেই নির্দিষ্ট নম্বরের জন্য 6-সংখ্যার যাচাইকরণ কোড প্রদান করুন, উদাহরণস্বরূপ: 654321
  6. নম্বর যোগ করুন । যদি প্রয়োজন হয়, আপনি ফোন নম্বর এবং এর কোডটি মুছে ফেলতে পারেন সংশ্লিষ্ট সারির উপর হোভার করে এবং ট্র্যাশ আইকনে ক্লিক করে।

ম্যানুয়াল পরীক্ষা

আপনি সরাসরি আপনার অ্যাপ্লিকেশনে একটি কাল্পনিক ফোন নম্বর ব্যবহার শুরু করতে পারেন। এটি আপনাকে কোটা সংক্রান্ত সমস্যা বা থ্রটলিং ছাড়াই বিকাশের পর্যায়ে ম্যানুয়াল টেস্টিং করতে দেয়। আপনি Google Play পরিষেবা ইনস্টল না করে সরাসরি iOS সিমুলেটর বা Android এমুলেটর থেকে পরীক্ষা করতে পারেন।

আপনি যখন কাল্পনিক ফোন নম্বর প্রদান করেন এবং যাচাইকরণ কোড পাঠান, তখন কোনো প্রকৃত SMS পাঠানো হয় না। পরিবর্তে, সাইন ইন সম্পূর্ণ করতে আপনাকে পূর্বে কনফিগার করা যাচাইকরণ কোড প্রদান করতে হবে।

সাইন-ইন সম্পূর্ণ হলে, সেই ফোন নম্বর দিয়ে একজন Firebase ব্যবহারকারী তৈরি করা হয়। ব্যবহারকারীর আসল ফোন নম্বর ব্যবহারকারীর মতো একই আচরণ এবং বৈশিষ্ট্য রয়েছে এবং একইভাবে রিয়েলটাইম ডেটাবেস/ক্লাউড ফায়ারস্টোর এবং অন্যান্য পরিষেবাগুলি অ্যাক্সেস করতে পারে। এই প্রক্রিয়ার সময় যে আইডি টোকেনটি মিন্ট করা হয়েছে তাতে একজন প্রকৃত ফোন নম্বর ব্যবহারকারীর মতোই স্বাক্ষর রয়েছে।

আরেকটি বিকল্প হল এই ব্যবহারকারীদের উপর কাস্টম দাবির মাধ্যমে একটি পরীক্ষার ভূমিকা সেট করা যাতে আপনি তাদের অ্যাক্সেসকে আরও সীমিত করতে চান তাহলে তাদের জাল ব্যবহারকারী হিসাবে আলাদা করতে পারেন।

পরীক্ষার জন্য ম্যানুয়ালি reCAPTCHA ফ্লো ট্রিগার করতে, forceRecaptchaFlowForTesting() পদ্ধতি ব্যবহার করুন।

// Force reCAPTCHA flow
FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();

ইন্টিগ্রেশন টেস্টিং

ম্যানুয়াল টেস্টিং ছাড়াও, Firebase প্রমাণীকরণ ফোন প্রমাণীকরণ পরীক্ষার জন্য ইন্টিগ্রেশন পরীক্ষা লিখতে সহায়তা করার জন্য API প্রদান করে। এই APIগুলি ওয়েবে reCAPTCHA প্রয়োজনীয়তা এবং iOS-এ নীরব পুশ বিজ্ঞপ্তিগুলি অক্ষম করে অ্যাপ যাচাইকরণ অক্ষম করে৷ এটি এই প্রবাহে অটোমেশন পরীক্ষাকে সম্ভব করে তোলে এবং বাস্তবায়ন করা সহজ করে তোলে। উপরন্তু, তারা Android এ তাৎক্ষণিক যাচাইকরণ প্রবাহ পরীক্ষা করার ক্ষমতা প্রদান করতে সাহায্য করে।

Android এ, signInWithPhoneNumber কলের আগে setAppVerificationDisabledForTesting() এ কল করুন। এটি স্বয়ংক্রিয়ভাবে অ্যাপ যাচাইকরণ অক্ষম করে, আপনাকে ফোন নম্বরটি ম্যানুয়ালি সমাধান না করে পাস করার অনুমতি দেয়৷ যদিও Play Integrity এবং reCAPTCHA অক্ষম করা হয়েছে, তবুও একটি বাস্তব ফোন নম্বর ব্যবহার করে সাইন ইন সম্পূর্ণ করতে ব্যর্থ হবে৷ শুধুমাত্র কাল্পনিক ফোন নম্বরগুলি এই API এর সাথে ব্যবহার করা যেতে পারে৷

// Turn off phone auth app verification.
FirebaseAuth.getInstance().getFirebaseAuthSettings()
   .setAppVerificationDisabledForTesting();

একটি কাল্পনিক নম্বর দিয়ে verifyPhoneNumber কল করা onCodeSent কলব্যাককে ট্রিগার করে, যেখানে আপনাকে সংশ্লিষ্ট যাচাইকরণ কোড প্রদান করতে হবে। এটি Android এমুলেটরগুলিতে পরীক্ষার অনুমতি দেয়।

Java

String phoneNum = "+16505554567";
String testVerificationCode = "123456";

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
FirebaseAuth auth = FirebaseAuth.getInstance();
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth)
        .setPhoneNumber(phoneNum)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onCodeSent(@NonNull String verificationId,
                                   @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                // Save the verification id somewhere
                // ...

                // The corresponding whitelisted code above should be used to complete sign-in.
                MainActivity.this.enableUserManuallyInputCode();
            }

            @Override
            public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            @Override
            public void onVerificationFailed(@NonNull FirebaseException e) {
                // ...
            }
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Kotlin+KTX

val phoneNum = "+16505554567"
val testVerificationCode = "123456"

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
val options = PhoneAuthOptions.newBuilder(Firebase.auth)
    .setPhoneNumber(phoneNum)
    .setTimeout(30L, TimeUnit.SECONDS)
    .setActivity(this)
    .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

        override fun onCodeSent(
            verificationId: String,
            forceResendingToken: PhoneAuthProvider.ForceResendingToken,
        ) {
            // Save the verification id somewhere
            // ...

            // The corresponding whitelisted code above should be used to complete sign-in.
            this@MainActivity.enableUserManuallyInputCode()
        }

        override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) {
            // Sign in with the credential
            // ...
        }

        override fun onVerificationFailed(e: FirebaseException) {
            // ...
        }
    })
    .build()
PhoneAuthProvider.verifyPhoneNumber(options)

উপরন্তু, আপনি setAutoRetrievedSmsCodeForPhoneNumber এ কল করে স্বয়ংক্রিয় পুনরুদ্ধারের জন্য কাল্পনিক নম্বর এবং এর সংশ্লিষ্ট যাচাইকরণ কোড সেট করে Android-এ স্বতঃ-পুনরুদ্ধার প্রবাহ পরীক্ষা করতে পারেন।

যখন verifyPhoneNumber কল করা হয়, তখন এটি সরাসরি PhoneAuthCredential এর সাথে onVerificationCompleted চালু করে। এটি শুধুমাত্র কাল্পনিক ফোন নম্বরগুলির সাথে কাজ করে৷

Google Play স্টোরে আপনার অ্যাপ্লিকেশন প্রকাশ করার সময় এটি অক্ষম করা আছে এবং আপনার অ্যাপে কোনো কাল্পনিক ফোন নম্বর হার্ডকোড করা নেই তা নিশ্চিত করুন।

Java

// The test phone number and code should be whitelisted in the console.
String phoneNumber = "+16505554567";
String smsCode = "123456";

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
FirebaseAuthSettings firebaseAuthSettings = firebaseAuth.getFirebaseAuthSettings();

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode);

PhoneAuthOptions options = PhoneAuthOptions.newBuilder(firebaseAuth)
        .setPhoneNumber(phoneNumber)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Kotlin+KTX

// The test phone number and code should be whitelisted in the console.
val phoneNumber = "+16505554567"
val smsCode = "123456"

val firebaseAuth = Firebase.auth
val firebaseAuthSettings = firebaseAuth.firebaseAuthSettings

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode)

val options = PhoneAuthOptions.newBuilder(firebaseAuth)
    .setPhoneNumber(phoneNumber)
    .setTimeout(60L, TimeUnit.SECONDS)
    .setActivity(this)
    .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
        override fun onVerificationCompleted(credential: PhoneAuthCredential) {
            // Instant verification is applied and a credential is directly returned.
            // ...
        }

        // ...
    })
    .build()
PhoneAuthProvider.verifyPhoneNumber(options)

পরবর্তী পদক্ষেপ

একজন ব্যবহারকারী প্রথমবার সাইন ইন করার পরে, একটি নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করা হয় এবং শংসাপত্রগুলির সাথে লিঙ্ক করা হয়—অর্থাৎ, ব্যবহারকারীর নাম এবং পাসওয়ার্ড, ফোন নম্বর, বা প্রমাণ প্রদানকারীর তথ্য — ব্যবহারকারী সাইন ইন করেছেন। এই নতুন অ্যাকাউন্টটি আপনার ফায়ারবেস প্রকল্পের অংশ হিসাবে সংরক্ষণ করা হয়েছে এবং ব্যবহারকারী কীভাবে সাইন ইন করুন না কেন, আপনার প্রকল্পের প্রতিটি অ্যাপ জুড়ে একজন ব্যবহারকারীকে শনাক্ত করতে ব্যবহার করা যেতে পারে।

  • আপনার অ্যাপে, আপনি FirebaseUser অবজেক্ট থেকে ব্যবহারকারীর মৌলিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারীদের পরিচালনা দেখুন।

  • আপনার ফায়ারবেস রিয়েলটাইম ডেটাবেস এবং ক্লাউড স্টোরেজ সুরক্ষা নিয়মে , আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে পারেন এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারে তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

আপনি একটি বিদ্যমান ব্যবহারকারীর অ্যাকাউন্টে প্রমাণীকরণ প্রদানকারীর শংসাপত্র লিঙ্ক করে একাধিক প্রমাণীকরণ প্রদানকারী ব্যবহার করে ব্যবহারকারীদের আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন।

একজন ব্যবহারকারীকে সাইন আউট করতে, signOut কল করুন:

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();