ফোন নম্বর ব্যবহার করে আইওএসে ফায়ারবেস দিয়ে প্রমাণীকরণ করুন

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

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

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

  1. আপনার iOS প্রকল্পে Firebase যোগ করুন
  2. আপনার নিম্নলিখিত pods অন্তর্ভুক্ত করুন Podfile :
    pod 'Firebase/Auth'
    
  3. আপনি এখনও আপনার Firebase প্রকল্পে আপনার অ্যাপ সংযুক্ত না করে থাকেন, থেকে তা করতে Firebase কনসোল

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

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

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

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

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

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

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

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

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

  • সাইলেন্ট APN গুলি বিজ্ঞপ্তিগুলি: যখন আপনি একটি ডিভাইসে প্রথমবারের তাদের ফোন নম্বর দিয়ে একটি ব্যবহারকারী সাইন ইন করেন, Firebase প্রমাণীকরণ একটি নীরব ধাক্কা বিজ্ঞপ্তি ব্যবহার করে ডিভাইসে একটি টোকেন পাঠায়। যদি আপনার অ্যাপ সফলভাবে Firebase থেকে বিজ্ঞপ্তি পায়, ফোন নম্বর সাইন-ইন এগিয়ে যেতে পারে।

    আইওএস .0.০ এবং নতুনের জন্য, নীরব বিজ্ঞপ্তিগুলির জন্য স্পষ্ট ব্যবহারকারীর সম্মতির প্রয়োজন হয় না এবং সেইজন্য অ্যাপটিতে APNs বিজ্ঞপ্তি গ্রহণ করতে অস্বীকারকারী ব্যবহারকারীর দ্বারা প্রভাবিত হয় না। সুতরাং, ফায়ারবেস ফোন নম্বর auth বাস্তবায়নের সময় পুশ বিজ্ঞপ্তি পেতে অ্যাপের ব্যবহারকারীর অনুমতি চাওয়ার প্রয়োজন নেই।

  • reCAPTCHA নির্ধারণ: ঘটনা যে পাঠানো বা একটি নীরব ধাক্কা বিজ্ঞপ্তিটি পাচ্ছেন যেমন যখন ব্যবহারকারীর আপনার অ্যাপ্লিকেশনে জন্য অক্ষম পটভূমি রিফ্রেশ হয়েছে যেমন সম্ভব নয়, ইন, অথবা যখন একটি iOS কাল্পনিক এ আপনার অ্যাপ পরীক্ষা Firebase প্রমাণীকরণ তথ্যের যাচাইকরণের ফোন সম্পন্ন করতে ব্যবহার সাইন-ইন প্রবাহ ReCAPTCHA চ্যালেঞ্জ প্রায়ই ব্যবহারকারীর কোন কিছু সমাধান না করেই সম্পন্ন করা যায়।

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

নীরব বিজ্ঞপ্তি পাওয়া শুরু করুন

ফায়ারবেস প্রমাণীকরণের সাথে ব্যবহারের জন্য APNs বিজ্ঞপ্তি সক্ষম করতে:

  1. Xcode সালে পুশ বিজ্ঞপ্তি সক্ষম আপনার প্রকল্পের জন্য।
  2. আপনার APNs প্রমাণীকরণ কী Firebase এ আপলোড করুন। আপনার কি ইতিমধ্যে একটি APN গুলি প্রমাণীকরণ কী না পারে, তবে একটি তৈরি করতে ভুলবেন না অ্যাপল ডেভেলপার সদস্য সেন্টার

    1. Firebase কনসোলে আপনার প্রকল্পের ভিতরে,, গিয়ার আইকন নির্বাচন প্রকল্প সেটিং নির্বাচন করুন, এবং তারপর ক্লাউড মেসেজিং ট্যাব নির্বাচন করুন।

    2. IOS অ্যাপ্লিকেশন কনফিগারেশন অধীনে APN গুলি প্রমাণীকরণ কী সালে আপলোড বাটন ক্লিক করুন।

    3. যেখানে আপনি আপনার কী সংরক্ষিত ব্রাউজ করুন, এটা নির্বাচন করুন, এবং ওপেন এ ক্লিক করুন। কী (উপলব্ধ জন্য কী আইডি যোগ করুন অ্যাপল ডেভেলপার সদস্য সেন্টার ) এবং আপলোড এ ক্লিক করুন।

    আপনার যদি ইতিমধ্যে একটি APNs সার্টিফিকেট থাকে, আপনি তার পরিবর্তে সার্টিফিকেট আপলোড করতে পারেন।

ReCAPTCHA যাচাইকরণ সেট আপ করুন

ফায়ারবেস এসডিকে পুনরায় ক্যাপচা যাচাইকরণ ব্যবহার করতে সক্ষম করতে:

  1. আপনার Xcode প্রকল্পে কাস্টম URL স্কিম যুক্ত করুন:
    1. আপনার প্রকল্প কনফিগারেশন খুলুন: বাম গাছের ভিউতে প্রকল্পের নামটিতে ডাবল ক্লিক করুন। ও লক্ষ্যমাত্রা অধ্যায় থেকে আপনার অ্যাপ্লিকেশন নির্বাচন করুন তারপর তথ্য ট্যাব বাছুন এবং URL প্রকারভেদ অধ্যায় প্রসারিত।
    2. + বোতামে ক্লিক করুন, এবং আপনার বিপরীত ক্লায়েন্ট ID জন্য একটি URL স্কিম যোগ করুন। এই মান খুঁজতে, খুলতে GoogleService-Info.plist কনফিগারেশন ফাইল, এবং বর্ণন REVERSED_CLIENT_ID কী। যে কী মান অনুলিপি করুন, এবং এটি URL টি প্রকল্প কনফিগারেশন পৃষ্ঠাতে বাক্সে আটকে দিন। অন্যান্য ক্ষেত্র খালি রাখুন।

      সম্পন্ন হলে, আপনার কনফিগারেশনটি নিম্নলিখিতগুলির মতো দেখতে হবে (তবে আপনার অ্যাপ্লিকেশন-নির্দিষ্ট মানগুলির সাথে):

  2. ঐচ্ছিক: যেভাবে আপনার অ্যাপ উপহার কাস্টমাইজ করতে চান SFSafariViewController বা UIWebView যখন ব্যবহারকারীকে তথ্যের প্রদর্শন করার একটি কাস্টম বর্গ যে কে কনর্ফাম করে তৈরি FIRAuthUIDelegate প্রোটোকল, এবং এটা পাস verifyPhoneNumber:UIDelegate:completion:

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

শুরু করতে ফোন নম্বর যে তাদের অনুরোধ জানানো তাদের ফোন নম্বর প্রদান সাইন-ইন, ব্যবহারকারী একটি ইন্টারফেস উপস্থিত, এবং তারপর কল verifyPhoneNumber:UIDelegate:completion: অনুরোধ যে Firebase SMS এর মাধ্যমে ব্যবহারকারীর ফোন থেকে একটি প্রমাণীকরণ কোড পাঠাতে:

  1. ব্যবহারকারীর ফোন নম্বর পান।

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

  2. ফোন করুন verifyPhoneNumber:UIDelegate:completion: , এটা ব্যবহারকারীর ফোন নম্বর ক্ষণস্থায়ী।

    সুইফট

    PhoneAuthProvider.provider()
      .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in
          if let error = error {
            self.showMessagePrompt(error.localizedDescription)
            return
          }
          // Sign in using the verificationID and the code sent to the user
          // ...
      }

    উদ্দেশ্য গ

    [[FIRPhoneAuthProvider provider] verifyPhoneNumber:userInput
                                            UIDelegate:nil
                                            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
      if (error) {
        [self showMessagePrompt:error.localizedDescription];
        return;
      }
      // Sign in using the verificationID and the code sent to the user
      // ...
    }];

    আপনি কল যখন verifyPhoneNumber:UIDelegate:completion: , Firebase একটি নীরব ধাক্কা বিজ্ঞপ্তি আপনার অ্যাপ্লিকেশানে পাঠায়, বা সমস্যা ব্যবহারকারীকে একটি reCAPTCHA চ্যালেঞ্জ। আপনার অ্যাপ নোটিফিকেশন পাওয়ার পর অথবা ব্যবহারকারী reCAPTCHA চ্যালেঞ্জ সম্পন্ন করলে, Firebase নির্দিষ্ট ফোন নম্বরে একটি প্রমাণীকরণ কোড সম্বলিত একটি এসএমএস বার্তা পাঠায় এবং আপনার সমাপ্তি ফাংশনে একটি যাচাইকরণ আইডি পাস করে। ব্যবহারকারীর সাইন ইন করার জন্য আপনার যাচাইকরণ কোড এবং যাচাইকরণ আইডি উভয়ই প্রয়োজন হবে।

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

    সুইফট

     // Change language code to french.
     Auth.auth().languageCode = "fr";
    

    উদ্দেশ্য গ

     // Change language code to french.
     [FIRAuth auth].languageCode = @"fr";
    
  3. যাচাইকরণ আইডি সংরক্ষণ করুন এবং আপনার অ্যাপ্লিকেশন লোড হলে এটি পুনরুদ্ধার করুন। এটি করে, আপনি নিশ্চিত করতে পারেন যে ব্যবহারকারীর সাইন-ইন প্রবাহ সম্পূর্ণ করার আগে আপনার অ্যাপটি বন্ধ হয়ে গেলে আপনার কাছে এখনও একটি বৈধ যাচাইকরণ আইডি আছে (উদাহরণস্বরূপ, এসএমএস অ্যাপে স্যুইচ করার সময়)।

    আপনি যেভাবেই চান ভেরিফিকেশন আইডি চালিয়ে যেতে পারেন। একটি সরল পথ সঙ্গে যাচাইকরণ আইডি রক্ষা করা NSUserDefaults বস্তু:

    সুইফট

    UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
    

    উদ্দেশ্য গ

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:verificationID forKey:@"authVerificationID"];
    

    তারপর, আপনি সংরক্ষিত মান পুনরুদ্ধার করতে পারেন:

    সুইফট

    let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
    

    উদ্দেশ্য গ

    NSString *verificationID = [defaults stringForKey:@"authVerificationID"];
    

থেকে কল তাহলে verifyPhoneNumber:UIDelegate:completion: সফল, আপনি যখন তারা এসএমএস বার্তায় তা গ্রহণ যাচাইকরণ কোড টাইপ করতে ব্যবহারকারী সূচিত করে।

ভেরিফিকেশন কোড দিয়ে ব্যবহারকারীর সাইন ইন করুন

ব্যবহারকারী SMS বার্তা থেকে যাচাইকরণ কোড সহ আপনার অ্যাপ্লিকেশন দ্বারা প্রদত্ত পর তৈরি করে ব্যবহারকারী সাইন ইন FIRPhoneAuthCredential যাচাইকরণ কোড এবং যাচাইকরণ আইডি থেকে বস্তু এবং যে বস্তুর ক্ষণস্থায়ী signInWithCredential:completion:

  1. ব্যবহারকারীর কাছ থেকে যাচাইকরণ কোড পান।
  2. একটি তৈরি করুন FIRPhoneAuthCredential যাচাইকরণ কোড এবং যাচাইকরণ আইডি থেকে অবজেক্ট।

    সুইফট

    let credential = PhoneAuthProvider.provider().credential(
      withVerificationID: verificationID,
      verificationCode: verificationCode
    )

    উদ্দেশ্য গ

    FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
        credentialWithVerificationID:verificationID
                    verificationCode:userInput];
  3. ব্যবহারকারীর সাইন ইন করুন FIRPhoneAuthCredential বস্তু:

    সুইফট

    Auth.auth().signIn(with: credential) { authResult, error in
        if let error = error {
          let authError = error as NSError
          if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue {
            // The user is a multi-factor user. Second factor challenge is required.
            let resolver = authError
              .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
            var displayNameString = ""
            for tmpFactorInfo in resolver.hints {
              displayNameString += tmpFactorInfo.displayName ?? ""
              displayNameString += " "
            }
            self.showTextInputPrompt(
              withMessage: "Select factor to sign in\n\(displayNameString)",
              completionBlock: { userPressedOK, displayName in
                var selectedHint: PhoneMultiFactorInfo?
                for tmpFactorInfo in resolver.hints {
                  if displayName == tmpFactorInfo.displayName {
                    selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
                  }
                }
                PhoneAuthProvider.provider()
                  .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil,
                                     multiFactorSession: resolver
                                       .session) { verificationID, error in
                    if error != nil {
                      print(
                        "Multi factor start sign in failed. Error: \(error.debugDescription)"
                      )
                    } else {
                      self.showTextInputPrompt(
                        withMessage: "Verification code for \(selectedHint?.displayName ?? "")",
                        completionBlock: { userPressedOK, verificationCode in
                          let credential: PhoneAuthCredential? = PhoneAuthProvider.provider()
                            .credential(withVerificationID: verificationID!,
                                        verificationCode: verificationCode!)
                          let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator
                            .assertion(with: credential!)
                          resolver.resolveSignIn(with: assertion!) { authResult, error in
                            if error != nil {
                              print(
                                "Multi factor finanlize sign in failed. Error: \(error.debugDescription)"
                              )
                            } else {
                              self.navigationController?.popViewController(animated: true)
                            }
                          }
                        }
                      )
                    }
                  }
              }
            )
          } else {
            self.showMessagePrompt(error.localizedDescription)
            return
          }
          // ...
          return
        }
        // User is signed in
        // ...
    }

    উদ্দেশ্য গ

    [[FIRAuth auth] signInWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult,
                                           NSError * _Nullable error) {
        if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
          FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
          NSMutableString *displayNameString = [NSMutableString string];
          for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
            [displayNameString appendString:tmpFactorInfo.displayName];
            [displayNameString appendString:@" "];
          }
          [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                               completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
           FIRPhoneMultiFactorInfo* selectedHint;
           for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
             if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
               selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
             }
           }
           [FIRPhoneAuthProvider.provider
            verifyPhoneNumberWithMultiFactorInfo:selectedHint
            UIDelegate:nil
            multiFactorSession:resolver.session
            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
              if (error) {
                [self showMessagePrompt:error.localizedDescription];
              } else {
                [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                     completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
                 FIRPhoneAuthCredential *credential =
                     [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                                  verificationCode:verificationCode];
                 FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
                 [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
                   if (error) {
                     [self showMessagePrompt:error.localizedDescription];
                   } else {
                     NSLog(@"Multi factor finanlize sign in succeeded.");
                   }
                 }];
               }];
              }
            }];
         }];
        }
      else if (error) {
        // ...
        return;
      }
      // User successfully signed in. Get user data from the FIRUser object
      if (authResult == nil) { return; }
      FIRUser *user = authResult.user;
      // ...
    }];

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

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

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

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

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

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

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

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

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

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

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

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

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

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

IOS এ, appVerificationDisabledForTesting সেটিং সেট করা হয়েছে TRUE কল করার আগে verifyPhoneNumber । এটি কোন APNs টোকেন বা ব্যাকগ্রাউন্ডে নীরব পুশ বিজ্ঞপ্তি প্রেরণ না করে প্রক্রিয়া করা হয়, যা সিমুলেটরে পরীক্ষা করা সহজ করে তোলে। এটি reCAPTCHA ফলব্যাক প্রবাহকেও অক্ষম করে।

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

সুইফট

let phoneNumber = "+16505554567"

// This test verification code is specified for the given test phone number in the developer console.
let testVerificationCode = "123456"

Auth.auth().settings.isAppVerificationDisabledForTesting = TRUE
PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate:nil) {
                                                            verificationID, error in
    if (error) {
      // Handles error
      self.handleError(error)
      return
    }
    let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID ?? "",
                                                               verificationCode: testVerificationCode)
    Auth.auth().signInAndRetrieveData(with: credential) { authData, error in
      if (error) {
        // Handles error
        self.handleError(error)
        return
      }
      _user = authData.user
    }];
}];

উদ্দেশ্য গ

NSString *phoneNumber = @"+16505554567";

// This test verification code is specified for the given test phone number in the developer console.
NSString *testVerificationCode = @"123456";

[FIRAuth auth].settings.appVerificationDisabledForTesting = YES;
[[FIRPhoneAuthProvider provider] verifyPhoneNumber:phoneNumber
                                        completion:^(NSString *_Nullable verificationID,
                                                     NSError *_Nullable error) {
    if (error) {
      // Handles error
      [self handleError:error];
      return;
    }
    FIRAuthCredential *credential =
        [FIRPhoneAuthProvider credentialWithVerificationID:verificationID
                                          verificationCode:testVerificationCode];
    [FIRAuth auth] signInWithAndRetrieveDataWithCredential:credential
                                                completion:^(FIRUser *_Nullable user,
                                                             NSError *_Nullable error) {
      if (error) {
        // Handles error
        [self handleError:error];
        return;
      }
      _user = user;
    }];
}];

পরিশিষ্ট: ঝাঁকুনি ছাড়াই ফোন সাইন-ইন ব্যবহার করা

ফায়ারবেস প্রমাণীকরণ আপনার অ্যাপের APNs টোকেন স্বয়ংক্রিয়ভাবে পেতে, ফায়ারবেস আপনার অ্যাপে পাঠানো নীরব পুশ বিজ্ঞপ্তিগুলি পরিচালনা করতে এবং যাচাইয়ের সময় reCAPTCHA যাচাইকরণ পৃষ্ঠা থেকে স্বয়ংক্রিয়ভাবে কাস্টম স্কিম রিডাইরেক্ট করার জন্য সুইজলিং পদ্ধতি ব্যবহার করে।

আপনি ব্যবহার swizzling পছন্দ না করেন, তাহলে আপনি সে পতাকা যোগ করে নিষ্ক্রিয় করতে পারেন FirebaseAppDelegateProxyEnabled আপনার অ্যাপ্লিকেশনের Info.plist ফাইলে এবং তা নির্ধারণের NO । টীকাগুলি এতে এই ফ্ল্যাগ সেট যে NO এছাড়াও Firebase ক্লাউড মেসেজিং সহ অন্যান্য Firebase পণ্য, জন্য swizzling অক্ষম করে।

আপনি যদি সুইজলিং অক্ষম করেন, তাহলে আপনাকে অবশ্যই স্পষ্টভাবে APNs ডিভাইসের টোকেন, পুশ বিজ্ঞপ্তি এবং কাস্টম স্কিম পুন URLনির্দেশিত URL ফায়ারবেস প্রমাণীকরণে পাস করতে হবে।

APN গুলি ডিভাইস টোকেন পাওয়ার জন্য বাস্তবায়ন application:didRegisterForRemoteNotificationsWithDeviceToken: পদ্ধতি, এবং এটি, ডিভাইসের টোকেন পাস FIRAuth এর setAPNSToken:type: পদ্ধতি।

সুইফট

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  // Pass device token to auth
  Auth.auth().setAPNSToken(deviceToken, type: .prod)

  // Further handling of the device token if needed by the app
  // ...
}

উদ্দেশ্য গ

- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  // Pass device token to auth.
  [[FIRAuth auth] setAPNSToken:deviceToken type:FIRAuthAPNSTokenTypeProd];
  // Further handling of the device token if needed by the app.
}

হাতল পুশ বিজ্ঞপ্তি, ইন করার application:didReceiveRemoteNotification:fetchCompletionHandler: পদ্ধতি, কল করে Firebase প্রমাণীকরণ সংশ্লিষ্ট বিজ্ঞপ্তির জন্য চেক FIRAuth এর canHandleNotification: পদ্ধতি।

সুইফট

func application(_ application: UIApplication,
    didReceiveRemoteNotification notification: [AnyHashable : Any],
    fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  if Auth.auth().canHandleNotification(notification) {
    completionHandler(.noData)
    return
  }
  // This notification is not auth related, developer should handle it.
}

উদ্দেশ্য গ

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)notification
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // Pass notification to auth and check if they can handle it.
  if ([[FIRAuth auth] canHandleNotification:notification]) {
    completionHandler(UIBackgroundFetchResultNoData);
    return;
  }
  // This notification is not auth related, developer should handle it.
}

কাস্টম প্রকল্প পুনঃনির্দেশ URL হ্যান্ডেল করতে, বাস্তবায়ন application:openURL:sourceApplication:annotation: পদ্ধতি iOS 8 এ এবং বয়স্ক, এবং চলমান ডিভাইসের জন্য application:openURL:options: iOS 9 এর এবং নতুন, এবং তাদের চলমান ডিভাইসের জন্য পদ্ধতি, পাস URL এ FIRAuth এর canHandleURL পদ্ধতি।

সুইফট

// For iOS 9+
func application(_ application: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  if Auth.auth().canHandle(url) {
    return true
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
func application(_ application: UIApplication,
                 open url: URL,
                 sourceApplication: String?,
                 annotation: Any) -> Bool {
  if Auth.auth().canHandle(url) {
    Return true
  }
  // URL not auth related, developer should handle it.
}

উদ্দেশ্য গ

// For iOS 9+
- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

আপনি SwiftUI বা ব্যবহার করেন, তাহলে UISceneDelegate পুনঃনির্দেশ URL হ্যান্ডেল করতে, বাস্তবায়ন scene:openURLContexts: পদ্ধতি, এবং তাদের মধ্যে, এর URL টি পাস FIRAuth এর canHandleURL পদ্ধতি।

সুইফট

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
  for urlContext in URLContexts {
      let url = urlContext.url
      Auth.auth().canHandle(url)
  }
  // URL not auth related, developer should handle it.
}

উদ্দেশ্য গ

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
  for (UIOpenURLContext *urlContext in URLContexts) {
    [FIRAuth.auth canHandleURL:urlContext.url];
    // URL not auth related, developer should handle it.
  }
}

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

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

  • আপনার অ্যাপ্লিকেশান, আপনি থেকে ব্যবহারকারীর সাধারণ প্রোফাইল তথ্য পেতে পারেন FIRUser অবজেক্ট। দেখুন ব্যবহারকারীদের পরিচালনা

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

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

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

সুইফট

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

উদ্দেশ্য গ

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

আপনি প্রমাণীকরণ ত্রুটির সম্পূর্ণ পরিসরের জন্য ত্রুটি পরিচালনা কোড যোগ করতে চাইতে পারেন। দেখুন হাতল ত্রুটি