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

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

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

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

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

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

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

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

หากต้องการส่งต่อ URL สำหรับดำเนินการต่ออย่างปลอดภัย คุณต้องเพิ่มโดเมนของ URL เป็นโดเมนที่ได้รับอนุญาต โดยทำดังนี้

  1. ในคอนโซลFirebase ให้ไปที่แท็บ ความปลอดภัย > การตรวจสอบสิทธิ์ > การตั้งค่า

  2. ในส่วนโดเมนที่ได้รับอนุญาต ให้คลิกเพิ่มโดเมน แล้วเพิ่ม URL

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

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

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

  • เมื่อมีการจัดการลิงก์ในวิดเจ็ตการดำเนินการบนเว็บ ลิงก์นี้จะเป็น Deep Link ใน continueUrl พารามิเตอร์การค้นหา
  • เมื่อมีการจัดการลิงก์ในแอปโดยตรง ลิงก์นี้จะเป็น continueUrl พารามิเตอร์การค้นหาใน Deep Link ของ ลิงก์แบบไดนามิก
iOSBundleId สตริง ตั้งค่ารหัสชุด ระบบจะพยายามเปิดลิงก์ในแอป Apple หาก มีการติดตั้ง โดยแอปต้องลงทะเบียนในคอนโซล หากไม่ได้ระบุรหัสชุด ระบบจะตั้งค่าของช่องนี้เป็นรหัสชุดของ ชุดหลักของแอป
androidPackageName สตริง ตั้งค่าชื่อแพ็กเกจ Android ระบบจะพยายามเปิดลิงก์ในแอป Android หากมีการติดตั้ง
androidInstallApp bool ระบุว่าจะติดตั้งแอป Android หรือไม่ หากอุปกรณ์รองรับและยังไม่ได้ติดตั้งแอป หากระบุช่องนี้โดยไม่มี packageName ระบบจะแสดงข้อผิดพลาดที่อธิบายว่าต้องระบุ packageName ร่วมกับช่องนี้
androidMinimumVersion สตริง เวอร์ชันต่ำสุดของแอปที่รองรับในขั้นตอนการทำงานนี้ หากระบุ minimumVersion และมีการติดตั้งแอปเวอร์ชันเก่ากว่า ระบบจะนำผู้ใช้ไปยัง Play Store เพื่ออัปเกรดแอป โดยแอป Android ต้องลงทะเบียนในคอนโซล
handleCodeInApp bool ระบุว่าจะเปิดลิงก์การดำเนินการทางอีเมลในแอปบนอุปกรณ์เคลื่อนที่หรือเว็บ ลิงก์ก่อน ค่าเริ่มต้นคือ "เท็จ" เมื่อตั้งค่าเป็น "จริง" ระบบจะส่งลิงก์รหัสการดำเนินการ เป็น Universal Link หรือ Android App Link และแอปจะเปิดลิงก์หากมีการติดตั้ง ในกรณีที่ตั้งค่าเป็น "เท็จ" ระบบจะส่งรหัสไปยัง วิดเจ็ตเว็บก่อน จากนั้นเมื่อดำเนินการต่อ ระบบจะเปลี่ยนเส้นทางไปยังแอปหากมีการติดตั้ง
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 ที่กำหนดค่าไว้ในส่วนเทมเพลตการดำเนินการทางอีเมล ระบบจะจัดเตรียม URL เริ่มต้นไว้ให้สำหรับทุกโปรเจ็กต์ ดูข้อมูลเพิ่มเติมเกี่ยวกับ วิธีปรับแต่งตัวจัดการการดำเนินการทางอีเมลได้ที่ หัวข้อการปรับแต่งตัวจัดการอีเมล

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

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

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

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

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

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