คุณสามารถส่งสถานะผ่าน URL ดำเนินการต่อ เมื่อส่งการดำเนินการทางอีเมลเพื่อรีเซ็ตรหัสผ่านหรือยืนยันอีเมลของผู้ใช้ ซึ่งช่วยให้ผู้ใช้สามารถ กลับไปยังแอปหลังดำเนินการเสร็จสิ้น นอกจากนี้ คุณสามารถระบุว่าจะจัดการลิงก์การดำเนินการทางอีเมลจากแอปพลิเคชันบนอุปกรณ์เคลื่อนที่โดยตรงหรือไม่ เมื่อติดตั้งลิงก์ดังกล่าวแทนหน้าเว็บ
ซึ่งอาจเป็นประโยชน์อย่างยิ่งในสถานการณ์ที่พบบ่อยดังต่อไปนี้
ผู้ใช้ที่ไม่ได้ลงชื่อเข้าสู่ระบบในขณะนี้อาจพยายามเข้าถึงเนื้อหาที่ผู้ใช้ต้องลงชื่อเข้าใช้ แต่ผู้ใช้อาจลืมรหัสผ่าน จึงเรียกใช้ขั้นตอนการรีเซ็ตรหัสผ่าน ในตอนท้ายของขั้นตอน ผู้ใช้คาดหวังที่จะกลับไปยังส่วนของแอปที่พวกเขาพยายามเข้าถึง
แอปพลิเคชันอาจให้สิทธิ์เข้าถึงเฉพาะบัญชีที่ยืนยันแล้วเท่านั้น ตัวอย่างเช่น จดหมายข่าวอาจกำหนดให้ผู้ใช้ยืนยันอีเมลก่อนที่จะสมัครรับข้อมูล ผู้ใช้จะต้องดำเนินการตามขั้นตอนการยืนยันอีเมล และคาดหวังว่าจะกลับไปยังแอปเพื่อสมัครใช้บริการให้เสร็จสมบูรณ์
ในกรณีอื่นๆ ผู้ใช้อาจเริ่มขั้นตอนนี้จากอุปกรณ์เคลื่อนที่และคาดว่าหลังจากยืนยันจะกลับไปยังแอปบนอุปกรณ์เคลื่อนที่แทนเบราว์เซอร์
ความสามารถในการส่งสถานะผ่าน URL ดำเนินการต่อเป็นฟีเจอร์ที่มีประสิทธิภาพที่ Firebase Auth มีให้ ทั้งยังปรับปรุงประสบการณ์ของผู้ใช้ได้อย่างมาก
URL สถานะที่ส่ง/ดำเนินการต่อในการดำเนินการกับอีเมล
หากต้องการส่ง URL ต่อไปอย่างปลอดภัย โดเมนของ URL ดังกล่าวจะต้องได้รับอนุญาตพิเศษในคอนโซล Firebase ซึ่งทำได้ในส่วนการตรวจสอบสิทธิ์โดยการเพิ่มโดเมนนี้ลงในรายการโดเมนที่ได้รับอนุญาตในแท็บวิธีการลงชื่อเข้าใช้ หากยังไม่มีโดเมนดังกล่าว
ต้องระบุอินสแตนซ์ ActionCodeSettings เมื่อส่งอีเมลรีเซ็ตรหัสผ่านหรืออีเมลยืนยัน ซึ่งสามารถสร้างขึ้นด้วยคลาส ActionCodeSettings.Builder ที่เกี่ยวข้องซึ่งมีเมธอดดังต่อไปนี้
วิธีการ | คำอธิบาย |
---|---|
setUrl(String url) |
ตั้งค่าลิงก์ (สถานะ/URL ต่อ) ซึ่งมีความหมายแตกต่างกันในบริบทที่แตกต่างกัน
|
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
Firebase Auth ใช้ลิงก์แบบไดนามิกของ Firebase เมื่อส่งลิงก์ที่ตั้งใจจะเปิดในแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ หากต้องการใช้ฟีเจอร์นี้ คุณต้องกำหนดค่าลิงก์แบบไดนามิกในคอนโซล Firebase
เปิดใช้ลิงก์แบบไดนามิกของ Firebase
- ในคอนโซล Firebase ให้เปิดส่วนลิงก์แบบไดนามิก
-
หากคุณยังไม่ได้ยอมรับข้อกำหนดของลิงก์แบบไดนามิกและสร้างโดเมนลิงก์แบบไดนามิก ให้ยอมรับในตอนนี้
หากคุณสร้างโดเมนลิงก์แบบไดนามิกไว้แล้ว โปรดจดโดเมนดังกล่าวไว้ โดเมนลิงก์แบบไดนามิกมักมีลักษณะดังตัวอย่างต่อไปนี้
example.page.link
คุณจะต้องใช้ค่านี้เมื่อกําหนดค่าแอป Apple หรือ Android ให้สกัดกั้นลิงก์ที่เข้ามา
การกำหนดค่าแอปพลิเคชัน Android
- หากคุณวางแผนที่จะจัดการลิงก์เหล่านี้จากแอปพลิเคชัน Android คุณต้องระบุชื่อแพ็กเกจ Android ในการตั้งค่าโปรเจ็กต์ของคอนโซล Firebase นอกจากนี้ คุณยังต้องระบุ SHA-1 และ SHA-256 ของใบรับรองแอปพลิเคชันด้วย
- นอกจากนี้ คุณจะต้องกำหนดค่าตัวกรอง Intent สำหรับ Deep Link ในไฟล์ AndroidManifest.xml ด้วย
- ดูข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในวิธีการรับลิงก์แบบไดนามิกของ Android
การกําหนดค่าแอปพลิเคชัน iOS
- หากคุณวางแผนที่จะจัดการลิงก์เหล่านี้จากแอปพลิเคชัน iOS คุณต้องระบุรหัสชุด iOS ในการตั้งค่าโปรเจ็กต์คอนโซล Firebase นอกจากนี้ คุณยังต้องระบุ App Store ID และรหัสทีมนักพัฒนาซอฟต์แวร์ของ Apple
- นอกจากนี้คุณจะต้องกำหนดค่าโดเมน Universal Link ของ FDL เป็นโดเมนที่เชื่อมโยงในความสามารถของแอปพลิเคชันของคุณ
- หากคุณวางแผนที่จะเผยแพร่แอปไปยัง iOS เวอร์ชัน 8 และต่ำกว่า คุณจะต้องตั้งค่ารหัสชุด iOS เป็นรูปแบบที่กำหนดเองสำหรับ URL ขาเข้า
- ดูข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในวิธีการรับลิงก์แบบไดนามิกของ 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
เพื่อให้การเปลี่ยนแปลงมีผล กล่าวคือ ต้องยืนยันอีเมล