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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. เปิดใช้ Firebase Dynamic Links

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

      หากคุณสร้างโดเมน Dynamic Links ไว้แล้ว ให้จดโดเมนนั้นไว้ โดยปกติแล้ว 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 และรหัสทีมนักพัฒนาแอป 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 หรือรหัส Bundle ของ iOS ของแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ด้วย

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

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

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