Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

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

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

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

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

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

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

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

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

ต้องระบุอินสแตนซ์ ActionCodeSettings เมื่อส่งอีเมลรีเซ็ตรหัสผ่านหรืออีเมลยืนยัน สามารถสร้างได้ด้วยคลาส ActionCodeSettings.Builder ที่เกี่ยวข้องซึ่งมีเมธอดต่อไปนี้:

วิธี คำอธิบาย
setUrl(String url)

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

  • เมื่อลิงก์ถูกจัดการในวิดเจ็ตการทำงานบนเว็บ นี่คือลิงก์ในรายละเอียดในพารามิเตอร์เคียวรี continueUrl
  • เมื่อลิงก์ได้รับการจัดการในแอปโดยตรง นี่คือพารามิเตอร์ข้อความค้นหา continueUrl ในลิงก์เชิงลึกของลิงก์ไดนามิก
setIOSBundleId(String iOSBundleId) ตั้งค่า ID บันเดิล iOS การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป iOS หากมีการติดตั้งไว้ แอป iOS จะต้องลงทะเบียนในคอนโซล
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) ตั้งชื่อแพ็คเกจ Android การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Android หากมีการติดตั้งไว้ หากตั้งค่า installIfNotAvailable เป็น true จะระบุว่าจะติดตั้งแอป Android หรือไม่หากอุปกรณ์รองรับและยังไม่ได้ติดตั้งแอป หากมีการระบุเวอร์ชันขั้นต่ำ และติดตั้งแอปเวอร์ชันเก่ากว่า ระบบจะนำผู้ใช้ไปที่ Play Store เพื่ออัปเกรดแอป ต้องลงทะเบียนแอป Android ในคอนโซล
setHandleCodeInApp(boolean status) จะเปิดลิงก์การดำเนินการอีเมลในแอปบนอุปกรณ์เคลื่อนที่หรือเว็บลิงก์ก่อน ค่าดีฟอลต์เป็นเท็จ เมื่อตั้งค่าเป็นจริง ลิงก์รหัสการดำเนินการจะถูกส่งเป็น Universal Link หรือ Android App Link และจะเปิดโดยแอปหากมีการติดตั้ง ในกรณีที่เป็นเท็จ รหัสจะถูกส่งไปยังเว็บวิดเจ็ตก่อน จากนั้นดำเนินการต่อ จะเปลี่ยนเส้นทางไปยังแอปหากติดตั้ง
setDynamicLinkDomain(String dynamicLinkDomain) ตั้งค่าโดเมนลิงก์แบบไดนามิก (หรือโดเมนย่อย) เพื่อใช้สำหรับลิงก์ปัจจุบัน หากจะเปิดโดยใช้ลิงก์แบบไดนามิกของ Firebase เนื่องจากสามารถกำหนดค่าโดเมนลิงก์แบบไดนามิกได้หลายโดเมนต่อโปรเจ็กต์ ฟิลด์นี้จึงให้ความสามารถในการเลือกอย่างชัดแจ้ง หากไม่ได้ระบุไว้ โดเมนแรกจะถูกใช้เป็นค่าเริ่มต้น

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

Kotlin+KTX

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

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

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

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

      example.page.link

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

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

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

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

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

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

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

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

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

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

คุณสามารถระบุได้ว่าคุณต้องการจัดการลิงก์โค้ดการดำเนินการภายในแอปพลิเคชันบนมือถือของคุณก่อนหรือไม่ โดยต้องติดตั้งไว้ ด้วยแอปพลิเคชัน Android คุณยังสามารถระบุผ่านบูลีน installIfNotAvailable ว่าจะติดตั้งแอปหากอุปกรณ์รองรับและยังไม่ได้ติดตั้ง หากมีการคลิกลิงก์จากอุปกรณ์ที่ไม่รองรับแอปพลิเคชันบนมือถือ ลิงก์นั้นจะถูกเปิดจากหน้าเว็บแทน สิ่งนี้ทำได้โดยการเรียก setHandleCodeInApp(true) ในวัตถุ ActionCodeSettings.Builder จะต้องระบุชื่อแพ็กเกจ Android ของแอปพลิเคชันมือถือหรือ iOS Bundle ID ด้วย

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

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

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