با استفاده از شماره تلفن با Firebase در iOS احراز هویت کنید

برای ورود به سیستم کاربر با ارسال پیام کوتاه به تلفن کاربر ، می توانید از احراز هویت Firebase استفاده کنید. کاربر با استفاده از یک کد یکبار موجود در پیام کوتاه وارد سیستم می شود.

ساده ترین راه برای اضافه کردن شماره تلفن ورود به سیستم برای برنامه خود را به استفاده FirebaseUI ، که شامل یک قطره در ورود به سیستم ویدجت است که پیاده سازی جریانهای ورود به سیستم برای شماره تلفن ورود به سیستم، و همچنین مبتنی بر رمز عبور و ورود به سیستم فدرال -که در. این سند نحوه پیاده سازی جریان ورود شماره تلفن با استفاده از Firebase SDK را توضیح می دهد.

قبل از اینکه شروع کنی

  1. اضافه کردن فایربیس به پروژه های iOS خود را .
  2. شامل غلاف زیر را در خود Podfile :
    pod 'Firebase/Auth'
    
  3. اگر هنوز برنامه خود را متصل به پروژه فایربیس شما نیست، انجام این کار از کنسول فایربیس .

نگرانی های امنیتی

احراز هویت تنها با استفاده از یک شماره تلفن ، در حالی که راحت است ، اما از سایر روش های موجود ایمن تر نیست ، زیرا داشتن شماره تلفن به راحتی بین کاربران منتقل می شود. همچنین ، در دستگاه های دارای چندین نمایه کاربر ، هر کاربری که می تواند پیامک دریافت کند می تواند با استفاده از شماره تلفن دستگاه وارد حساب کاربری شود.

اگر در برنامه خود از ورود به سیستم با شماره تلفن استفاده می کنید ، باید آن را در کنار روشهای ورود به سیستم ایمن تر ارائه دهید و کاربران را از معاملات امنیتی استفاده از ورود به سیستم شماره تلفن مطلع کنید.

ورود به سیستم شماره تلفن را برای پروژه Firebase خود فعال کنید

برای ورود کاربران از طریق پیامک ، ابتدا باید روش ورود شماره تلفن را برای پروژه Firebase خود فعال کنید:

  1. در فایربیس کنسول ، باز کردن بخش احراز هویت.
  2. در صفحه ی ثبت نام در روش، فعال کردن شماره تلفن ثبت نام در روش.

سهمیه درخواست ورود به سیستم شماره تلفن Firebase به اندازه ای زیاد است که اکثر برنامه ها تحت تأثیر قرار نمی گیرند. با این حال ، اگر نیاز دارید با احراز هویت تلفن وارد حجم زیادی از کاربران شوید ، ممکن است لازم باشد طرح قیمت گذاری خود را ارتقا دهید. مراجعه کنید قیمت گذاری صفحه.

تأیید برنامه را فعال کنید

برای استفاده از احراز هویت شماره تلفن ، Firebase باید بتواند تأیید کند که درخواست های ورود به سیستم از طریق برنامه شما وارد شده است. دو راه برای احراز هویت Firebase وجود دارد:

  • اطلاعیه خاموش APN ها: هنگامی که شما در یک کاربر با شماره تلفن خود را برای اولین بار بر روی یک دستگاه ثبت نام، فایربیس احراز هویت می فرستد یک نشانه به دستگاه با استفاده از یک اطلاع رسانی فشار سکوت. اگر برنامه شما اعلان را با موفقیت از Firebase دریافت کرد ، ورود به سیستم شماره تلفن می تواند ادامه یابد.

    برای iOS 8.0 و جدیدتر ، اعلان های خاموش نیازی به رضایت صریح کاربر ندارند و بنابراین کاربر از دریافت اعلان های APN در برنامه خودداری می کند. بنابراین ، برنامه نیازی به درخواست اجازه کاربر برای دریافت اعلان های فشار هنگام اجرای شماره تلفن Firebase.

  • تایید reCAPTCHA را: در صورتی که ارسال و یا دریافت هشدار از طریق فشار سکوت ممکن نیست، مانند زمانی که کاربر تازه کردن پس زمینه غیر فعال برای برنامه شما، و یا در هنگام تست برنامه خود را بر روی یک شبیه ساز سیستم عامل iOS، فایربیس احراز هویت با استفاده از تایید reCAPTCHA را برای تکمیل تلفن جریان ورود به سیستم چالش reCAPTCHA اغلب می تواند بدون نیاز به حل مشکل توسط کاربر تکمیل شود.

وقتی اعلان های فشار بی صدا به درستی پیکربندی شوند ، تنها درصد بسیار کمی از کاربران جریان reCAPTCHA را تجربه می کنند. با این وجود ، باید مطمئن شوید که شماره تلفن به درستی کار می کند ، اعلان های فشار بی صدا در دسترس هستند یا خیر.

شروع به دریافت اعلان های بی صدا کنید

برای فعال کردن اعلان های APN برای استفاده از احراز هویت Firebase:

  1. در Xcode متعلق به، را قادر می سازد اطلاعیه های فشار برای پروژه شما.
  2. کلید احراز هویت APN خود را در Firebase بارگذاری کنید. اگر شما در حال حاضر یک کلید APN ها احراز هویت دارند، مطمئن شوید که به ایجاد یک در توسعه مرکز اپل کاربران .

    1. در داخل پروژه خود را در فایربیس کنسول، را انتخاب کنید آیکون چرخ دنده، تنظیمات پروژه را انتخاب کنید، و سپس برگه ابر پیام انتخاب کنید.

    2. در کلید احراز هویت APN ها تحت پیکربندی برنامه های iOS، کلیک بر روی دکمه آپلود.

    3. مرور به محل که در آن کلید خود را نجات داد، آن را انتخاب کنید، و روی Open کلیک کنید. اضافه کردن شماره شناسایی کلید برای کلید (موجود در توسعه مرکز اپل کاربران ) و آپلود را کلیک کنید.

    اگر قبلاً گواهی APNs دارید ، می توانید به جای آن گواهی را بارگذاری کنید.

تأیید reCAPTCHA را تنظیم کنید

برای فعال کردن Firebase SDK برای استفاده از تأیید مجدد reCAPTCHA:

  1. طرح های URL سفارشی را به پروژه Xcode خود اضافه کنید:
    1. پیکربندی پروژه خود را باز کنید: روی نام پروژه در نمای چپ درخت دوبار کلیک کنید. برنامه خود را از بخش اهداف انتخاب کنید، سپس برگه اطلاعات را انتخاب کنید، و گسترش بخش انواع URL.
    2. کلیک بر روی دکمه و اضافه کردن یک طرح URL برای ID مشتری معکوس خود را. برای پیدا کردن این ارزش، باز کردن GoogleService-Info.plist فایل پیکربندی، و برای نگاه REVERSED_CLIENT_ID کلیدی است. کپی ارزش آن کلید، و آن را به طرح URL در صفحه تنظیمات جعبه بچسبانید. سایر فیلدها را خالی بگذارید.

      پس از تکمیل ، پیکربندی شما باید شبیه به موارد زیر باشد (اما با مقادیر خاص برنامه شما):

  2. اختیاری: اگر شما می خواهید برای سفارشی کردن راه ارائه برنامه خود را به SFSafariViewController یا UIWebView هنگام نمایش reCAPTCHA را به کاربر، ایجاد یک کلاس سفارشی است که مطابق با FIRAuthUIDelegate پروتکل، و آن را به verifyPhoneNumber:UIDelegate:completion: .

کد تأیید را به تلفن کاربر ارسال کنید

برای شروع شماره تلفن ورود به سیستم، در حال حاضر کاربر یک رابط است که باعث آنها را به ارائه شماره تلفن خود را، و سپس پاسخ verifyPhoneNumber:UIDelegate:completion: به درخواست که فایربیس ارسال کد تأیید هویت به تلفن کاربر با اس ام اس:

  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: ، فایربیس اطلاع رسانی فشار سکوت می فرستد به برنامه شما، و یا مسائل یک چالش reCAPTCHA را به کاربر. بعد از اینکه اعلان برنامه شما دریافت شد یا کاربر چالش reCAPTCHA را تکمیل کرد ، Firebase یک پیام کوتاه حاوی کد احراز هویت به شماره تلفن مشخص شده ارسال می کند و یک شناسه تأیید به عملکرد تکمیل شما ارسال می کند. برای ورود به سیستم کاربر به کد تأیید و شناسه تأیید احتیاج دارید.

    پیام کوتاه ارسال شده توسط فایربیس همچنین می توانید با مشخص زبان تایید از طریق موضعی شود languageCode ملک در مثال تایید خود را.

    سریع

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

    هدف-ج

     // Change language code to french.
     [FIRAuth auth].languageCode = @"fr";
    
  3. شناسه تأیید را ذخیره کرده و هنگام بارگیری برنامه ، آن را بازیابی کنید. با انجام این کار ، می توانید اطمینان حاصل کنید که اگر برنامه شما قبل از تکمیل جریان ورود به سیستم توسط کاربر خاتمه یافته باشد (برای مثال ، هنگام تغییر به برنامه پیامک) هنوز یک شناسه تأیید معتبر دارید.

    می توانید شناسه تأیید را به هر شکلی که می خواهید ادامه دهید. یک راه ساده این است برای نجات ID امنیتی با 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 شی از کد امنیتی و تایید ID و عبور است که شی به signInWithCredential:completion: .

  1. کد تأیید را از کاربر دریافت کنید.
  2. درست FIRPhoneAuthCredential شی از کد امنیتی و تایید ID.

    سریع

    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 تنظیم کنید. آزمایش با شماره تلفن های خیالی مزایای زیر را ارائه می دهد:

  • احراز هویت شماره تلفن را بدون مصرف سهمیه استفاده خود آزمایش کنید.
  • تأیید شماره تلفن را بدون ارسال پیام کوتاه واقعی آزمایش کنید.
  • آزمایش های متوالی را با شماره تلفن یکسان بدون ضربه زدن انجام دهید. در صورتی که مرورگر از شماره تلفن یکسانی برای آزمایش استفاده کند ، این امر خطر رد شدن را در طول فرآیند بررسی فروشگاه App به حداقل می رساند.
  • به راحتی در محیط های توسعه بدون هیچ گونه تلاش اضافی ، مانند توانایی توسعه در شبیه ساز iOS یا شبیه ساز Android بدون خدمات Google Play ، آزمایش کنید.
  • تست های ادغام را بدون مانع شدن توسط چک های امنیتی که معمولاً بر روی شماره تلفن های واقعی در محیط تولید اعمال می شود ، بنویسید.

شماره تلفن های تخیلی باید شرایط زیر را داشته باشند:

  1. مطمئن شوید که از شماره تلفن هایی استفاده می کنید که واقعاً تخیلی هستند و در حال حاضر وجود ندارند. احراز هویت Firebase به شما اجازه نمی دهد شماره تلفن های موجود را که توسط کاربران واقعی استفاده می شود به عنوان شماره آزمایشی تنظیم کنید. یک گزینه این است به استفاده از 555 عدد پیشوند شماره تلفن آزمایش ایالات متحده، برای مثال: 1 650-555-3434
  2. شماره تلفن ها باید از نظر طول و سایر محدودیت ها به درستی قالب بندی شوند. آنها همچنان از اعتبار سنجی شماره تلفن یک کاربر واقعی برخوردار خواهند بود.
  3. برای توسعه می توانید حداکثر 10 شماره تلفن اضافه کنید.
  4. از شماره تلفن ها/کدهایی که حدس زدن آنها دشوار است استفاده کنید و آنها را به طور مکرر تغییر دهید.

ایجاد شماره تلفن های تخیلی و کدهای تأیید

  1. در فایربیس کنسول ، باز کردن بخش احراز هویت.
  2. در ثبت نام در تب روش، فعال ارائه دهنده تلفن اگر شما در حال حاضر نیست.
  3. برای تست منوی آکاردئونی باز شماره تلفن.
  4. ارائه شماره تلفن شما را به آزمون می خواهید، برای مثال: 1 650-555-3434.
  5. ارائه کد تأیید 6 رقمی که شماره های خاص، برای مثال: 654321.
  6. اضافه کردن شماره. در صورت نیاز ، می توانید شماره تلفن و کد آن را با قرار دادن نشانگر روی ردیف مربوطه و کلیک روی نماد سطل زباله حذف کنید.

تست دستی

می توانید مستقیماً از یک شماره تلفن خیالی در برنامه خود استفاده کنید. این به شما این امکان را می دهد که در مراحل توسعه ، بدون برخورد با مشکلات سهمیه بندی یا فشار گاز ، آزمایش دستی انجام دهید. همچنین می توانید مستقیماً از شبیه ساز iOS یا شبیه ساز Android بدون نصب سرویس Google Play تست کنید.

وقتی شماره تلفن داستانی را ارائه می دهید و کد تأیید را ارسال می کنید ، هیچ پیامک واقعی ارسال نمی شود. در عوض ، برای تکمیل ورود به سیستم ، باید کد تأیید پیکربندی شده قبلی را ارائه دهید.

پس از اتمام ورود به سیستم ، یک کاربر Firebase با آن شماره تلفن ایجاد می شود. کاربر همان رفتار و ویژگی های یک کاربر شماره تلفن واقعی را دارد و می تواند از همان طریق به پایگاه داده Realtime/Cloud Firestore و سایر خدمات دسترسی پیدا کند. شناسه توکنی که طی این فرایند ضبط شده است دارای امضای مشابه یک کاربر شماره تلفن واقعی است.

یکی دیگر از گزینه تنظیم یک نقش آزمون از طریق ادعاهای سفارشی در این کاربران به آنها را متمایز به عنوان کاربران جعلی اگر شما می خواهید برای محدود کردن بیشتر دسترسی داشته باشید.

آزمایش ادغام

علاوه بر آزمایش دستی ، تأیید هویت Firebase API هایی را برای کمک به نوشتن تست های ادغام برای تست تأیید تلفن ارائه می دهد. این API ها با غیرفعال کردن نیاز reCAPTCHA در وب و اعلان های فشار بی صدا در iOS ، تأیید برنامه را غیرفعال می کنند. این امر باعث می شود آزمایش اتوماسیون در این جریانها آسان تر و پیاده سازی شود. علاوه بر این ، آنها به شما امکان می دهند جریانهای تأیید فوری را در Android آزمایش کنید.

در iOS، از appVerificationDisabledForTesting تنظیم است به تنظیم شود TRUE قبل از تماس verifyPhoneNumber . این مورد بدون نیاز به نشانه APN یا ارسال اعلانات فشار بی صدا در پس زمینه پردازش می شود و آزمایش در شبیه ساز را آسان تر می کند. این امر همچنین جریان برگشتی reCAPTCHA را غیرفعال می کند.

توجه داشته باشید که وقتی تأیید برنامه غیرفعال است ، استفاده از شماره تلفن غیر داستانی در ورود به سیستم کامل نمی شود. فقط شماره تلفن های تخیلی را می توان با این API استفاده کرد.

سریع

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;
    }];
}];

ضمیمه: با استفاده از ورود به سیستم تلفن بدون تغییر دادن

احراز هویت Firebase از روش swizzling برای دستیابی به صورت خودکار رمز APN برنامه شما ، رسیدگی به اعلان های فشار بی صدا که Firebase به برنامه شما ارسال می کند ، استفاده می کند و به طور خودکار تغییر مسیر سفارشی را از صفحه تأیید reCAPTCHA در حین تأیید قطع می کند.

اگر ترجیح می دهید استفاده swizzling نیست، شما می توانید آن را با اضافه کردن پرچم غیر فعال کردن FirebaseAppDelegateProxyEnabled به فایل Info.plist برنامه شما و تنظیم آن را به NO . توجه داشته باشید که تنظیم این پرچم به NO همچنین غیر فعال swizzling برای سایر محصولات فایربیس، از جمله فایربیس ابر پیام.

اگر swizzling را غیرفعال می کنید ، باید به صراحت توکن APNs دستگاه را فشار دهید ، اعلان ها را فشار دهید و طرح سفارشی URL را به تأیید اعتبار Firebase هدایت کنید.

برای به دست آوردن رمز 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: روش، چک برای فایربیس تایید اطلاعیه مرتبط با تماس 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.
  }
}

مراحل بعدی

پس از ورود کاربر برای اولین بار ، یک حساب کاربری جدید ایجاد می شود و به اعتبارنامه - یعنی نام کاربری و رمز عبور ، شماره تلفن یا اطلاعات ارائه دهنده تأیید - که کاربر با آن وارد شده است ، پیوند داده می شود. این حساب جدید به عنوان بخشی از پروژه Firebase شما ذخیره می شود و می تواند بدون در نظر گرفتن نحوه ورود کاربر در هر برنامه ای در پروژه شما ، کاربر را شناسایی کند.

  • در برنامه های خود را، شما می توانید اطلاعات نمایه کاربر از دریافت FIRUser شی. مشاهده مدیریت کاربران .

  • در خود پایگاه فایربیس بیدرنگ و ابر ذخیره سازی قوانین امنیتی ، شما می توانید دریافت امضا در شناسه کاربری منحصر به فرد کاربر را از 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;
}

همچنین ممکن است بخواهید برای همه دامنه خطاهای احراز هویت ، کد مدیریت خطا را اضافه کنید. مشاهده خطاها دسته .