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

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

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

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

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

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

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

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

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

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

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

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

  • เมื่อมีการจัดการลิงก์ในวิดเจ็ตการดำเนินการบนเว็บ นี่คือ Deep Link ในพารามิเตอร์การค้นหา continueUrl
  • เมื่อมีการจัดการลิงก์ในแอปโดยตรง พารามิเตอร์นี้จะเป็นcontinueUrlพารามิเตอร์การค้นหาใน Deep Link ของHostingลิงก์
setIOSBundleId(String iOSBundleId) ตั้งค่า Bundle ID ของ iOS เพื่อช่วย Firebase Authentication ระบุว่าควรสร้างลิงก์บนเว็บเท่านั้นหรือลิงก์บนอุปกรณ์เคลื่อนที่ซึ่งเปิดในอุปกรณ์ Apple
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) ตั้งค่าชื่อแพ็กเกจ Android เพื่อช่วย Firebase Authentication ในการพิจารณาว่าควรสร้างลิงก์สำหรับเว็บเท่านั้นหรือลิงก์สำหรับอุปกรณ์เคลื่อนที่ซึ่งเปิดในอุปกรณ์ Android หรือไม่
setHandleCodeInApp(boolean status) ไม่ว่าจะเปิดลิงก์การดำเนินการในอีเมลในแอปบนอุปกรณ์เคลื่อนที่หรือลิงก์เว็บก่อน ค่าเริ่มต้นคือ false เมื่อตั้งค่าเป็น "จริง" ระบบจะส่งลิงก์รหัสการดำเนินการ เป็น Universal Link หรือ App Link ของ Android และแอปจะเปิดลิงก์ หากติดตั้งไว้ ในกรณีที่เป็นเท็จ ระบบจะส่งรหัสไปยัง วิดเจ็ตบนเว็บก่อน จากนั้นเมื่อดำเนินการต่อ ระบบจะเปลี่ยนเส้นทางไปยังแอปหาก ติดตั้งไว้
setLinkDomain(String customDomain) เมื่อกำหนดHostingโดเมนลิงก์ที่กำหนดเองสำหรับโปรเจ็กต์ ให้ระบุโดเมนที่จะใช้เมื่อแอปบนอุปกรณ์เคลื่อนที่ที่ระบุ จะเปิดลิงก์ มิเช่นนั้น ระบบจะเลือกโดเมนเริ่มต้นโดยอัตโนมัติ (เช่น PROJECT_ID.firebaseapp.com)
setDynamicLinkDomain(String dynamicLinkDomain) เลิกใช้งานแล้ว อย่าระบุพารามิเตอร์นี้

ตัวอย่างต่อไปนี้แสดงวิธีส่งลิงก์ยืนยันทางอีเมลที่จะเปิดในแอปบนอุปกรณ์เคลื่อนที่ก่อน Deep Link จะมีเพย์โหลด URL ของการดำเนินการต่อ http://www.example.com/verify?uid=1234

Kotlin

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

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

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

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

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

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

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

ในกรณีนี้ ลิงก์ภายในพารามิเตอร์คำค้นหา continueUrl จะเป็นลิงก์ Hosting ที่มีเพย์โหลดเป็น URL ที่ระบุในออบเจ็กต์ ActionCodeSettings

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

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

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

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

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

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