כניסה של משתמשים באמצעות Apple
במאמר הזה מוסבר איך להשתמש ב-Identity Platform כדי להוסיף כניסה באמצעות Apple לאפליקציית האינטרנט.
לפני שמתחילים
הפעלת Identity Platform ויצירת אפליקציית אינטרנט בסיסית באמצעות HTML ו-JavaScript. במאמר הזה מוסבר איך להפעיל את Identity Platform ולהיכנס.
מצטרפים ל-Apple Developer Program.
הגדרת האפליקציה באמצעות אפל
באתר של Apple למפתחים:
פועלים לפי השלבים במאמר הגדרת כניסה באמצעות חשבון אפל לאינטרנט. למשל:
רישום של כתובת URL להחזרה, שנראית כך:
https://project-id.firebaseapp.com/__/auth/handler
אנחנו מארחים באופן זמני קובץ בכתובת ה-URL הבאה כדי לאמת את הדומיין שלך:
https://project-id.firebaseapp.com/.well-known/apple-developer-domain-association.txt
בנוסף, חשוב לשים לב למזהה השירותים ולמזהה הצוות של אפל – תצטרכו אותם בקטע הבא.
שימוש במפתח פרטי של אפל כדי ליצור כניסה. בקטע הבא תצטרכו את המפתח ואת המזהה שלו.
אם אתם משתמשים ב-Identity Platform כדי לשלוח אימיילים למשתמשים, אתם צריכים להגדיר את הפרויקט באמצעות שירות ממסר האימייל הפרטי של Apple באמצעות כתובת האימייל הבאה:
noreply@project-id.firebaseapp.com
אפשר גם להשתמש בתבנית אימייל מותאמת אישית, אם יש כזו באפליקציה.
עמידה בדרישות של Apple לגבי נתונים שעברו אנונימיזציה
אפל נותנת למשתמשים את האפשרות להפוך את הנתונים שלהם לאנונימיים, כולל כתובת האימייל שלהם. משתמשים שבוחרים באפשרות הזו מקבלים מ-Apple כתובת אימייל מוסתרת עם הדומיין privaterelay.appleid.com.
האפליקציה צריכה לעמוד בדרישות של כל מדיניות או תנאים רלוונטיים למפתחים של אפל בנוגע למזהי אפל אנונימיים. הדבר כולל קבלת הסכמת המשתמשים לפני שמשייכים פרטים אישיים מזהים (PII) למזהה Apple אנונימי. פעולות שכוללות פרטים אישיים מזהים (PII) כוללות, בין היתר:
- קישור של כתובת אימייל ל-Apple ID אנונימי, או להפך.
- קישור של מספר טלפון ל-Apple ID שעבר אנונימיזציה, או להפך
- קישור פרטי כניסה לרשתות חברתיות שלא מאפשרים אנונימיות, כמו פייסבוק או Google, למזהה Apple אנונימי, או להיפך.
מידע נוסף זמין בהסכם הרישיון של תוכנית המפתחים של Apple בחשבון המפתחים שלכם ב-Apple.
הגדרת Apple כספק
כדי להגדיר את Apple כספק זהויות:
נכנסים לדף Identity Providers במסוף Google Cloud .
לוחצים על הוספת ספק.
בוחרים באפשרות Apple מהרשימה.
בקטע פלטפורמה, בוחרים באפשרות אתר.
מזינים את מזהה השירות, מזהה צוות Apple, מזהה המפתח ומפתח פרטי.
לוחצים על הוספת דומיין בקטע דומיינים מורשים כדי לרשום את הדומיינים של האפליקציה. למטרות פיתוח,
localhostכבר מופעל כברירת מחדל.בקטע הגדרת האפליקציה, לוחצים על פרטי ההגדרה. מעתיקים את קטע הקוד לקוד של האפליקציה כדי להפעיל את Identity Platform client SDK.
לוחצים על Save.
כניסה של משתמשים באמצעות ה-SDK של הלקוח
כדי להכניס משתמש לחשבון:
יוצרים מופע של אובייקט הספק
OAuthProviderבאמצעות המזההapple.com:גרסה 9 לאינטרנט
import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('apple.com');
גרסה 8 לאינטרנט
var provider = new firebase.auth.OAuthProvider('apple.com');
אופציונלי: מוסיפים היקפי הרשאות של OAuth. ההיקפים מציינים אילו נתונים אתם מבקשים מ-Apple. יכול להיות שנתונים רגישים יותר ידרשו היקפי הרשאה ספציפיים. כברירת מחדל, כשהאפשרות חשבון אחד לכל כתובת אימייל מופעלת, Identity Platform מבקש את היקפי ההרשאות
emailו-name.גרסה 9 לאינטרנט
provider.addScope('email'); provider.addScope('name');
גרסה 8 לאינטרנט
provider.addScope('email'); provider.addScope('name');
אופציונלי: התאמה לשפה המקומית של תהליך האימות. אפשר לציין שפה או להשתמש בשפת ברירת המחדל של המכשיר. במסמכים בנושא 'כניסה באמצעות Apple' מפורטים הלוקאלים הנתמכים.
גרסה 9 לאינטרנט
provider.setCustomParameters({ // Localize the Apple authentication screen in French. locale: 'fr' });
גרסה 8 לאינטרנט
provider.setCustomParameters({ // Localize the Apple authentication screen in French. locale: 'fr' });
משתמשים באובייקט הספק כדי להכניס את המשתמש לחשבון. אפשר לפתוח חלון קופץ או להפנות לדף הנוכחי. ההפניה קלה יותר למשתמשים במכשירים ניידים.
כדי להציג חלון קופץ, מתקשרים אל
signInWithPopup():גרסה 9 לאינטרנט
import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // The signed-in user info. const user = result.user; // Apple credential const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; // IdP data available using getAdditionalUserInfo(result) // ... }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The credential that was used. const credential = OAuthProvider.credentialFromError(error); // ... });
גרסה 8 לאינטרנט
firebase .auth() .signInWithPopup(provider) .then((result) => { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // The signed-in user info. var user = result.user; // You can also get the Apple OAuth Access and ID Tokens. var accessToken = credential.accessToken; var idToken = credential.idToken; // IdP data available using getAdditionalUserInfo(result) // ... }) .catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
כדי להפנות את הדף לכתובת אחרת, קודם קוראים לפונקציה
signInWithRedirect():כדאי לפעול לפי השיטות המומלצות כשמשתמשים ב-
signInWithRedirect, ב-linkWithRedirectאו ב-reauthenticateWithRedirect.גרסה 9 לאינטרנט
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
גרסה 8 לאינטרנט
firebase.auth().signInWithRedirect(provider);
לאחר מכן, מתקשרים אל
getRedirectResult()כדי לאחזר את האסימון של Apple כשהדף נטען:גרסה 9 לאינטרנט
import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth"; // Result from Redirect auth flow. const auth = getAuth(); getRedirectResult(auth) .then((result) => { const credential = OAuthProvider.credentialFromResult(result); if (credential) { // You can also get the Apple OAuth Access and ID Tokens. const accessToken = credential.accessToken; const idToken = credential.idToken; } // The signed-in user info. const user = result.user; }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The credential that was used. const credential = OAuthProvider.credentialFromError(error); // ... });
גרסה 8 לאינטרנט
// Result from Redirect auth flow. firebase .auth() .getRedirectResult() .then((result) => { if (result.credential) { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // You can get the Apple OAuth Access and ID Tokens. var accessToken = credential.accessToken; var idToken = credential.idToken; // IdP data available in result.additionalUserInfo.profile. // ... } // The signed-in user info. var user = result.user; }) .catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
כאן גם אפשר לזהות ולטפל בשגיאות. רשימה של קודי שגיאה זמינה בהפניית ה-API.
בניגוד לספקי זהויות רבים אחרים, Apple לא מספקת כתובת URL של תמונה.
אם משתמש בוחר לא לשתף את כתובת האימייל האמיתית שלו עם האפליקציה שלכם, אפל מספקת כתובת אימייל ייחודית שאותה המשתמש יכול לשתף במקום זאת. האימייל הזה הוא בפורמט xyz@privaterelay.appleid.com. אם הגדרתם את שירות העברת האימייל הפרטי, אפל מעבירה אימיילים שנשלחים לכתובת האנונימית לכתובת האימייל האמיתית של המשתמש.
Apple משתפת מידע על משתמשים, כמו שמות לתצוגה, רק עם אפליקציות שמשתמשים נכנסים אליהן בפעם הראשונה. ברוב המקרים, Identity Platform מאחסן את הנתונים האלה, כך שאפשר לאחזר אותם באמצעות firebase.auth().currentUser.displayName במהלך סשנים עתידיים. עם זאת, אם אפשרתם למשתמשים להיכנס לאפליקציה שלכם באמצעות אפל לפני השילוב עם Identity Platform, פרטי המשתמשים לא יהיו זמינים.
המאמרים הבאים
- איך מקשרים חשבונות אפל לספקים אחרים חשוב לזכור שאפל דורשת לקבל הסכמה מפורשת מהמשתמשים לפני שמקשרים את חשבונות אפל שלהם לנתונים אחרים.
- מידע נוסף על משתמשי Identity Platform
- כניסה של משתמשים באמצעות ספקי זהויות אחרים.