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

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

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

শুরু করার আগে

  1. যদি আপনি ইতিমধ্যেই না করে থাকেন, তাহলে আপনার অ্যান্ড্রয়েড প্রজেক্টে Firebase যোগ করুন
  2. আপনার মডিউল (অ্যাপ-লেভেল) গ্র্যাডেল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts অথবা <project>/<app-module>/build.gradle ), Android এর জন্য Firebase Authentication লাইব্রেরির জন্য নির্ভরতা যোগ করুন। লাইব্রেরি সংস্করণ নিয়ন্ত্রণ করতে আমরা Firebase Android BoM ব্যবহার করার পরামর্শ দিই।
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.9.0"))
    
        // 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 লাইব্রেরি সংস্করণ তার নির্ভরতা লাইনে নির্দিষ্ট করতে হবে।

    মনে রাখবেন যে আপনি যদি আপনার অ্যাপে একাধিক 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:24.0.1")
    }
  3. যদি আপনি এখনও আপনার অ্যাপটি আপনার Firebase প্রকল্পের সাথে সংযুক্ত না করে থাকেন, তাহলে Firebase কনসোল থেকে তা করুন।
  4. যদি আপনি ইতিমধ্যেই Firebase কনসোলে আপনার অ্যাপের SHA-1 হ্যাশ সেট না করে থাকেন, তাহলে তা করুন। আপনার অ্যাপের SHA-1 হ্যাশ খুঁজে পাওয়ার বিষয়ে তথ্যের জন্য "আপনার ক্লায়েন্টকে প্রমাণীকরণ করা" দেখুন।

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

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

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

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

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

  1. Firebase কনসোলে , প্রমাণীকরণ বিভাগটি খুলুন।
  2. সাইন-ইন পদ্ধতি পৃষ্ঠায়, ফোন নম্বর সাইন-ইন পদ্ধতি সক্ষম করুন।
  3. ঐচ্ছিক : সেটিংস পৃষ্ঠায়, আপনি যে অঞ্চলে SMS বার্তা প্রেরণের অনুমতি দিতে বা অস্বীকার করতে চান তার জন্য একটি নীতি সেট করুন। একটি SMS অঞ্চল নীতি সেট করা আপনার অ্যাপগুলিকে SMS অপব্যবহার থেকে রক্ষা করতে সাহায্য করতে পারে।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Kotlin

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 পদ্ধতিটি reentrant: যদি আপনি এটিকে একাধিকবার কল করেন, যেমন কোনও কার্যকলাপের onStart পদ্ধতিতে, তাহলে verifyPhoneNumber পদ্ধতিটি দ্বিতীয় SMS পাঠাবে না যদি না মূল অনুরোধের সময়সীমা শেষ হয়ে যায়।

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

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

Firebase দ্বারা প্রেরিত SMS বার্তাটি আপনার Auth ইনস্ট্যান্সে setLanguageCode পদ্ধতির মাধ্যমে auth ভাষা নির্দিষ্ট করে স্থানীয়করণ করা যেতে পারে।

Kotlin

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

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 ও বাস্তবায়ন করতে পারেন।

যাচাইকরণ সম্পন্ন (ফোনঅথেন্টিকেশনাল)

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

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

যাচাইকরণ ব্যর্থ (ফায়ারবেস ব্যতিক্রম)

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

onCodeSent(স্ট্রিং যাচাইকরণ আইডি, ফোনঅথপ্রোভাইডার.ফোর্সরিসেন্ডিংটোকেন)

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

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

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

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

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

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

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

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

Kotlin

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

Java

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

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

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

Kotlin

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 বার্তা না পাঠিয়ে ফোন নম্বর প্রমাণীকরণ পরীক্ষা করুন।
  • একই ফোন নম্বর দিয়ে পরপর পরীক্ষা চালান, কোনও বাধা ছাড়াই। অ্যাপ স্টোর পর্যালোচনা প্রক্রিয়ার সময় যদি পর্যালোচক একই ফোন নম্বর ব্যবহার করে পরীক্ষার জন্য আবেদন করেন, তাহলে এটি প্রত্যাখ্যানের ঝুঁকি কমিয়ে দেয়।
  • কোনও অতিরিক্ত প্রচেষ্টা ছাড়াই ডেভেলপমেন্ট পরিবেশে সহজেই পরীক্ষা করুন, যেমন গুগল প্লে পরিষেবা ছাড়াই iOS সিমুলেটর বা অ্যান্ড্রয়েড এমুলেটরে ডেভেলপ করার ক্ষমতা।
  • উৎপাদন পরিবেশে প্রকৃত ফোন নম্বরগুলিতে সাধারণত প্রয়োগ করা নিরাপত্তা চেক দ্বারা ব্লক না হয়ে ইন্টিগ্রেশন পরীক্ষা লিখুন।

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

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

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

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

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

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

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

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

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

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

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

ইন্টিগ্রেশন পরীক্ষা

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

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

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

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

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

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 এ কল করে কাল্পনিক নম্বর এবং এর সাথে সম্পর্কিত যাচাইকরণ কোডটি স্বয়ংক্রিয়-পুনরুদ্ধারের জন্য সেট করে অ্যান্ড্রয়েডে স্বয়ংক্রিয়-পুনরুদ্ধার প্রবাহ পরীক্ষা করতে পারেন।

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

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

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

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

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

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

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

  • আপনার Firebase Realtime Database এবং Cloud Storage সিকিউরিটি রুলস -এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে পারেন এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবেন তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

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

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

Kotlin

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();