מצב ההעברה בפעולות באימייל

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

האפשרות הזו יכולה להיות שימושית מאוד בתרחישים הנפוצים הבאים:

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

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

  • באופן כללי, כשמשתמש מתחיל תהליך אימות אימייל או איפוס סיסמה באפליקציה של Apple, הוא מצפה להשלים את התהליך בתוך האפליקציה. היכולת להעביר את המצב באמצעות כתובת URL להמשך מאפשרת לו לעשות זאת.

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

העברת מצב או כתובת URL להמשך בפעולות באימייל

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

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

Swift

פרמטר סוג תיאור
URL String

הגדרת הקישור (כתובת URL/המשך) שיש לו משמעויות שונות בהקשרים שונים:

  • כשהמערכת מטפלת בקישור בווידג'טים של פעולות באינטרנט, זהו קישור העומק בפרמטר השאילתה continueUrl.
  • כשהקישור מטופל ישירות באפליקציה, זהו פרמטר השאילתה continueUrl בקישורי העומק של הקישור הדינמי.
iOSBundleID String הגדרת מזהה החבילה. הפעולה הזו תנסה לפתוח את הקישור באפליקציה של Apple אם מותקן. האפליקציה צריכה להיות רשומה במסוף. אם לא מזהה החבילה שצוין, הערך בשדה הזה מוגדר כמזהה החבילה של את החבילה הראשית של האפליקציה.
androidPackageName String הגדרת שם החבילה ל-Android. הפעולה הזו תנסה לפתוח את הקישור אפליקציית Android, אם היא מותקנת.
androidInstallIfNotAvailable בוליאני המדיניות הזו מציינת אם להתקין את האפליקציה ל-Android אם המכשיר תומך בה והאפליקציה עדיין לא מותקנת. אם השדה הזה מופיע ללא packageName, תופיע הודעת שגיאה עם הסבר שצריך לציין את packageName יחד עם השדה הזה.
androidMinimumVersion String גרסת האפליקציה המינימלית שנתמכת בתהליך הזה. אם המיקום צוינה גרסה ישנה יותר וגרסה ישנה יותר של האפליקציה מותקנת, המשתמש מועבר לחנות Play כדי לשדרג את האפליקציה. האפליקציה ל-Android צריך להיות רשום ב-Play Console.
handleCodeInApp בוליאני אם קישור הפעולה באימייל ייפתח קודם באפליקציה לנייד או בקישור לאינטרנט. ברירת המחדל היא false. אם הערך של הפרמטר הזה מוגדר כ-True, הקישור לקוד הפעולה יישלח כקישור אוניברסלי או כקישור לאפליקציה ל-Android, והאפליקציה תפתח אותו אם היא מותקנת. במקרה של תוצאה שלילית, הקוד יישלח קודם לווידג'ט האינטרנט, ואז המשך הבדיקה יפנה לאפליקציה אם היא מותקנת.
dynamicLinkDomain String מגדיר את דומיין הקישור הדינמי (או תת-הדומיין) לשימוש בקישור הנוכחי אם הוא נפתח באמצעות קישורים דינמיים ב-Firebase. כמספר מודעות דינמיות ניתן להגדיר דומיינים של קישורים לכל פרויקט, השדה הזה מספק את ביכולת לבחור אחת במפורש. אם לא צוין הדומיין, נעשה שימוש כברירת מחדל.

Objective-C

פרמטר סוג תיאור
URL NSString

הגדרת הקישור (כתובת ה-URL של המצב/המשך) שיש לו משמעויות שונות בהקשרים שונים:

  • כשהמערכת מטפלת בקישור בווידג'טים של פעולות באינטרנט, זהו קישור העומק בפרמטר השאילתה continueUrl.
  • כאשר הקישור מטופל ישירות באפליקציה, זו פרמטר של שאילתה continueUrl בקישור העומק של קישור דינמי.
iOSBundleID NSString מגדיר את מזהה החבילה. הפעולה הזו תנסה לפתוח את הקישור באפליקציה של Apple אם מותקן. האפליקציה צריכה להיות רשומה במסוף.
androidPackageName NSString הגדרת שם החבילה ל-Android. הפעולה הזו תנסה לפתוח את הקישור באפליקציה ל-Android, אם היא מותקנת.
androidInstallIfNotAvailable BOOL מציינת אם להתקין את האפליקציה ל-Android אם המכשיר תומך בה והאפליקציה עדיין לא מותקנת. אם השדה הזה מופיע ללא packageName, תופיע הודעת שגיאה עם הסבר שצריך לציין את packageName יחד עם השדה הזה.
androidMinimumVersion NSString גרסת האפליקציה המינימלית שנתמכת בתהליך הזה. אם המיקום צוינה גרסה ישנה יותר וגרסה ישנה יותר של האפליקציה מותקנת, המשתמש מועבר לחנות Play כדי לשדרג את האפליקציה. האפליקציה ל-Android צריך להיות רשום ב-Play Console.
handleCodeInApp בוליאני אם הקישור לפעולה באימייל ייפתח באפליקציה לנייד או באתר תחילה. ברירת המחדל היא false. אם הערך של הפרמטר הזה מוגדר כ-True, הקישור לקוד הפעולה יישלח כקישור אוניברסלי או כקישור לאפליקציה ל-Android, והאפליקציה תפתח אותו אם היא מותקנת. במקרה של False, הקוד יישלח אל קודם ווידג'ט האינטרנט ואז המשך הוא יפנה לאפליקציה אם מותקנת.
dynamicLinkDomain NSString הגדרת הדומיין (או תת-הדומיין) של הקישור הדינמי שישמש את הקישור הנוכחי, אם הוא אמור להיפתח באמצעות קישורים דינמיים של Firebase. אפשר להגדיר כמה דומיינים של קישורים דינמיים לכל פרויקט, ולכן השדה הזה מאפשר לבחור דומיין אחד באופן מפורש. אם לא צוין הדומיין, נעשה שימוש כברירת מחדל.

בדוגמה הבאה מוסבר איך שולחים קישור אימות באימייל שייפתח קודם באפליקציה לנייד כקישור דינמי של Firebase באמצעות הדומיין המותאם אישית של הקישור הדינמי example.page.link (אפליקציה ל-iOS‏ com.example.ios או אפליקציה ל-Android‏ com.example.android, שבה האפליקציה תותקן אם היא לא מותקנת כבר, והגרסה המינימלית היא 12). קישור העומק יכיל את עומס העבודה של כתובת ה-URL להמשך https://www.example.com/?email=user@example.com.

Swift


var actionCodeSettings =  ActionCodeSettings.init()
actionCodeSettings.canHandleInApp = true
let user = Auth.auth().currentUser()
actionCodeSettings.URL =
    String(format: "https://www.example.com/?email=%@", user.email)
actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier!
actionCodeSettings.setAndroidPakageName("com.example.android",
                                         installIfNotAvailable:true,
                                         minimumVersion:"12")
// When multiple custom dynamic link domains are defined, specify which one to use.
actionCodeSettings.dynamicLinkDomain = "example.page.link"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Objective-C

 FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
 actionCodeSettings.handleCodeInApp = YES;
 FIRUser *user = [FIRAuth auth].currentUser;
 NSString *urlString =
     [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email];
 actionCodeSettings.URL = [NSURL URLWithString:urlString];
 actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
 // When multiple custom dynamic link domains are defined, specify which one to use.
 actionCodeSettings.dynamicLinkDomain = @"example.page.link";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"
                     installIfNotAvailable:YES
                            minimumVersion:'12'];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

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

  1. הפעלת קישורים דינמיים ב-Firebase:

    1. במסוף Firebase, פותחים את הקטע Dynamic Links.
    2. אם עדיין לא אישרתם את התנאים של Dynamic Links ויצרתם דומיין Dynamic Links, עליכם לעשות זאת עכשיו.

      אם כבר יצרתם דומיין של Dynamic Links, כדאי לרשום אותו. דומיין Dynamic Links נראה בדרך כלל כמו בדוגמה הבאה:

      example.page.link

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

  2. הגדרת אפליקציות ל-Android:

    1. אם בכוונתך לטפל בקישורים האלה מהאפליקציה ל-Android, יש לציין את שם החבילה ב-Android במסוף Firebase הגדרות הפרויקט. בנוסף, צריך לספק את SHA-1 ו-SHA-256 של אישור האפליקציה.
    2. בנוסף, תצטרכו להגדיר את מסנן ה-Intent לקישור העומק בקובץ AndroidManifest.xml.
    3. מידע נוסף בנושא זה זמין קבלת הוראות בנוגע לקישורים דינמיים ל-Android.
  3. הגדרת אפליקציות של Apple:

    1. אם בכוונתך לטפל בקישורים האלה מתוך האפליקציה שלך, יש לציין את מזהה החבילה במסוף Firebase הגדרות הפרויקט. בנוסף, מזהה App Store ומפתח Apple צריך לציין גם את מזהה הצוות.
    2. צריך גם להגדיר את דומיין הקישור האוניברסלי של FDL גם הדומיין המשויך ביכולות האפליקציה שלך.
    3. אם אתם מתכננים להפיץ את האפליקציה לגרסאות iOS 8 ומטה, תצטרכו להגדיר את מזהה החבילה כסכימה בהתאמה אישית לכתובות URL נכנסות.
    4. מידע נוסף זמין במאמר קבלת קישורים דינמיים בפלטפורמות של Apple.

טיפול בפעולות אימייל באפליקציית אינטרנט

אפשר לציין אם ברצונך לטפל בקישור לקוד הפעולה מהאינטרנט של האפליקציה תחילה ואז הפניה אוטומטית לדף אינטרנט אחר או לאפליקציה אחרת לנייד לאחר השלמתה בהצלחה, בתנאי שהאפליקציה לנייד זמינה. כדי לעשות זאת, מגדירים את handleCodeInApp כ-false באובייקט FIRActionCodeSettings (Obj-C) או ActionCodeSettings (Swift). בזמן מזהה חבילה או שם חבילה ב-Android, ציון השם יאפשר למשתמש כדי להפנות חזרה לאפליקציה שצוינה לאחר השלמת קוד פעולה באימייל.

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

במקרה כזה, הקישור בפרמטר השאילתה continueURL יהיה קישור FDL שהמטען הייעודי שלו הוא URL שצוין באובייקט ActionCodeSettings. אתם יכולים ליירט את הקישור הנכנס מהאפליקציה שלכם ולטפל בו ללא תלות נוספת, אבל מומלץ להשתמש בספריית הלקוח של FDL כדי לנתח את הקישור לעומק.

בעת טיפול בפעולות אימייל כמו אימות אימייל, קוד הפעולה מ- צריך לנתח פרמטר שאילתה אחד (oobCode) מקישור העומק ואז להחיל אותו דרך applyActionCode כדי שהשינוי ייכנס לתוקף, כלומר אימייל לאימות.

טיפול בפעולות אימייל באפליקציה לנייד

אתם יכולים לציין אם אתם רוצים לטפל בקישור של קוד הפעולה באפליקציה לנייד קודם, בתנאי שהיא מותקנת. עם אפליקציות ל-Android, אפשר גם לציין באמצעות androidInstallIfNotAvailable יש להתקין את האפליקציה אם המכשיר תומך בה והיא עדיין לא מותקנת מותקנת. אם הקישור נלחץ ממכשיר שלא תומך באפליקציה לנייד, הוא נפתח מדף אינטרנט במקום זאת. כדי לעשות זאת, מגדירים את handleCodeInApp כ-true באובייקט FIRActionCodeSettings (Obj-C) או ActionCodeSettings (Swift). גם שם החבילה או מזהה החבילה של האפליקציה לנייד צריך להיות צוינה.כתובת האתר החלופית שמשמשת כאן, כאשר אין אפליקציה לנייד זמינה, היא את ההגדרה שהוגדרה בקטע 'תבניות פעולה באימייל'. ברירת מחדל היא מוקצה לכל הפרויקטים. במאמר התאמה אישית של טיפול בהודעות אימייל מוסבר איך להתאים אישית את הטיפול בפעולות אימייל.

במקרה כזה, הקישור לאפליקציה לנייד שיישלח למשתמש יהיה קישור FDL המטען הייעודי (Payload) הוא כתובת ה-URL של קוד הפעולה, שמוגדרת במסוף, עם השאילתה הפרמטרים oobCode, mode, apiKey ו-continueUrl. הערך השני יהיה URL המקורי שצוין באובייקט FIRActionCodeSettings (Obj-C) או באובייקט ActionCodeSettings (Swift). אתם יכולים ליירט את הקישור הנכנס מהאפליקציה ולטפל בו בלי תלות נוספת, אבל מומלץ להשתמש בספריית הלקוח של FDL כדי לנתח את הקישור לעומק. אפשר להחיל את קוד הפעולה ישירות מאפליקציה לנייד, בדומה לאופן שבו הוא מטופל בתהליך האינטרנט שמתואר בקטע התאמה אישית של שירותי אימייל.

בעת טיפול בפעולות אימייל כמו אימות אימייל, קוד הפעולה מ- צריך לנתח פרמטר שאילתה אחד (oobCode) מקישור העומק ואז להחיל אותו דרך applyActionCode כדי שהשינוי ייכנס לתוקף, כלומר אימייל לאימות.