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

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

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

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

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

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

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

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

כדי להעביר כתובת URL להמשך בצורה מאובטחת, צריך להוסיף את הדומיין של כתובת ה-URL כדומיין מורשה:

  1. במסוף Firebase, עוברים אל Security (אבטחה) > Authentication (אימות) > הכרטיסייה Settings (הגדרות).

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

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

Swift

פרמטר סוג תיאור
URL מחרוזת

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

  • כשמטפלים בקישור בווידג'טים של פעולות באינטרנט, זהו קישור העומק בפרמטר השאילתה continueUrl.
  • אם הקישור מטופל ישירות באפליקציה, זהו פרמטר השאילתה continueUrl בקישור העומק של הקישור Hosting.
iOSBundleID מחרוזת מגדיר את מזהה החבילה של iOS כדי לעזור ל-Firebase Authentication לקבוע אם ליצור קישור לאינטרנט בלבד או קישור לנייד שנפתח במכשיר Apple
androidPackageName מחרוזת הגדרת שם החבילה של Android כדי לעזור ל-Firebase Authentication לקבוע אם ליצור קישור לאינטרנט בלבד או קישור לנייד שנפתח במכשיר Android
handleCodeInApp בוליאני האם הקישור לפעולה באימייל ייפתח קודם באפליקציה לנייד או בקישור לאינטרנט. ברירת המחדל היא False. אם המדיניות מוגדרת כ-True, הקישור עם קוד הפעולה יישלח כקישור אוניברסלי או כקישור לאפליקציית Android, והאפליקציה תפתח אותו אם היא מותקנת. במקרה של false, הקוד יישלח קודם לווידג'ט האינטרנט, ואז, אם האפליקציה מותקנת, המשתמש יופנה אליה אחרי שימשיך.
linkDomain מחרוזת כשמוגדרים דומיינים מותאמים אישית של קישורי אירוח לפרויקט, צריך לציין באיזה מהם להשתמש כשפותחים את הקישור באפליקציה ספציפית לנייד. אחרת, הדומיין שמוגדר כברירת מחדל נבחר באופן אוטומטי (לדוגמה, PROJECT_ID.firebaseapp.com).
dynamicLinkDomain מחרוזת הוצא משימוש. אל תציינו את הפרמטר הזה.

Objective-C

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

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

  • כשמטפלים בקישור בווידג'טים של פעולות באינטרנט, זהו קישור העומק בפרמטר השאילתה continueUrl.
  • אם הקישור מטופל ישירות באפליקציה, זהו פרמטר השאילתה continueUrl בקישור העומק של הקישור Hosting.
iOSBundleID NSString ההגדרה הזו קובעת את מזהה החבילה ב-iOS כדי לעזור ל-Firebase Authentication לקבוע אם ליצור קישור לאינטרנט בלבד או קישור לנייד שנפתח במכשיר Android או Apple
androidPackageName NSString הגדרת שם החבילה ב-Android כדי לעזור ל-Firebase Authentication לקבוע אם ליצור קישור לאינטרנט בלבד או קישור לנייד שנפתח במכשיר Android או Apple
handleCodeInApp BOOL האם הקישור לפעולה באימייל ייפתח קודם באפליקציה לנייד או בקישור לאינטרנט. ברירת המחדל היא False. אם המדיניות מוגדרת כ-True, הקישור עם קוד הפעולה יישלח כקישור אוניברסלי או כקישור לאפליקציית Android, והאפליקציה תפתח אותו אם היא מותקנת. במקרה של false, הקוד יישלח קודם לווידג'ט האינטרנט, ואז, אם האפליקציה מותקנת, המשתמש יופנה אליה אחרי שימשיך.
linkDomain NSString אם מוגדרים דומיינים מותאמים אישית של קישורים לפרויקט Hosting, צריך לציין באיזה דומיין להשתמש כשפותחים את הקישור באפליקציה ספציפית לנייד. אחרת, הדומיין שמוגדר כברירת מחדל נבחר אוטומטית (לדוגמה, PROJECT_ID.firebaseapp.com).
dynamicLinkDomain NSString הוצא משימוש. אל תציינו את הפרמטר הזה.

בדוגמה הבאה מוסבר איך לשלוח קישור לאימות כתובת אימייל שייפתח קודם באפליקציה לנייד באמצעות דומיין הקישור המותאם אישית Hostingcustom-domain.com. קישור העומק יכיל את מטען הנתונים של כתובת ה-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")
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
actionCodeSettings.linkDomain = "custom-domain.com"
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;
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
 actionCodeSettings.linkDomain = @"custom-domain.com";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

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

  1. הגדרת אפליקציות של Apple:

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

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

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

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

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

במקרה כזה, הקישור בפרמטר השאילתה continueURL יהיה קישור Hosting שהמטען הייעודי שלו הוא URL שצוין באובייקט ActionCodeSettings.

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

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

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

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

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