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

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

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

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

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

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

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

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

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

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

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

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

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

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

הצעדים הבאים

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

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

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