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

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

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

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

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

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

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

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

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

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

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

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

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

ตัวอย่างต่อไปนี้แสดงวิธีส่งลิงก์ยืนยันอีเมลที่จะเปิดในแอปบนอุปกรณ์เคลื่อนที่ก่อนเป็น Firebase Dynamic Link โดยใช้โดเมนลิงก์แบบไดนามิกที่กำหนดเอง example.page.link (แอป iOS com.example.ios หรือแอป Android com.example.android ที่ระบบจะติดตั้งแอปหากยังไม่ได้ติดตั้งและเวอร์ชันต่ำสุดคือ 12) ไดープลิงก์จะมีเพย์โหลด 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 Dynamic Links เมื่อส่งลิงก์ที่มีไว้เพื่อเปิดในแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ หากต้องการใช้ฟีเจอร์นี้ คุณต้องกําหนดค่าลิงก์แบบไดนามิกในคอนโซล Firebase

  1. เปิดใช้ Firebase Dynamic Links

    1. เปิดส่วน Dynamic Links ในคอนโซล Firebase

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

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

      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 และต่ำกว่า คุณจะต้องตั้งค่ารหัสชุดเป็นรูปแบบที่กำหนดเองสำหรับ URL ที่เข้ามา
    4. ดูข้อมูลเพิ่มเติมได้ที่รับวิธีการลิงก์แบบไดนามิกของแพลตฟอร์ม Apple

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

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

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

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

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

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

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

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

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