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

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

ตัวอย่างต่อไปนี้แสดงวิธีส่งลิงก์ยืนยันอีเมลที่จะเปิดในแอปบนอุปกรณ์เคลื่อนที่ก่อนเป็น 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 แล้ว โปรดจดบันทึกไว้ โดยทั่วไปโดเมนลิงก์แบบไดนามิกจะมีลักษณะเหมือนตัวอย่างต่อไปนี้:

      example.page.link

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

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

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

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

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

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

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

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

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

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

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

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

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

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