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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      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 และรหัสทีมนักพัฒนาซอฟต์แวร์ของ Apple ด้วย
    2. นอกจากนี้ คุณจะต้องกำหนดค่าโดเมน Universal Link ของ FDL เป็นโดเมนที่เชื่อมโยงในความสามารถของแอปพลิเคชัน
    3. หากคุณวางแผนที่จะเผยแพร่แอปพลิเคชันไปยัง iOS เวอร์ชัน 8 และต่ำกว่า คุณจะต้องตั้งค่ารหัสชุด iOS เป็นรูปแบบที่กำหนดเองสำหรับ URL ขาเข้า
    4. ดูข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่วิธีการรับลิงก์แบบไดนามิกของ iOS

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

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

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

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

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

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

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

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

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

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