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

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

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

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

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

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

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

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

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

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

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

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

שיטה תיאור
setUrl(String url)

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

  • כשמטפלים בקישור בווידג'טים של פעולות באתר, זהו קישור העומק בפרמטר השאילתה continueUrl.
  • אם הקישור מטופל ישירות באפליקציה, זהו פרמטר השאילתה continueUrl בקישור העומק של הקישור Hosting.
setIOSBundleId(String iOSBundleId) הגדרת מזהה חבילת ה-iOS כדי לעזור ל-Firebase Authentication לקבוע אם ליצור קישור לאינטרנט בלבד או קישור לנייד, שנפתח במכשיר Apple
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) הגדרת שם החבילה של Android כדי לעזור ל-Firebase Authentication לקבוע אם ליצור קישור לאינטרנט בלבד או קישור לנייד שנפתח במכשיר Android
setHandleCodeInApp(boolean status) האם הקישור לפעולה באימייל ייפתח קודם באפליקציה לנייד או בקישור לאינטרנט. ברירת המחדל היא false. אם המדיניות מוגדרת כ-True, הקישור עם קוד הפעולה יישלח כקישור אוניברסלי או כקישור לאפליקציית Android, והאפליקציה תפתח אותו אם היא מותקנת. במקרה של false, הקוד יישלח קודם לווידג'ט האינטרנט, ואז, אם האפליקציה מותקנת, המשתמש יופנה אליה אחרי שימשיך.
setLinkDomain(String customDomain) אם מוגדרים דומיינים מותאמים אישית של קישורים לפרויקט Hosting, צריך לציין באיזה דומיין להשתמש כשפותחים את הקישור באפליקציה ספציפית לנייד. אחרת, הדומיין שמוגדר כברירת מחדל נבחר אוטומטית (לדוגמה, PROJECT_ID.firebaseapp.com).
setDynamicLinkDomain(String dynamicLinkDomain) הוצא משימוש. אל תציינו את הפרמטר הזה.

הדוגמה הבאה ממחישה איך לשלוח קישור לאימות כתובת אימייל שייפתח קודם באפליקציה לנייד. קישור העומק יכיל את מטען הייעודי (payload) של כתובת ה-URL להמשך http://www.example.com/verify?uid=1234.

Kotlin

val auth = Firebase.auth
val user = auth.currentUser!!

val url = "http://www.example.com/verify?uid=" + user.uid
val actionCodeSettings = ActionCodeSettings.newBuilder()
    .setUrl(url)
    .setIOSBundleId("com.example.ios")
    // The default for this is populated with the current android package name.
    .setAndroidPackageName("com.example.android", false, null)
    .build()

user.sendEmailVerification(actionCodeSettings)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Email sent.")
        }
    }

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

String url = "http://www.example.com/verify?uid=" + user.getUid();
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
        .setUrl(url)
        .setIOSBundleId("com.example.ios")
        // The default for this is populated with the current android package name.
        .setAndroidPackageName("com.example.android", false, null)
        .build();

user.sendEmailVerification(actionCodeSettings)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

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

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

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

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

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

אתם יכולים לציין אם אתם רוצים לטפל בקישור של קוד הפעולה קודם באפליקציית אינטרנט ואז להפנות מחדש לדף אינטרנט אחר או לאפליקציה לנייד אחרי השלמה מוצלחת, בתנאי שהאפליקציה לנייד זמינה. כדי לעשות את זה, מפעילים את השיטה setHandleCodeInApp(false) באובייקט ActionCodeSettings.Builder. לא חובה לציין מזהה חבילה ב-iOS או שם חבילה ב-Android, אבל אם תציינו אותם, המשתמש יוכל לחזור לאפליקציה שצוינה אחרי השלמת קוד הפעולה באימייל.

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

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

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

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

אתם יכולים לציין אם אתם רוצים לטפל קודם בקישור עם קוד הפעולה באפליקציה לנייד, בתנאי שהיא מותקנת. אם לוחצים על הקישור ממכשיר שלא תומך באפליקציה לנייד, הקישור ייפתח מדף אינטרנט. כדי לעשות את זה, קוראים ל-setHandleCodeInApp(true) באובייקט ActionCodeSettings.Builder. צריך לציין גם את שם החבילה ל-Android או את מזהה החבילה ל-iOS של האפליקציה לנייד.

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

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

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