Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
דף זה תורגם על ידי Cloud Translation API.
Switch to English

אמת באמצעות אפל ואחדות

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

לטפל בזרימת הכניסה באמצעות SDK של Firebase

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

ב- iOS

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

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

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

  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 . עיין במסמכי הכניסה עם Apple עבור האזורים הנתמכים.

    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, אפל אינה מספקת כתובת אתר של תמונה.

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

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

הצעדים הבאים

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

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

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