Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

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

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

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

  1. בשנות ה קונסולת Firebase , פתח את הקטע המחבר. 'הכניסה דרך כרטיסיית שיטה, לאפשר הספק האפל.
  2. הגדר את הגדרות ספק הכניסה של Apple:
    1. אם אתה פורס את האפליקציה שלך רק בפלטפורמות של Apple, תוכל להשאיר את השדות מזהה שירות, מזהה צוות Apple, מפתח פרטי ומזהה מפתח ריקים.
    2. לתמיכה במכשירי אנדרואיד:
      1. להוסיף Firebase לפרויקט Android שלך . הקפד לרשום את חתימת ה-SHA-1 של האפליקציה שלך כאשר אתה מגדיר את האפליקציה שלך במסוף Firebase.
      2. בשנות ה קונסולת Firebase , פתח את הקטע המחבר. 'הכניסה דרך כרטיסיית שיטה, לאפשר הספק האפל. ציין את מזהה השירות שיצרת בסעיף הקודם. כמו כן, בסעיף תצורת זרימת קוד 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. התקן צד שלישי תוסף לטיפול אפל סימן ב הוה ו אסימון דור, כגון הכניסה של האחדות בחבילה חפצה נכס עם אפל . ייתכן שיהיה עליך לשנות את הקוד כדי לאשר את מחרוזת ה-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 נכס, אם תקף, ניתן להשתמש כדי להיכנס למשתמש האפל הצמוד באמצעות 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 פרמטר. עיין היכנס עם 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 ), אשר בה מניות עם האפליקציה שלך. אם הגדרת את שירות ממסר הדוא"ל הפרטי, אפל מעבירה מיילים שנשלחו לכתובת האנונימית לכתובת הדוא"ל האמיתית של המשתמש.

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

הצעדים הבאים

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

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

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