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

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

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

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

  1. قبل از اینکه شما می توانید استفاده کنید فایربیس احراز هویت ، شما نیاز به اضافه کردن فایربیس وحدت SDK (به طور خاص، FirebaseAuth.unitypackage ) به طرح وحدت خود را.

    یافتن دستورالعمل های دقیق برای این مراحل راه اندازی اولیه در اضافه کردن فایربیس به پروژه وحدت خود را .

  2. اگر هنوز برنامه خود را متصل به پروژه فایربیس شما نیست، انجام این کار از کنسول فایربیس .

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

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

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

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

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

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

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

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

شروع به دریافت اعلان های APN (فقط در iOS)

برای استفاده از احراز هویت شماره تلفن در iOS ، برنامه شما باید بتواند اعلان های APN را از Firebase دریافت کند. وقتی برای اولین بار در دستگاهی با شماره تلفن خود وارد سیستم می شوید ، احراز هویت Firebase یک اعلان فشار بی صدا به دستگاه ارسال می کند تا تأیید کند که درخواست ورود شماره تلفن از برنامه شما آمده است. (به همین دلیل ، ورود به سیستم شماره تلفن نمی تواند در شبیه ساز استفاده شود.)

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

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

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

    2. دکمه آپلود گواهی انتخاب کنید برای گواهینامه خود را توسعه، گواهی تولید خود را، و یا هر دو. حداقل یکی مورد نیاز است.

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

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

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

  1. دریافت شماره تلفن کاربر.

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

  2. پاسخ PhoneAuthProvider.VerifyPhoneNumber ، عبور به آن شماره تلفن کاربر است.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(phoneNumber, phoneAuthTimeoutMs, null,
      verificationCompleted: (credential) => {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // There is no need to input the verification code.
        // `credential` can be used instead of calling GetCredential().
      },
      verificationFailed: (error) => {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) => {
        // Verification code was successfully sent via SMS.
        // `id` contains the verification id that will need to passed in with
        // the code from the user when calling GetCredential().
        // `token` can be used if the user requests the code be sent again, to
        // tie the two requests together.
      },
      codeAutoRetrievalTimeout: (id) => {
        // Called when the auto-sms-retrieval has timed out, based on the given
        // timeout parameter.
        // `id` contains the verification id of the request that timed out.
      });
    
    هنگام تماس PhoneAuthProvider.VerifyPhoneNumber ، فایربیس،
    • (در iOS) ، یک اعلان فشار بی صدا به برنامه شما ارسال می کند.
    • Firebase یک پیام کوتاه حاوی کد احراز هویت به شماره تلفن مشخص شده ارسال می کند و یک شناسه تأیید را به عملکرد تکمیل شما ارسال می کند. برای ورود به سیستم کاربر به کد تأیید و شناسه تأیید احتیاج دارید.
  3. شناسه تأیید را ذخیره کرده و هنگام بارگیری برنامه ، آن را بازیابی کنید. با انجام این کار ، می توانید اطمینان حاصل کنید که اگر برنامه شما قبل از تکمیل جریان ورود به سیستم توسط کاربر خاتمه یافته باشد (برای مثال ، هنگام تغییر به برنامه پیامک) ، هنوز یک شناسه تأیید معتبر دارید.

    می توانید شناسه تأیید را به هر نحوی که می خواهید ادامه دهید. یک راه ساده برای نجات ID راستی آزمایی با UnityEngine.PlayerPrefs .

اگر پاسخ به تماس به تصویب در codeSent نامیده می شود، شما می توانید کاربر را بی درنگ به نوع کد امنیتی زمانی که آنها آن را در پیام کوتاه دریافت خواهید کرد.

از سوی دیگر، اگر پاسخ به تماس برای verificationCompleted نامیده می شود، پس از آن تایید خودکار موفق شده است و شما در حال حاضر یک Credential که شما با آن می توانید به شرح زیر استفاده کنید.

با کد تأیید وارد سیستم شوید

پس از کاربر برنامه خود را با کد امنیتی از پیام SMS فراهم می کند، ثبت نام کاربر در با ایجاد یک Credential شی از کد امنیتی و تایید ID و عبور است که شی به FirebaseAuth.SignInWithCredential .

  1. کد تأیید را از کاربر دریافت کنید.
  2. درست Credential شی از کد امنیتی و تایید ID.
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. ثبت نام در کاربر با Credential شی:
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result;
      Debug.Log("User signed in successfully");
      // This should display the phone number.
      Debug.Log("Phone number: " + newUser.PhoneNumber);
      // The phone number providerID is 'phone'.
      Debug.Log("Phone provider ID: " + newUser.ProviderId);
    });
    

مراحل بعدی

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

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

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • در خود پایگاه فایربیس بیدرنگ و ابر ذخیره سازی قوانین امنیتی ، شما می توانید دریافت امضا در شناسه کاربری منحصر به فرد کاربر را از auth متغیر، و استفاده از آن برای کنترل آنچه داده دسترسی کاربر می تواند.

شما می توانید اجازه به کاربران برای ورود به سیستم برنامه خود را با استفاده از ارائه دهندگان تأیید هویت چندگانه توسط ارتباط تایید اعتبار ارائه دهنده به یک حساب کاربری موجود.

برای خروج از سیستم یک کاربر، پاسخ SignOut() :

auth.SignOut();