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

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

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

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

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

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

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

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

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

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

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

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

  • เมื่อมีการจัดการลิงก์ในวิดเจ็ตการดำเนินการบนเว็บ นี่คือ Deep Link ในพารามิเตอร์การค้นหา continueUrl
  • เมื่อมีการจัดการลิงก์ในแอปโดยตรง นี่จะเป็นพารามิเตอร์การค้นหา continueUrl ใน Deep Link ของลิงก์แบบไดนามิก
setIOSBundleId(String iOSBundleId) ตั้งค่ารหัสชุด iOS การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป iOS หากมีการติดตั้งไว้ ต้องลงทะเบียนแอป iOS ใน Console
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) ตั้งชื่อแพ็กเกจ Android การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Android หากมีการติดตั้งไว้ หากตั้งค่า installIfNotAvailable เป็น true จะเป็นการระบุว่าจะติดตั้งแอป Android หรือไม่ หากอุปกรณ์รองรับและไม่ได้ติดตั้งแอปนั้นไว้ หากระบุminimumVersion และติดตั้งแอปเวอร์ชันเก่าไว้ ระบบจะนำผู้ใช้ไปที่ 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 ID และรหัสทีมนักพัฒนาซอฟต์แวร์ของ Apple
    2. นอกจากนี้คุณจะต้องกำหนดค่าโดเมน Universal Link ของ FDL เป็นโดเมนที่เชื่อมโยงในความสามารถของแอปพลิเคชันของคุณ
    3. หากคุณวางแผนที่จะเผยแพร่แอปไปยัง iOS เวอร์ชัน 8 และต่ำกว่า คุณจะต้องตั้งค่ารหัสชุด iOS เป็นรูปแบบที่กำหนดเองสำหรับ URL ขาเข้า
    4. ดูข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในวิธีการรับลิงก์แบบไดนามิกของ iOS

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

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

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

ในกรณีนี้ ลิงก์ภายในพารามิเตอร์การค้นหา continueUrl จะเป็นลิงก์ FDL ที่มีเพย์โหลด URL ที่ระบุไว้ในออบเจ็กต์ ActionCodeSettings แม้ว่าคุณจะสกัดกั้นและจัดการลิงก์ขาเข้าจากแอปได้โดยไม่ต้องอาศัยทรัพยากรเพิ่มเติมใดๆ แต่เราขอแนะนำให้ใช้ไลบรารีของไคลเอ็นต์ 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 เพื่อให้การเปลี่ยนแปลงมีผล กล่าวคือ ต้องยืนยันอีเมล