ผ่านสถานะในการดำเนินการอีเมล

คุณสามารถส่งสถานะผ่าน URL ดำเนินการต่อได้เมื่อส่งการดำเนินการทางอีเมลเพื่อรีเซ็ตรหัสผ่านหรือยืนยันอีเมลของผู้ใช้ สิ่งนี้ทำให้ผู้ใช้สามารถกลับไปยังแอปได้หลังจากการดำเนินการเสร็จสิ้น นอกจากนี้ คุณยังสามารถระบุได้ว่าจะจัดการลิงก์การดำเนินการอีเมลโดยตรงจากแอปพลิเคชันมือถือหรือไม่ เมื่อติดตั้งแทนหน้าเว็บ

สิ่งนี้มีประโยชน์อย่างยิ่งในสถานการณ์ทั่วไปต่อไปนี้:

  • ผู้ใช้ที่ไม่ได้เข้าสู่ระบบอยู่ในขณะนี้อาจพยายามเข้าถึงเนื้อหาที่กำหนดให้ผู้ใช้ต้องลงชื่อเข้าใช้ อย่างไรก็ตาม ผู้ใช้อาจลืมรหัสผ่าน จึงทำให้เกิดขั้นตอนการรีเซ็ตรหัสผ่าน เมื่อสิ้นสุดโฟลว์ ผู้ใช้คาดว่าจะกลับไปยังส่วนของแอปที่พวกเขาพยายามเข้าถึง

  • แอปพลิเคชันอาจเสนอการเข้าถึงบัญชีที่ตรวจสอบแล้วเท่านั้น ตัวอย่างเช่น แอปจดหมายข่าวอาจกำหนดให้ผู้ใช้ยืนยันอีเมลก่อนสมัคร ผู้ใช้จะต้องทำตามขั้นตอนการยืนยันอีเมลและคาดว่าจะถูกส่งกลับไปยังแอปเพื่อดำเนินการสมัครสมาชิกให้เสร็จสมบูรณ์

  • โดยทั่วไป เมื่อผู้ใช้เริ่มการรีเซ็ตรหัสผ่านหรือขั้นตอนการยืนยันอีเมลในแอพ Apple พวกเขาคาดหวังว่าจะดำเนินการขั้นตอนภายในแอพให้เสร็จสิ้น ความสามารถในการส่งสถานะผ่าน URL ดำเนินการต่อทำให้สิ่งนี้เป็นไปได้

การมีความสามารถในการส่งสถานะผ่าน URL ดำเนินการต่อถือเป็นคุณลักษณะที่มีประสิทธิภาพที่ Firebase Auth มอบให้และสามารถปรับปรุงประสบการณ์ผู้ใช้ได้อย่างมาก

การส่งผ่านสถานะ/URL ต่อไปในการดำเนินการกับอีเมล

เพื่อที่จะส่ง URL ต่อไปได้อย่างปลอดภัย โดเมนสำหรับ URL จะต้องอยู่ในรายการที่อนุญาตพิเศษใน คอนโซล Firebase ซึ่งทำได้ในส่วน การรับรองความถูกต้อง โดยการเพิ่มโดเมนนี้ลงในรายการ โดเมนที่ได้รับอนุญาต ภายใต้แท็บ วิธีการลงชื่อ เข้าใช้ หากยังไม่มี

ต้องระบุอินสแตนซ์ FIRActionCodeSettings เมื่อส่งอีเมลรีเซ็ตรหัสผ่านหรืออีเมลยืนยัน อินเทอร์เฟซนี้รับพารามิเตอร์ต่อไปนี้:

สวิฟท์

พารามิเตอร์ พิมพ์ คำอธิบาย
URL สตริง

ตั้งค่าลิงก์ (สถานะ/URL ต่อไป) ซึ่งมีความหมายที่แตกต่างกันในบริบทที่แตกต่างกัน:

  • เมื่อลิงก์ได้รับการจัดการในวิดเจ็ตการดำเนินการบนเว็บ นี่คือลิงก์ในรายละเอียดในพารามิเตอร์เคียวรี continueUrl
  • เมื่อลิงก์ได้รับการจัดการในแอปโดยตรง นี่คือพารามิเตอร์การค้นหา continueUrl ในลิงก์ในรายละเอียดของลิงก์แบบไดนามิก
iOSBundleID สตริง ตั้งค่า ID บันเดิล การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Apple หากมีการติดตั้งไว้ แอปจะต้องลงทะเบียนในคอนโซล หากไม่มีการระบุ Bundle ID ค่าของฟิลด์นี้จะถูกตั้งค่าเป็น ID บันเดิลของบันเดิลหลักของแอป
androidPackageName สตริง ตั้งชื่อแพ็คเกจ Android การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Android หากติดตั้งไว้
androidInstallIfNotAvailable บูล ระบุว่าจะติดตั้งแอป Android หรือไม่หากอุปกรณ์รองรับและยังไม่ได้ติดตั้งแอป หากระบุช่องนี้โดยไม่มี packageName ระบบจะแสดงข้อผิดพลาดโดยอธิบายว่าต้องระบุ packageName ร่วมกับช่องนี้
androidMinimumVersion สตริง เวอร์ชันขั้นต่ำของแอปที่รองรับในโฟลว์นี้ หากมีการระบุเวอร์ชันขั้นต่ำและติดตั้งแอปเวอร์ชันเก่า ระบบจะนำผู้ใช้ไปที่ Play Store เพื่ออัปเกรดแอป แอป Android จำเป็นต้องลงทะเบียนในคอนโซล
handleCodeInApp บูล ไม่ว่าลิงก์การดำเนินการอีเมลจะเปิดในแอปบนมือถือหรือเว็บลิงก์ก่อน ค่าเริ่มต้นเป็นเท็จ เมื่อตั้งค่าเป็นจริง ลิงก์โค้ดการดำเนินการจะถูกส่งเป็น Universal Link หรือ Android App Link และจะเปิดโดยแอปหากติดตั้งไว้ ในกรณีที่เป็นเท็จ โค้ดจะถูกส่งไปยังเว็บวิดเจ็ตก่อน จากนั้นดำเนินการต่อจะเปลี่ยนเส้นทางไปยังแอปหากติดตั้งไว้
dynamicLinkDomain สตริง ตั้งค่าโดเมนลิงก์แบบไดนามิก (หรือโดเมนย่อย) เพื่อใช้สำหรับลิงก์ปัจจุบัน หากต้องการเปิดโดยใช้ Firebase Dynamic Links เนื่องจากสามารถกำหนดค่าโดเมนลิงก์แบบไดนามิกได้หลายโดเมนต่อโปรเจ็กต์ ฟิลด์นี้จึงทำให้สามารถเลือกโดเมนได้อย่างชัดเจน หากไม่มีการระบุ โดเมนแรกจะถูกใช้เป็นค่าเริ่มต้น

วัตถุประสงค์-C

พารามิเตอร์ พิมพ์ คำอธิบาย
URL NSString

ตั้งค่าลิงก์ (สถานะ/URL ต่อไป) ซึ่งมีความหมายที่แตกต่างกันในบริบทที่แตกต่างกัน:

  • เมื่อลิงก์ได้รับการจัดการในวิดเจ็ตการดำเนินการบนเว็บ นี่คือลิงก์ในรายละเอียดในพารามิเตอร์เคียวรี continueUrl
  • เมื่อลิงก์ได้รับการจัดการในแอปโดยตรง นี่คือพารามิเตอร์การค้นหา continueUrl ในลิงก์ในรายละเอียดของลิงก์แบบไดนามิก
iOSBundleID NSString ตั้งค่า ID บันเดิล การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Apple หากมีการติดตั้งไว้ แอปจะต้องลงทะเบียนในคอนโซล
androidPackageName NSString ตั้งชื่อแพ็คเกจ Android การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Android หากติดตั้งไว้
androidInstallIfNotAvailable บูล ระบุว่าจะติดตั้งแอป Android หรือไม่หากอุปกรณ์รองรับและยังไม่ได้ติดตั้งแอป หากระบุช่องนี้โดยไม่มี packageName ระบบจะแสดงข้อผิดพลาดโดยอธิบายว่าต้องระบุ packageName ร่วมกับช่องนี้
androidMinimumVersion NSString เวอร์ชันขั้นต่ำของแอปที่รองรับในโฟลว์นี้ หากมีการระบุเวอร์ชันขั้นต่ำและติดตั้งแอปเวอร์ชันเก่า ระบบจะนำผู้ใช้ไปที่ Play Store เพื่ออัปเกรดแอป แอป Android จำเป็นต้องลงทะเบียนในคอนโซล
handleCodeInApp บูล ไม่ว่าลิงก์การดำเนินการอีเมลจะเปิดในแอปบนมือถือหรือเว็บลิงก์ก่อน ค่าเริ่มต้นเป็นเท็จ เมื่อตั้งค่าเป็นจริง ลิงก์โค้ดการดำเนินการจะถูกส่งเป็น Universal Link หรือ Android App Link และจะเปิดโดยแอปหากติดตั้งไว้ ในกรณีที่เป็นเท็จ โค้ดจะถูกส่งไปยังเว็บวิดเจ็ตก่อน จากนั้นดำเนินการต่อจะเปลี่ยนเส้นทางไปยังแอปหากติดตั้งไว้
dynamicLinkDomain NSString ตั้งค่าโดเมนลิงก์แบบไดนามิก (หรือโดเมนย่อย) เพื่อใช้สำหรับลิงก์ปัจจุบัน หากต้องการเปิดโดยใช้ Firebase Dynamic Links เนื่องจากสามารถกำหนดค่าโดเมนลิงก์แบบไดนามิกได้หลายโดเมนต่อโปรเจ็กต์ ฟิลด์นี้จึงทำให้สามารถเลือกโดเมนได้อย่างชัดเจน หากไม่มีการระบุ โดเมนแรกจะถูกใช้เป็นค่าเริ่มต้น

ตัวอย่างต่อไปนี้แสดงวิธีส่งลิงก์ยืนยันอีเมลที่จะเปิดในแอปบนอุปกรณ์เคลื่อนที่ก่อนเป็น Firebase Dynamic Link โดยใช้โดเมนลิงก์แบบไดนามิกที่กำหนดเอง example.page.link (แอป iOS com.example.ios หรือแอป Android com.example.android โดยที่แอปจะติดตั้งหากยังไม่ได้ติดตั้งและเวอร์ชันขั้นต่ำคือ 12 ) ลิงก์ในรายละเอียดจะมีเพย์โหลด URL ดำเนินการต่อ https://www.example.com/?email=user@example.com

สวิฟท์


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.
})

วัตถุประสงค์-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 Dynamic Links เมื่อส่งลิงก์ที่มีไว้เพื่อเปิดในแอปพลิเคชันมือถือ หากต้องการใช้ฟีเจอร์นี้ จำเป็นต้องกำหนดค่าลิงก์แบบไดนามิกในคอนโซล Firebase

  1. เปิดใช้งานลิงก์ไดนามิกของ Firebase:

    1. ใน คอนโซล Firebase ให้เปิดส่วน ลิงก์แบบไดนามิก
    2. หากคุณยังไม่ได้ยอมรับข้อกำหนดของลิงก์แบบไดนามิกและสร้างโดเมนลิงก์แบบไดนามิก ให้ดำเนินการทันที

      หากคุณสร้างโดเมน Dynamic Links แล้ว โปรดจดบันทึกไว้ โดยทั่วไปโดเมนลิงก์แบบไดนามิกจะมีลักษณะเหมือนตัวอย่างต่อไปนี้:

      example.page.link

      คุณจะต้องใช้ค่านี้เมื่อกำหนดค่าแอป Apple หรือ Android เพื่อสกัดกั้นลิงก์ขาเข้า

  2. การกำหนดค่าแอปพลิเคชัน Android:

    1. หากคุณวางแผนที่จะจัดการลิงก์เหล่านี้จากแอปพลิเคชัน Android ของคุณ จะต้องระบุชื่อแพ็กเกจ Android ในการตั้งค่าโปรเจ็กต์คอนโซล Firebase นอกจากนี้ จำเป็นต้องจัดเตรียมใบรับรองการสมัคร SHA-1 และ SHA-256 ด้วย
    2. นอกจากนี้ คุณจะต้องกำหนดค่าตัวกรอง Intent สำหรับ Deep Link ในไฟล์ AndroidManifest.xml ของคุณด้วย
    3. สำหรับข้อมูลเพิ่มเติม โปรดดู คำแนะนำในการรับลิงก์แบบไดนามิกของ Android
  3. การกำหนดค่าแอปพลิเคชัน Apple:

    1. หากคุณวางแผนที่จะจัดการลิงก์เหล่านี้จากแอปพลิเคชันของคุณ จะต้องระบุรหัสบันเดิลในการตั้งค่าโปรเจ็กต์คอนโซล Firebase นอกจากนี้ จำเป็นต้องระบุ App Store ID และ Apple Developer Team ID ด้วย
    2. คุณจะต้องกำหนดค่าโดเมนลิงก์สากล FDL เป็นโดเมนที่เกี่ยวข้องในความสามารถของแอปพลิเคชันของคุณ
    3. หากคุณวางแผนที่จะเผยแพร่แอปพลิเคชันของคุณไปยัง iOS เวอร์ชัน 8 และต่ำกว่า คุณจะต้องตั้งค่า ID บันเดิลของคุณเป็นรูปแบบที่กำหนดเองสำหรับ URL ที่เข้ามา
    4. สำหรับข้อมูลเพิ่มเติม โปรดดู คำแนะนำการรับลิงก์ไดนามิกของแพลตฟอร์ม Apple

การจัดการการดำเนินการอีเมลในเว็บแอปพลิเคชัน

คุณสามารถระบุว่าคุณต้องการจัดการลิงก์โค้ดการดำเนินการจากเว็บแอปพลิเคชันก่อน จากนั้นจึงเปลี่ยนเส้นทางไปยังเว็บเพจหรือแอปพลิเคชันมือถืออื่นหลังจากดำเนินการเสร็จสิ้น โดยที่แอปพลิเคชันบนมือถือพร้อมใช้งาน ซึ่งทำได้โดยการตั้ง handleCodeInApp เป็น false ในวัตถุ FIRActionCodeSettings (Obj-C) หรือ ActionCodeSettings (Swift) แม้ว่าไม่จำเป็นต้องใช้รหัสบันเดิลหรือชื่อแพ็กเกจ Android แต่การระบุจะทำให้ผู้ใช้เปลี่ยนเส้นทางกลับไปยังแอปที่ระบุได้เมื่อกรอกโค้ดการดำเนินการอีเมลให้สมบูรณ์

URL ของเว็บที่ใช้ที่นี่เป็น URL ที่กำหนดค่าในส่วนเทมเพลตการดำเนินการอีเมล ค่าเริ่มต้นจะถูกจัดเตรียมให้กับทุกโปรเจ็กต์ โปรดดู การปรับแต่งตัวจัดการอีเมล เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีปรับแต่งตัวจัดการการดำเนินการกับอีเมล

ในกรณีนี้ ลิงก์ภายในพารามิเตอร์การสืบค้น continueURL จะเป็นลิงก์ FDL ซึ่งมีเพย์โหลดเป็น URL ที่ระบุในออบเจ็กต์ ActionCodeSettings แม้ว่าคุณจะสามารถสกัดกั้นและจัดการลิงก์ขาเข้าจากแอปของคุณได้โดยไม่ต้องพึ่งพาเพิ่มเติม แต่เราขอแนะนำให้ใช้ไลบรารีไคลเอ็นต์ FDL เพื่อแยกวิเคราะห์ลิงก์ในรายละเอียดให้กับคุณ

เมื่อจัดการการดำเนินการกับอีเมล เช่น การยืนยันอีเมล โค้ดการดำเนินการจากพารามิเตอร์การค้นหา oobCode จะต้องได้รับการแยกวิเคราะห์จากลิงก์ในรายละเอียด จากนั้นจึงใช้ผ่าน applyActionCode เพื่อให้การเปลี่ยนแปลงมีผล เช่น อีเมลที่จะได้รับการยืนยัน

การจัดการการดำเนินการกับอีเมลในแอปพลิเคชันมือถือ

คุณสามารถระบุว่าคุณต้องการจัดการลิงก์โค้ดการดำเนินการภายในแอปพลิเคชันมือถือของคุณก่อนหรือไม่ หากมีการติดตั้งไว้ ด้วยแอปพลิเคชัน Android คุณยังสามารถระบุผ่าน androidInstallIfNotAvailable ได้ว่าจะต้องติดตั้งแอปหากอุปกรณ์รองรับและยังไม่ได้ติดตั้ง หากคลิกลิงก์จากอุปกรณ์ที่ไม่รองรับแอปพลิเคชันมือถือ ลิงก์นั้นจะถูกเปิดจากหน้าเว็บแทน ซึ่งทำได้โดยการตั้ง handleCodeInApp ให้ true ในวัตถุ FIRActionCodeSettings (Obj-C) หรือ ActionCodeSettings (Swift) จะต้องระบุชื่อแพ็คเกจ Android หรือรหัสบันเดิลของแอปพลิเคชันมือถือด้วย URL เว็บสำรองที่ใช้ที่นี่ เมื่อไม่มีแอปมือถือคือ URL ที่กำหนดค่าในส่วนเทมเพลตการดำเนินการอีเมล ค่าเริ่มต้นจะถูกจัดเตรียมให้กับทุกโปรเจ็กต์ โปรดดู การปรับแต่งตัวจัดการอีเมล เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีปรับแต่งตัวจัดการการดำเนินการกับอีเมล

ในกรณีนี้ ลิงก์แอปบนอุปกรณ์เคลื่อนที่ที่ส่งถึงผู้ใช้จะเป็นลิงก์ FDL ซึ่งมีเพย์โหลดเป็น URL โค้ดการดำเนินการที่ได้รับการกำหนดค่าในคอนโซล พร้อมด้วยพารามิเตอร์การค้นหา oobCode , mode , apiKey และ continueUrl ส่วนหลังจะเป็น URL ดั้งเดิมที่ระบุในวัตถุ FIRActionCodeSettings (Obj-C) หรือ ActionCodeSettings (Swift) แม้ว่าคุณจะสามารถสกัดกั้นและจัดการลิงก์ขาเข้าจากแอปของคุณได้โดยไม่ต้องพึ่งพาเพิ่มเติม แต่เราขอแนะนำให้ใช้ไลบรารีไคลเอ็นต์ FDL เพื่อแยกวิเคราะห์ลิงก์ในรายละเอียดให้กับคุณ รหัสการดำเนินการสามารถนำมาใช้ได้โดยตรงจากแอปพลิเคชันมือถือ เช่นเดียวกับวิธีจัดการจากโฟลว์เว็บที่อธิบายไว้ในส่วน การปรับแต่งตัวจัดการอีเมล

เมื่อจัดการการดำเนินการกับอีเมล เช่น การยืนยันอีเมล โค้ดการดำเนินการจากพารามิเตอร์การค้นหา oobCode จะต้องได้รับการแยกวิเคราะห์จากลิงก์ในรายละเอียด จากนั้นจึงใช้ผ่าน applyActionCode เพื่อให้การเปลี่ยนแปลงมีผล เช่น อีเมลที่จะได้รับการยืนยัน