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

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

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

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

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

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

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

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

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

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

พารามิเตอร์ ประเภท คำอธิบาย
url สตริง

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

  • เมื่อมีการจัดการลิงก์ในวิดเจ็ตการดำเนินการบนเว็บ นี่คือ Deep Link ในพารามิเตอร์การค้นหาของ continueUrl
  • เมื่อมีการจัดการลิงก์ในแอปโดยตรง พารามิเตอร์นี้จะเป็น continueUrl พารามิเตอร์การค้นหาใน Deep Link ของ ลิงก์แบบไดนามิก
iOSBundleId สตริง ตั้งค่ารหัสชุด ซึ่งจะพยายามเปิดลิงก์ในแอปของ Apple หาก ติดตั้งไว้ ต้องลงทะเบียนแอปใน Console หากไม่ได้ระบุ รหัสชุด ระบบจะกำหนดค่าของช่องนี้เป็นรหัสชุดของ Bundle หลักของแอป
androidPackageName สตริง ตั้งชื่อแพ็กเกจ Android ซึ่งจะพยายามเปิดลิงก์ใน แอป Android หากมีการติดตั้ง
androidInstallApp bool ระบุว่าจะติดตั้งแอป Android หรือไม่ หากอุปกรณ์รองรับ และยังไม่ได้ติดตั้งแอป หากระบุฟิลด์นี้โดยไม่มี packageName ระบบจะแสดงข้อผิดพลาดที่อธิบายว่าต้องระบุ packageName ร่วมกับฟิลด์นี้
androidMinimumVersion สตริง เวอร์ชันขั้นต่ำของแอปที่รองรับในขั้นตอนการทำงานนี้ หากระบุ minimumVersion และมีการติดตั้งแอปเวอร์ชันเก่ากว่า ระบบจะนำผู้ใช้ไปยัง Play Store เพื่ออัปเกรดแอป คุณต้องลงทะเบียนแอป Android ใน Console
handleCodeInApp bool ไม่ว่าจะเปิดลิงก์การดำเนินการในอีเมลในแอปบนอุปกรณ์เคลื่อนที่หรือลิงก์เว็บก่อน ค่าเริ่มต้นคือเท็จ เมื่อตั้งค่าเป็น "จริง" ระบบจะส่งลิงก์รหัสการดำเนินการ เป็น Universal Link หรือ App Link ของ Android และแอปจะเปิดลิงก์ หากติดตั้งไว้ ในกรณีที่เป็นเท็จ ระบบจะส่งรหัสไปยัง วิดเจ็ตบนเว็บก่อน จากนั้นเมื่อดำเนินการต่อ ระบบจะเปลี่ยนเส้นทางไปยังแอปหาก ติดตั้งไว้
dynamicLinkDomain สตริง (เลิกใช้งานแล้ว ให้ใช้ `linkDomain`) ตั้งค่าโดเมน (หรือโดเมนย่อย) ของลิงก์แบบไดนามิกที่จะใช้สำหรับลิงก์ปัจจุบัน หากจะเปิดโดยใช้ลิงก์แบบไดนามิกของ Firebase เนื่องจากกำหนดค่าโดเมนลิงก์แบบไดนามิกหลายโดเมนต่อโปรเจ็กต์ได้ ช่องนี้จึงช่วยให้คุณเลือกโดเมนได้อย่างชัดเจน หากไม่ได้ระบุ ระบบจะใช้โดเมนแรกเป็นค่าเริ่มต้น linkDomain สตริง โดเมนโฮสติ้งของ Firebase ที่กำหนดเองซึ่งไม่บังคับเพื่อใช้เมื่อเปิดลิงก์ผ่านแอปบนอุปกรณ์เคลื่อนที่ที่ระบุ คุณต้องกำหนดค่าโดเมนในโฮสติ้งของ Firebase และโปรเจ็กต์ต้องเป็นเจ้าของโดเมน โดเมนนี้ต้องไม่ใช่โดเมนโฮสติ้งเริ่มต้น (`web.app` หรือ `firebaseapp.com`) การตั้งค่านี้จะแทนที่การตั้งค่า `dynamicLinkDomain` ที่เลิกใช้งานแล้ว

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

final user = FirebaseAuth.instance.currentUser;

final actionCodeSettings = ActionCodeSettings(
  url: "http://www.example.com/verify?email=${user?.email}",
  iOSBundleId: "com.example.ios",
  androidPackageName: "com.example.android",
);

await user?.sendEmailVerification(actionCodeSettings);

Firebase Auth ใช้ลิงก์แบบไดนามิกของ Firebase เมื่อส่งลิงก์ที่ตั้งใจให้เปิดในแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ หากต้องการใช้ฟีเจอร์นี้ คุณต้องกำหนดค่าลิงก์แบบไดนามิกในคอนโซล Firebase

  1. วิธีเปิดใช้ลิงก์แบบไดนามิกของ Firebase

    1. เปิดส่วนลิงก์แบบไดนามิกในคอนโซล Firebase

    2. หากยังไม่ได้ยอมรับข้อกำหนดของลิงก์แบบไดนามิกและสร้างโดเมนลิงก์แบบไดนามิก ให้ดำเนินการเลย

    3. หากสร้างโดเมนของลิงก์แบบไดนามิกแล้ว ให้จดบันทึกไว้ โดเมนของลิงก์แบบไดนามิก มักจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้

      example.page.link

    4. คุณจะต้องใช้ค่านี้เมื่อกำหนดค่าแอป 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 และรหัสทีมของนักพัฒนาแอป Apple ด้วย
    2. นอกจากนี้ คุณยังต้องกำหนดค่าโดเมน Universal Link ของ FDL เป็น โดเมนที่เชื่อมโยงในความสามารถของแอปพลิเคชันด้วย
    3. หากวางแผนที่จะเผยแพร่แอปพลิเคชันไปยัง iOS เวอร์ชัน 8 และต่ำกว่า คุณจะต้องตั้งค่ารหัสชุดเป็น Scheme ที่กำหนดเองสำหรับ URL ขาเข้า
    4. ดูข้อมูลเพิ่มเติมได้ที่วิธีการรับลิงก์แบบไดนามิกของแพลตฟอร์ม Apple

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

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

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

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

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

การจัดการการดำเนินการทางอีเมลในแอปพลิเคชันบนอุปกรณ์เคลื่อนที่

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

ในกรณีนี้ ลิงก์แอปบนอุปกรณ์เคลื่อนที่ที่ส่งไปยังผู้ใช้จะเป็นลิงก์ FDL ซึ่งมีเพย์โหลดเป็น URL ของรหัสการดำเนินการที่กำหนดค่าไว้ใน Console โดยมีพารามิเตอร์การค้นหา oobCode, mode, apiKey และ continueUrl โดยค่าหลังจะเป็น URL เดิมที่ระบุไว้ในออบเจ็กต์ ActionCodeSettings แม้ว่าคุณจะสกัดกั้นและจัดการลิงก์ขาเข้าจากแอปได้โดยไม่ต้องมีทรัพยากร Dependency เพิ่มเติม แต่เราขอแนะนำให้ใช้ไลบรารีของไคลเอ็นต์ FDL เพื่อแยกวิเคราะห์ Deep Link ให้คุณ คุณสามารถใช้รหัสการดำเนินการได้โดยตรงจากแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ในลักษณะเดียวกับที่จัดการจาก ขั้นตอนบนเว็บที่อธิบายไว้ในส่วนการปรับแต่งตัวแฮนเดิลอีเมล

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