با استفاده از Apple و Unity احراز هویت شوید

با استفاده از Firebase SDK برای انجام جریان ورود به سیستم OAuth 2.0 به کاربران خود می توانید با استفاده از Apple ID آنها احراز هویت کنند.

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

برای ورود به سیستم با استفاده از اپل ، ابتدا ورود به سیستم را با برنامه Apple در سایت توسعه دهنده اپل پیکربندی کنید ، سپس Apple را به عنوان ارائه دهنده ورود به سیستم Firebase خود فعال کنید.

به برنامه توسعه دهنده اپل بپیوندید

ورود به سیستم با اپل تنها می تواند توسط اعضای پیکربندی اپل توسعهدهنده برنامه .

ورود به سیستم با اپل را پیکربندی کنید

ورود به سیستم Apple باید در پروژه Firebase شما فعال و پیکربندی شود. پیکربندی Apple Developer در سیستم عامل های Android و iOS متفاوت است. لطفا "ثبت نام پیکربندی به با اپل" بخش از دنبال به در iOS و / یا آندروید راهنماهای قبل از اقدام.

اپل را به عنوان ارائه دهنده ورود به سیستم فعال کنید

  1. در فایربیس کنسول ، باز کردن بخش تایید. بر روی ثبت نام در تب روش، فعال کردن ارائه دهنده اپل.
  2. تنظیمات ارائه دهنده Apple Sign In را پیکربندی کنید:
    1. اگر برنامه خود را فقط در iOS نصب می کنید ، می توانید قسمتهای Service ID ، Apple Team ID ، کلید خصوصی و شناسه کلید را خالی بگذارید.
    2. برای پشتیبانی در دستگاه های Android:
      1. اضافه کردن فایربیس به پروژه آندروید خود را . هنگام تنظیم برنامه در کنسول Firebase ، حتماً امضای SHA-1 برنامه خود را ثبت کنید.
      2. در فایربیس کنسول ، باز کردن بخش تایید. بر روی ثبت نام در تب روش، فعال کردن ارائه دهنده اپل. شناسه سرویس را که در بخش قبلی ایجاد کرده اید مشخص کنید. همچنین ، در بخش پیکربندی جریان کد OAuth ، Apple Team ID خود و کلید خصوصی و شناسه کلیدی را که در قسمت قبلی ایجاد کرده اید ، مشخص کنید.

با داده های ناشناس اپل مطابقت داشته باشید

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

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

  • آدرس ایمیل را به یک شناسه Apple ناشناس یا بالعکس پیوند دهید.
  • شماره تلفن را به شناسه Apple ناشناس یا بالعکس پیوند دهید
  • یک مدارک اجتماعی غیر ناشناس (فیس بوک ، گوگل و غیره) را به یک شناسه Apple ناشناس پیوند دهید یا بالعکس.

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

دسترسی به Firebase.Auth.FirebaseAuth کلاس

FirebaseAuth کلاس دروازه برای همه تماس API است. آن را از طریق دسترسی است FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

جریان ورود به سیستم را با Firebase SDK کنترل کنید

روند ورود به سیستم با اپل در سیستم عامل های iOS و Android متفاوت است.

در iOS

  1. نصب یک شخص ثالث پلاگین که مسئولیت رسیدگی به نشانه اپل در فعلی و نسل رمز، مانند ثبت نام وحدت در با اپل دارایی ذخیره سازی بسته بندی . برای استفاده از رشته nonce تصادفی تولید شده در حالت رشته خام برای استفاده در عملیات Firebase ممکن است لازم باشد کد را تغییر دهید (یعنی قبل از ایجاد فرم هضم SHA256 از nonce ، یک نسخه از آن را ذخیره کنید)

  2. برای ایجاد اعتبارنامه Firebase و ورود به Firebase از رشته توکن و nonce خام استفاده کنید.

    Firebase.Auth.Credential credential =
        Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null);
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

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

  4. هنگام پیوند با Apple Sign in در iOS ممکن است با خطایی روبرو شوید که یک حساب Firebase موجود قبلاً به حساب Apple پیوند داده شده است. هنگامی که این رخ می دهد یک Firebase.Auth.FirebaseAccountLinkException خواهد شد به جای استاندارد پرتاب Firebase.FirebsaeException . استثنا شامل یک UserInfo.UpdatedCredential ملکی که، در صورت معتبر، ممکن است به ثبت نام در کاربر اپل و از طریق استفاده FirebaseAuth.SignInWithCredential . اعتبارنامه به روز شده ، نیازی به تولید رمز ورود به سیستم جدید Apple با nonce برای عملکرد ورود به سیستم نیست.

    توجه داشته باشید که LinkWithCredentialAsync ادامه خواهد داد به پرتاب استاندارد Firebase.FirebaseException در شکست لینک، و در نتیجه قادر به بازگرداندن اعتبار به روز شده است.

    auth.CurrentUser.LinkAndRetrieveDataWithCredentialAsync(
      Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null))
        .ContinueWithOnMainThread( task => {
          if (task.IsCompleted) {
            // Link Success
          } else {
            if (task.Exception != null) {
              foreach (Exception exception in task.Exception.Flatten().InnerExceptions) {
                Firebase.Auth.FirebaseAccountLinkException firebaseEx =
                  exception as Firebase.Auth.FirebaseAccountLinkException;
                if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) {
                  // Attempt to sign in with the updated credential.
                  auth.SignInWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( signInTask => {
                      // Handle Sign in result.
                    });
                } else {
                  DebugLog("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });
    

در Android

در Android ، با ادغام ورود به سیستم OAuth عمومی مبتنی بر وب ، با استفاده از Firebase SDK برای انجام جریان پایان ورود به سیستم ، کاربران خود را با Firebase احراز هویت کنید.

برای کنترل ورود به سیستم با Firebase SDK ، این مراحل را دنبال کنید:

  1. ساخت یک نمونه از یک FederatedOAuthProviderData پیکربندی شده با مناسب ارائه دهنده ID برای اپل.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    
    providerData.ProviderId = "apple.com";
    
  2. اختیاری: مشخص OAuth حفظ 2.0 حوزه فراتر از پیش فرض که شما به درخواست از ارائه دهنده احراز هویت می خواهید.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("email");
    providerData.Scopes.Add("name");
    
  3. اختیاری: اگر شما می خواهید برای نمایش اپل در صفحه ورود در یک زبان غیر از انگلیسی، مجموعه ای از locale پارامتر. مشاهده ورود به سیستم با اسناد اپل برای مناطق پشتیبانی شده است.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  4. پس از پیکربندی داده های ارائه دهنده ، از آنها برای ایجاد FederatedOAuthProvider استفاده کنید.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
      new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. با استفاده از شی provider ارائه دهنده Auth ، با Firebase احراز هویت کنید. توجه داشته باشید که برخلاف سایر عملیات FirebaseAuth ، با باز کردن یک نمای وب که کاربر می تواند اعتبارنامه خود را وارد کند ، کنترل UI شما کنترل می شود.

    برای شروع ثبت نام در جریان، پاسخ signInWithProvider :

    auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("SignInWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("SignInWithProviderAsync encountered an error: " +
              task.Exception);
            return;
        }
    
        Firebase.Auth.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  6. همین الگو را می توان با استفاده ReauthenticateWithProvider است که می تواند مورد استفاده قرار گیرد برای بازیابی اعتبار تازه برای عملیات حساس که نیاز به ورود به آخرین.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. و شما می توانید با استفاده از linkWithCredential() ، لینک ارائه دهندگان هویت های مختلف به حساب های موجود.

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

    به عنوان مثال ، برای پیوند دادن حساب فیس بوک به حساب Firebase فعلی ، از رمز دسترسی که از ورود کاربر به سیستم فیس بوک دریافت کرده اید استفاده کنید:

    // Initialize a Facebook credential with a Facebook access token.
    
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token);
    
    // Assuming the current user is an Apple user linking a Facebook provider.
    user.LinkAndRetrieveDataWithCredentialAsync(credential)
        .ContinueWithOnMainThread( task => {
          if (task.IsCanceled) {
              Debug.LogError("LinkAndRetrieveDataWithCredentialAsync was canceled.");
              return;
          }
          if (task.IsFaulted) {
            Debug.LogError("LinkAndRetrieveDataWithCredentialAsync encountered an error: "
                           + task.Exception);
              return;
          }
    
          Firebase.Auth.SignInResult signInResult = task.Result;
          Firebase.Auth.FirebaseUser user = signInResult.User;
          Debug.LogFormat("User linked successfully: {0} ({1})",
              user.DisplayName, user.UserId);
        });
    

با Apple Notes وارد سیستم شوید

برخلاف سایر ارائه دهندگان پشتیبانی شده توسط Firebase Auth ، اپل URL عکس ارائه نمی دهد.

همچنین، هنگامی که کاربر بخواهد به اشتراک گذاشتن ایمیل خود را با این برنامه، مفاد اپل یک آدرس ایمیل منحصر به فرد برای آن کاربر (از فرم نمی xyz@privaterelay.appleid.com )، آن سهام با برنامه شما. اگر سرویس رله ایمیل خصوصی را پیکربندی کرده باشید ، اپل ایمیل های ارسالی به آدرس ناشناس را به آدرس ایمیل واقعی کاربر ارسال می کند.

اپل این اطلاعات را تنها سهام کاربر مانند نام نمایش با برنامه های اولین بار که کاربر در. معمولا، فروشگاه های فایربیس نام صفحه نمایش اولین بار که کاربر با شرکت اپل، که شما می توانید با گرفتن getCurrentUser().getDisplayName() . با این حال ، اگر قبلاً از Apple برای ورود کاربر به برنامه بدون استفاده از Firebase استفاده کرده اید ، Apple نام نمایش کاربر Firebase را ارائه نمی دهد.

مراحل بعدی

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

در برنامه های خود می توانید اطلاعات نمایه اصلی کاربر را از firebase :: auth :: user object دریافت کنید. مشاهده مدیریت کاربران .

در Firebase Realtime Database و Cloud Storage Security Rules خود ، می توانید شناسه کاربری منحصر به فرد کاربر وارد شده را از متغیر auth دریافت کرده و از آن برای کنترل دسترسی کاربر به داده ها استفاده کنید.