Check out what’s new from Firebase at Google I/O 2022. Learn more

אימות באמצעות Apple ו-Unity

אתה יכול לאפשר למשתמשים שלך לבצע אימות עם Firebase באמצעות Apple ID שלהם על ידי שימוש ב-Firebase SDK כדי לבצע את זרימת הכניסה מקצה לקצה OAuth 2.0.

לפני שאתה מתחיל

כדי להיכנס למשתמשים באמצעות Apple, תחילה הגדר את ה- Sign In with Apple באתר המפתחים של Apple, ולאחר מכן הפעל את Apple כספק כניסה לפרויקט Firebase שלך.

הצטרף לתוכנית המפתחים של אפל

ניתן להגדיר כניסה עם אפל רק על ידי חברי תוכנית המפתחים של אפל .

הגדר כניסה עם אפל

Apple Sign In חייב להיות זמין ומוגדר כהלכה בפרויקט Firebase שלך. תצורת Apple Developer משתנה בין פלטפורמות אנדרואיד ואפל. אנא עקוב אחר הקטע "הגדר כניסה עם אפל" במדריכי iOS+ ו/או אנדרואיד לפני שתמשיך.

אפשר את Apple כספק כניסה

  1. במסוף Firebase , פתח את הקטע Auth . בכרטיסייה שיטת כניסה , הפעל את ספק Apple .
  2. הגדר את הגדרות ספק הכניסה של Apple:
    1. אם אתה פורס את האפליקציה שלך רק בפלטפורמות של Apple, אתה יכול להשאיר את השדות מזהה שירות, מזהה צוות Apple, מפתח פרטי ומזהה מפתח ריקים.
    2. לתמיכה במכשירי אנדרואיד:
      1. הוסף את Firebase לפרויקט Android שלך . הקפד לרשום את חתימת ה-SHA-1 של האפליקציה שלך כאשר אתה מגדיר את האפליקציה שלך במסוף Firebase.
      2. במסוף Firebase , פתח את הקטע Auth . בכרטיסייה שיטת כניסה , הפעל את ספק Apple . ציין את מזהה השירות שיצרת בסעיף הקודם. כמו כן, בסעיף תצורת זרימת קוד OAuth, ציין את מזהה צוות Apple שלך ​​ואת המפתח הפרטי ומזהה המפתח שיצרת בסעיף הקודם.

עמוד בדרישות הנתונים האנונימיים של Apple

כניסה עם אפל נותנת למשתמשים אפשרות להפוך את הנתונים שלהם לאנונימיים, כולל כתובת הדוא"ל שלהם, בעת הכניסה. למשתמשים שבוחרים באפשרות זו יש כתובות דוא"ל עם הדומיין privaterelay.appleid.com . כאשר אתה משתמש בכניסה עם Apple באפליקציה שלך, עליך לציית לכל מדיניות מפתחים או תנאים רלוונטיים של Apple לגבי מזהי Apple אנונימיים אלה.

זה כולל קבלת כל הסכמת משתמש נדרשת לפני שאתה משייך מידע אישי מזהה ישיר עם מזהה Apple אנונימי. בעת שימוש באימות Firebase, זה עשוי לכלול את הפעולות הבאות:

  • קשר כתובת אימייל למזהה Apple אנונימי או להיפך.
  • קשר מספר טלפון למזהה Apple אנונימי או להיפך
  • קשר אישור חברתי לא אנונימי (פייסבוק, גוגל וכו') למזהה Apple אנונימי או להיפך.

הרשימה לעיל אינה ממצה. עיין בהסכם הרישיון של Apple Developer Program בסעיף החברות בחשבון המפתח שלך כדי לוודא שהאפליקציה שלך עומדת בדרישות של Apple.

גש למחלקה Firebase.Auth.FirebaseAuth

מחלקת FirebaseAuth היא השער לכל קריאות ה-API. ניתן לגשת אליו דרך FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

טפל בזרימת הכניסה עם Firebase SDK

תהליך הכניסה עם אפל משתנה בין פלטפורמות אפל ואנדרואיד.

בפלטפורמות של אפל

  1. התקן תוסף של צד שלישי כדי לטפל בכניסה לא אחת של Apple ויצירת אסימונים, כגון ה- Unity's Sign In With Apple Asset Storage Package . ייתכן שיהיה עליך לשנות את הקוד כדי לאשר את מחרוזת ה-nonce האקראית שנוצרה במצב המחרוזת הגולמית שלה לשימוש בפעולות Firebase (כלומר, לאחסן עותק שלו לפני יצירת ה-SHA256 digest של ה-nonce).

  2. השתמש במחרוזת האסימון שהתקבלה וב-Raw 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 בפלטפורמות של Apple, אתה עלול להיתקל בשגיאה לפיה חשבון Firebase קיים כבר קושר לחשבון Apple. כאשר זה מתרחש, ייזרק Firebase.Auth.FirebaseAccountLinkException במקום Firebase.FirebsaeException הרגיל. החריג כולל מאפיין UserInfo.UpdatedCredential שאם הוא חוקי, ניתן להשתמש בו כדי להיכנס למשתמש המקושר ל-Apple דרך FirebaseAuth.SignInWithCredential . האישור המעודכן עוקף את הצורך ביצירת אסימון כניסה חדש של Apple ללא תשלום עבור פעולת הכניסה.

    שים לב ש- 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, אמת את המשתמשים שלך עם Firebase על ידי שילוב OAuth Login גנרי מבוסס-אינטרנט באפליקציה שלך באמצעות Firebase SDK כדי לבצע את זרימת הכניסה מקצה לקצה.

כדי לטפל בזרימת הכניסה עם Firebase SDK, בצע את השלבים הבאים:

  1. בנה מופע של FederatedOAuthProviderData המוגדר עם מזהה הספק המתאים לאפל.

    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 . ראה את ה- Sign In with Apple Docs עבור המקומות הנתמכים.

    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 שלהם לנתונים אחרים.

    לדוגמה, כדי לקשר חשבון פייסבוק לחשבון 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 ), אותה היא חולקת עם האפליקציה שלך. אם הגדרתם את שירות ממסר הדוא"ל הפרטי, אפל מעבירה מיילים שנשלחו לכתובת האנונימית לכתובת האימייל האמיתית של המשתמש.

Apple משתפת רק מידע משתמש כגון שם התצוגה עם יישומים בפעם הראשונה שמשתמש נכנס. בדרך כלל, Firebase מאחסן את שם התצוגה בפעם הראשונה שמשתמש נכנס ל-Apple, אותו תוכל לקבל באמצעות getCurrentUser().getDisplayName() . עם זאת, אם השתמשת בעבר ב-Apple כדי להיכנס משתמש לאפליקציה מבלי להשתמש ב-Firebase, Apple לא תספק ל-Firebase את שם התצוגה של המשתמש.

הצעדים הבאים

לאחר שמשתמש נכנס בפעם הראשונה, נוצר חשבון משתמש חדש ומקושר לאישורים - כלומר, שם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האישורים - המשתמש נכנס איתו. החשבון החדש הזה מאוחסן כחלק מפרויקט Firebase שלך, וניתן להשתמש בו כדי לזהות משתמש בכל אפליקציה בפרויקט שלך, ללא קשר לאופן שבו המשתמש נכנס.

באפליקציות שלך, תוכל לקבל את פרטי הפרופיל הבסיסיים של המשתמש מאובייקט firebase::auth::user. ראה ניהול משתמשים .

בכללי האבטחה שלך במסד הנתונים בזמן אמת של Firebase וב-Cloud Storage, תוכל לקבל את מזהה המשתמש הייחודי של המשתמש המחובר ממשתנה האימות, ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.