المصادقة باستخدام Apple و Unity

يمكنك السماح للمستخدمين بالمصادقة مع Firebase باستخدام معرف Apple الخاص بهم باستخدام Firebase SDK لتنفيذ تدفق تسجيل الدخول من طرف إلى طرف OAuth 2.0.

قبل ان تبدأ

لتسجيل دخول المستخدمين باستخدام Apple ، قم أولاً بتكوين Sign In with Apple على موقع مطوري Apple ، ثم قم بتمكين Apple كموفر تسجيل الدخول لمشروع Firebase الخاص بك.

انضم إلى برنامج Apple Developer

تسجيل الدخول مع يمكن تكوين أبل فقط من قبل أعضاء المطور أبل برنامج .

قم بتكوين تسجيل الدخول مع Apple

يجب تمكين Apple Sign In وتكوينه بشكل صحيح في مشروع Firebase الخاص بك. يختلف تكوين Apple Developer عبر أنظمة Android و iOS. يرجى اتباع "تكوين تسجيل الدخول مع أبل" قسم من دائرة الرقابة الداخلية و / أو الروبوت أدلة قبل المتابعة.

قم بتمكين Apple كموفر لتسجيل الدخول

  1. في وحدة التحكم Firebase ، فتح الباب أصيل. على علامة التبويب تسجيل الدخول الأسلوب، تمكين مزود أبل.
  2. قم بتكوين إعدادات موفر Apple Sign In:
    1. إذا كنت تنشر تطبيقك على iOS فقط ، فيمكنك ترك معرف الخدمة ومعرف فريق Apple والمفتاح الخاص وحقول معرف المفتاح فارغة.
    2. للدعم على أجهزة Android:
      1. إضافة Firebase إلى مشروع Android . تأكد من تسجيل توقيع SHA-1 لتطبيقك عند إعداد تطبيقك في وحدة تحكم Firebase.
      2. في وحدة التحكم Firebase ، فتح الباب أصيل. على علامة التبويب تسجيل الدخول الأسلوب، تمكين مزود أبل. حدد معرّف الخدمة الذي أنشأته في القسم السابق. أيضًا ، في قسم تكوين تدفق كود OAuth ، حدد معرف فريق Apple الخاص بك والمفتاح الخاص ومعرف المفتاح اللذين أنشأتهما في القسم السابق.

الامتثال لمتطلبات البيانات المجهولة الهوية من Apple

تسجيل الدخول مع أبل تتيح للمستخدمين خيار إخفاء الهوية البيانات الخاصة بهم، بما في ذلك عناوين بريدهم الإلكتروني، عند تسجيل الدخول. المستخدمين الذين يختارون هذا الخيار يكون عناوين البريد الإلكتروني مع المجال privaterelay.appleid.com . عند استخدام تسجيل الدخول مع Apple في تطبيقك ، يجب عليك الامتثال لأي سياسات مطور أو شروط مطبقة من Apple فيما يتعلق بمعرفات Apple المجهولة الهوية.

يتضمن ذلك الحصول على أي موافقة مطلوبة من المستخدم قبل ربط أي معلومات شخصية تحدد الهوية مباشرة بمعرف Apple المجهول. عند استخدام مصادقة Firebase ، قد يشمل ذلك الإجراءات التالية:

  • اربط عنوان بريد إلكتروني بمعرف Apple المجهول أو العكس.
  • اربط رقم هاتف بمعرف Apple المجهول أو العكس
  • اربط بيانات اعتماد اجتماعية غير مجهولة (Facebook و Google وما إلى ذلك) بمعرف Apple المجهول أو العكس.

القائمة أعلاه ليست شاملة. راجع اتفاقية ترخيص برنامج مطوري Apple في قسم العضوية لحساب المطور الخاص بك للتأكد من أن تطبيقك يلبي متطلبات Apple.

الوصول إلى Firebase.Auth.FirebaseAuth الطبقة

و FirebaseAuth الفئة هي بوابة لجميع المكالمات API. ومن مليم من خلال FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

تعامل مع تدفق تسجيل الدخول باستخدام Firebase SDK

تختلف عملية تسجيل الدخول باستخدام Apple عبر منصات iOS و Android.

على iOS

  1. تثبيت طرف ثالث المساعد للتعامل مع علامة أبل في حالية وتوليد رمزية، مثل تسجيل الوحدة في الأصول مع أبل التخزين حزمة . قد تحتاج إلى تغيير الكود لربط سلسلة nonce العشوائية التي تم إنشاؤها في حالة السلسلة الأولية لاستخدامها في عمليات Firebase (أي تخزين نسخة منها قبل إنشاء نموذج SHA256 الموجز لـ nonce).

  2. استخدم سلسلة الرمز المميز الناتجة وعلامة nonce الأولية لإنشاء بيانات اعتماد Firebase وتسجيل الدخول إلى Firebase.

    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 ، قم بمصادقة المستخدمين باستخدام Firebase من خلال دمج تسجيل دخول OAuth العام المستند إلى الويب في تطبيقك باستخدام Firebase SDK لتنفيذ تدفق تسجيل الدخول من البداية إلى النهاية.

للتعامل مع تدفق تسجيل الدخول باستخدام Firebase SDK ، اتبع الخطوات التالية:

  1. بناء مثيل FederatedOAuthProviderData تكوينه مع المناسبة ID مزود لشركة آبل.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    
    providerData.ProviderId = "apple.com";
    
  2. اختياري: حدد أوث إضافي 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. مصادقة مع Firebase باستخدام كائن موفر المصادقة. لاحظ أنه بخلاف عمليات FirebaseAuth الأخرى ، فإن هذا سيتحكم في واجهة المستخدم الخاصة بك عن طريق ظهور عرض ويب يمكن للمستخدم من خلاله إدخال بيانات اعتماده.

    لبدء تسجيل الدخول التدفق، وندعو 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 تطلب منك الحصول على موافقة صريحة من المستخدمين قبل ربط حسابات Apple الخاصة بهم ببيانات أخرى.

    على سبيل المثال ، لربط حساب Facebook بحساب Firebase الحالي ، استخدم رمز الوصول الذي حصلت عليه من تسجيل دخول المستخدم إلى Facebook:

    // 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 ، لا تقدم Apple عنوان URL للصورة.

أيضا، عندما يختار المستخدم ليس لتبادل البريد الإلكتروني الخاصة بهم مع التطبيق، أحكام أبل عنوان بريد إلكتروني فريد لهذا المستخدم (النموذج xyz@privaterelay.appleid.com )، وهو ما أسهم مع التطبيق الخاص بك. إذا قمت بتكوين خدمة ترحيل البريد الإلكتروني الخاص ، فإن Apple تعيد توجيه رسائل البريد الإلكتروني المرسلة إلى العنوان المجهول إلى عنوان البريد الإلكتروني الحقيقي للمستخدم.

التفاح المعلومات سهم فقط المستخدم مثل اسم العرض مع التطبيقات أول مرة قيام المستخدم بتسجيل الدخول. عادة، Firebase مخازن اسم العرض أول مرة قيام المستخدم بتسجيل الدخول مع أبل، والتي يمكنك الحصول عليها مع getCurrentUser().getDisplayName() . ومع ذلك ، إذا سبق لك استخدام Apple لتسجيل دخول مستخدم إلى التطبيق دون استخدام Firebase ، فلن تقدم Apple اسم عرض المستخدم لـ Firebase.

الخطوات التالية

بعد تسجيل دخول المستخدم لأول مرة ، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد - أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات موفر المصادقة - المستخدم الذي قام بتسجيل الدخول باستخدام. يتم تخزين هذا الحساب الجديد كجزء من مشروع Firebase الخاص بك ، ويمكن استخدامه لتحديد هوية مستخدم عبر كل تطبيق في مشروعك ، بغض النظر عن كيفية تسجيل المستخدم للدخول.

في تطبيقاتك ، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من Firebase :: auth :: user object. انظر إدارة المستخدمين .

في قاعدة بيانات Firebase Realtime وقواعد أمان التخزين السحابي ، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير المصادقة ، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.