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

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

לפני שמתחילים

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

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

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

הגדרת כניסה באמצעות Apple

צריך להפעיל את 'כניסה באמצעות חשבון Apple' ולהגדיר אותה כראוי בפרויקט Firebase. ההגדרות של Apple Developer משתנות בפלטפורמות Android ו-Apple. לפני שממשיכים, צריך לפעול לפי ההוראות בקטע 'הגדרת הכניסה באמצעות Apple' במדריכים ל-iOS+ ו/או ל-Android.

הפעלת Apple כספק כניסה

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

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

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

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

  • קישור כתובת אימייל ל-Apple ID שעברה אנונימיזציה או להפך.
  • קישור של מספר טלפון ל-Apple ID שהוסרה ממנו הפרטיות או להפך
  • לקשר פרטי כניסה אנונימיים לרשת חברתית (Facebook, Google וכו') אל Apple ID שעבר אנונימיזציה, או להפך.

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

גישה לכיתה Firebase.Auth.FirebaseAuth

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

איך מבצעים את תהליך הכניסה באמצעות Firebase SDK

תהליך הכניסה באמצעות חשבון Apple משתנה בהתאם לפלטפורמות של Apple ו-Android.

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

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

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

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

  3. אפשר להשתמש באותו קו ביטול נעילה יחד עם ReauthenticateAsync, שיכול להיות משמש לאחזור פרטי כניסה חדשים לפעולות רגישות שמצריכות ההתחברות האחרונה. מידע נוסף זמין במאמר הבא: ניהול משתמשים.

  4. כשאתם מקשרים ל-Apple Sign In בפלטפורמות של Apple, אתם עשויים להיתקל בשגיאה חשבון Firebase הקיים כבר קושר לחשבון ב-Apple. מתי במקרה כזה, המערכת תשליך Firebase.Auth.FirebaseAccountLinkException במקום Firebase.FirebaseException הרגיל. במקרה כזה, ההחרגה כוללת את המאפיין UserInfo.UpdatedCredential, שאפשר להשתמש בו כדי להתחבר באמצעות FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync למשתמש שמקושר ל-Apple, אם הוא תקף. פרטי הכניסה המעודכנים מאפשרים לעקוף את הצורך ליצור טוקן חדש של כניסה ל-Apple עם מספר חד-פעמי (nonce) לצורך פעולת הכניסה.

    auth.CurrentUser.LinkWithCredentialAsync(
      Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null))
        .ContinueWithOnMainThread( task => {
          if (task.IsCompletedSuccessfully) {
            // 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.SignInAndRetrieveDataWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( authResultTask => {
                      // Handle Auth result.
                    });
                } else {
                  Debug.Log("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });

ב-Android

ב-Android, כדי לאמת את המשתמשים באמצעות Firebase, משלבים באפליקציה כניסה גנרית מבוססת-אינטרנט באמצעות OAuth באמצעות Firebase SDK כדי לבצע את תהליך הכניסה מקצה לקצה.

כדי לטפל בתהליך הכניסה באמצעות Firebase SDK:

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

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

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  4. אחרי שהגדרתם את נתוני הספק, השתמשו בהם כדי ליצור FedeatedOAuthProvider.

    // 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.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.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.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. אפשר גם להשתמש ב-LinkWithCredentialAsync() כדי לקשר ספקי זהויות שונים לחשבונות קיימים.

    הערה: 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.LinkWithCredentialAsync(credential)
        .ContinueWithOnMainThread( task => {
          if (task.IsCanceled) {
              Debug.LogError("LinkWithCredentialAsync was canceled.");
              return;
          }
          if (task.IsFaulted) {
            Debug.LogError("LinkWithCredentialAsync encountered an error: "
                           + task.Exception);
              return;
          }
    
          Firebase.Auth.AuthResult result = task.Result;
          Firebase.Auth.FirebaseUser user = result.User;
          Debug.LogFormat("User linked successfully: {0} ({1})",
              user.DisplayName, user.UserId);
        });
    

כניסה באמצעות Apple Notes

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

כמו כן, כשהמשתמש בוחר שלא לשתף את כתובת האימייל שלו עם האפליקציה, Apple מקצה כתובת אימייל ייחודית לאותו משתמש (בטופס xyz@privaterelay.appleid.com), שאותו הוא משתף עם האפליקציה. אם מוגדר שירות ממסר האימייל הפרטי, Apple מעבירה אימיילים שנשלחים אל את הכתובת האנונימית לכתובת האימייל האמיתית של המשתמש.

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

השלבים הבאים

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

באפליקציות שלכם אתם יכולים לקבל את פרטי הפרופיל הבסיסיים של המשתמש מהאובייקט Firebase.Auth.FirebaseUser. ניהול משתמשים

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