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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.");
                }
            }
        });

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.")
            }
        }

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 Console นอกจากนี้ จำเป็นต้องมี SHA-1 และ SHA-256 ของใบรับรองแอปพลิเคชัน
    2. คุณจะต้องกำหนดค่าตัวกรองเจตนาสำหรับลิงก์ในรายละเอียดในไฟล์ AndroidManifest.xml
    3. สำหรับข้อมูลเพิ่มเติม โปรดดูคำแนะนำในการ รับลิงก์แบบไดนามิกของ Android
  3. การกำหนดค่าแอปพลิเคชัน iOS:

    1. หากคุณวางแผนที่จะจัดการลิงก์เหล่านี้จากแอปพลิเคชัน iOS ของคุณ จะต้องระบุ ID ชุด iOS ในการตั้งค่าโปรเจ็กต์ Firebase Console นอกจากนี้ ต้องระบุ App Store ID และ Apple Developer Team ID ด้วย
    2. คุณจะต้องกำหนดค่าโดเมนลิงก์สากล FDL เป็นโดเมนที่เกี่ยวข้องในความสามารถของแอปพลิเคชันของคุณ
    3. หากคุณวางแผนที่จะเผยแพร่แอปพลิเคชันของคุณเป็น iOS เวอร์ชัน 8 หรือต่ำกว่า คุณจะต้องตั้งค่า iOS Bundle ID ของคุณเป็นรูปแบบที่กำหนดเองสำหรับ 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 เพื่อให้การเปลี่ยนแปลงมีผล เช่น อีเมลที่ต้องได้รับการยืนยัน