คุณส่งสถานะผ่าน URL ดำเนินการต่อได้เมื่อส่งการดำเนินการทางอีเมลเพื่อรีเซ็ตรหัสผ่านหรือยืนยันอีเมลของผู้ใช้ ซึ่งช่วยให้ผู้ใช้กลับไปยังแอปได้หลังจากการดำเนินการเสร็จสิ้น นอกจากนี้ คุณสามารถระบุได้ว่าจะจัดการลิงก์การดำเนินการของอีเมลโดยตรงจากแอปพลิเคชันบนอุปกรณ์เคลื่อนที่หรือไม่เมื่อมีการติดตั้งแทนที่จะใช้หน้าเว็บ
ซึ่งจะเป็นประโยชน์อย่างยิ่งในสถานการณ์ทั่วไปต่อไปนี้
ผู้ใช้ที่ไม่ได้เข้าสู่ระบบอาจพยายามเข้าถึงเนื้อหาที่กำหนดให้ผู้ใช้ต้องลงชื่อเข้าใช้ แต่ผู้ใช้อาจลืมรหัสผ่าน จึงทำให้เกิดขั้นตอนการรีเซ็ตรหัสผ่าน ในขั้นตอนสุดท้าย ผู้ใช้คาดหวังว่าจะได้กลับไปที่ส่วนของแอปที่พยายามจะเข้าถึง
แอปพลิเคชันอาจเสนอการเข้าถึงบัญชีที่ได้รับการยืนยันแล้วเท่านั้น ตัวอย่างเช่น แอปจดหมายข่าวอาจกำหนดให้ผู้ใช้ยืนยันอีเมลของตนก่อนสมัครรับข้อมูล ผู้ใช้จะต้องทำตามขั้นตอนการยืนยันอีเมล และคาดหวังว่าจะได้กลับไปยังแอปเพื่อสมัครใช้บริการให้เสร็จสมบูรณ์
โดยทั่วไปแล้ว เมื่อผู้ใช้เริ่มรีเซ็ตรหัสผ่านหรือขั้นตอนการยืนยันอีเมลในแอป Apple ผู้ใช้คาดหวังว่าจะทำตามขั้นตอนให้เสร็จสิ้นภายในแอป ความสามารถในการส่งสถานะผ่าน URL ดำเนินการต่อจะช่วยให้การดำเนินการนี้เป็นไปได้
ความสามารถในการส่งสถานะผ่าน URL ดำเนินการต่อเป็นฟีเจอร์ที่มีประสิทธิภาพซึ่ง Firebase Auth มีให้ ซึ่งช่วยปรับปรุงประสบการณ์ของผู้ใช้ได้อย่างมาก
การส่งสถานะ/URL ต่อไปในการดำเนินการของอีเมล
โดเมนสำหรับ URL นั้นจะต้องได้รับอนุญาตพิเศษในคอนโซล Firebase เพื่อส่ง URL ต่อไปอย่างปลอดภัย ใต้หัวข้อการตรวจสอบสิทธิ์โดยการเพิ่มโดเมนนี้ลงในรายการโดเมนที่ได้รับอนุญาตใต้แท็บวิธีการลงชื่อเข้าใช้ หากยังไม่ได้เพิ่มไว้
ต้องระบุอินสแตนซ์ FIRActionCodeSettings
เมื่อส่งอีเมลรีเซ็ตรหัสผ่านหรืออีเมลยืนยัน อินเทอร์เฟซนี้จะใช้พารามิเตอร์
ต่อไปนี้
Swift
พารามิเตอร์ | ประเภท | คำอธิบาย |
---|---|---|
URL |
สตริง | ตั้งค่าลิงก์ (URL สถานะ/ดำเนินการต่อ) ซึ่งมีความหมายต่างกันในบริบทต่างๆ ดังนี้
|
iOSBundleID |
สตริง | ตั้งค่ารหัสชุด การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Apple หากได้ติดตั้งไว้ ต้องลงทะเบียนแอปในคอนโซล หากไม่ได้ระบุรหัสชุด ค่าของช่องนี้จะกำหนดเป็นรหัส Bundle ของ Bundle หลักของแอป |
androidPackageName |
สตริง | ตั้งชื่อแพ็กเกจ Android การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Android หากได้ติดตั้งไว้ |
androidInstallIfNotAvailable |
Bool | ระบุว่าจะติดตั้งแอป Android หากอุปกรณ์รองรับและยังไม่ได้ติดตั้งแอป หากระบุฟิลด์นี้โดยไม่มีpackageName ข้อผิดพลาดจะอธิบายว่าต้องระบุpackageNameร่วมกับช่องนี้ |
androidMinimumVersion |
สตริง | เวอร์ชันต่ำสุดของแอปที่ขั้นตอนนี้รองรับ หากระบุ รหัสขั้นต่ำและติดตั้งแอปเวอร์ชันเก่าไว้ ระบบจะนำผู้ใช้ไปที่ Play Store เพื่ออัปเกรดแอป โดยแอป Android ต้องลงทะเบียนใน Console |
handleCodeInApp |
Bool | ลิงก์การดำเนินการกับอีเมลจะเปิดขึ้นในแอปบนอุปกรณ์เคลื่อนที่หรือลิงก์ในเว็บก่อน ระบบตั้งค่าเริ่มต้นไว้เป็น "เท็จ" เมื่อตั้งค่าเป็น "จริง" ระบบจะส่งลิงก์โค้ดการกระทำเป็น Universal Link หรือ Android App Link และแอปจะเปิดหากมีการติดตั้งไว้ ในกรณีที่เป็นเท็จ ระบบจะส่งโค้ดไปยังวิดเจ็ตเว็บก่อน จากนั้นดําเนินการต่อจะเปลี่ยนเส้นทางไปยังแอปหากมีการติดตั้งไว้ |
dynamicLinkDomain |
สตริง | ตั้งค่าโดเมนลิงก์แบบไดนามิก (หรือโดเมนย่อย) เพื่อใช้กับลิงก์ปัจจุบันหากจะเปิดโดยใช้ลิงก์แบบไดนามิกของ Firebase เนื่องจากกำหนดค่าโดเมนลิงก์แบบไดนามิกได้หลายโดเมนต่อโปรเจ็กต์ ช่องนี้จึงช่วยให้เลือกโดเมนอย่างชัดเจนได้ หากไม่ได้ระบุค่าไว้ ระบบจะใช้โดเมนแรกโดยค่าเริ่มต้น |
Objective-C
พารามิเตอร์ | ประเภท | คำอธิบาย |
---|---|---|
URL |
สตริง NS | ตั้งค่าลิงก์ (URL สถานะ/ดำเนินการต่อ) ซึ่งมีความหมายต่างกันในบริบทต่างๆ ดังนี้
|
iOSBundleID |
สตริง NS | ตั้งค่ารหัสชุด การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Apple หากได้ติดตั้งไว้ ต้องลงทะเบียนแอปในคอนโซล |
androidPackageName |
สตริง NS | ตั้งชื่อแพ็กเกจ Android การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Android หากได้ติดตั้งไว้ |
androidInstallIfNotAvailable |
บูลีน | ระบุว่าจะติดตั้งแอป Android หรือไม่หากอุปกรณ์รองรับและยังไม่ได้ติดตั้งแอป หากระบุฟิลด์นี้โดยไม่มีpackageName ข้อผิดพลาดจะอธิบายว่าต้องระบุpackageNameร่วมกับช่องนี้ |
androidMinimumVersion |
สตริง NS | เวอร์ชันต่ำสุดของแอปที่ขั้นตอนนี้รองรับ หากระบุ รหัสขั้นต่ำและติดตั้งแอปเวอร์ชันเก่าไว้ ระบบจะนำผู้ใช้ไปที่ Play Store เพื่ออัปเกรดแอป โดยแอป Android ต้องลงทะเบียนใน Console |
handleCodeInApp |
บูลีน | ลิงก์การดำเนินการกับอีเมลจะเปิดขึ้นในแอปบนอุปกรณ์เคลื่อนที่หรือลิงก์ในเว็บก่อน ระบบตั้งค่าเริ่มต้นไว้เป็น "เท็จ" เมื่อตั้งค่าเป็น "จริง" ระบบจะส่งลิงก์โค้ดการกระทำเป็น Universal Link หรือ Android App Link และแอปจะเปิดหากมีการติดตั้งไว้ ในกรณีที่เป็นเท็จ ระบบจะส่งโค้ดไปยังวิดเจ็ตเว็บก่อน จากนั้นดําเนินการต่อจะเปลี่ยนเส้นทางไปยังแอปหากมีการติดตั้งไว้ |
dynamicLinkDomain |
สตริง NS | ตั้งค่าโดเมนลิงก์แบบไดนามิก (หรือโดเมนย่อย) เพื่อใช้กับลิงก์ปัจจุบันหากจะเปิดโดยใช้ลิงก์แบบไดนามิกของ Firebase เนื่องจากกำหนดค่าโดเมนลิงก์แบบไดนามิกได้หลายโดเมนต่อโปรเจ็กต์ ช่องนี้จึงช่วยให้เลือกโดเมนอย่างชัดเจนได้ หากไม่ได้ระบุค่าไว้ ระบบจะใช้โดเมนแรกโดยค่าเริ่มต้น |
ตัวอย่างต่อไปนี้แสดงวิธีส่งลิงก์สำหรับการยืนยันอีเมลที่จะเปิดในแอปบนอุปกรณ์เคลื่อนที่เป็นลิงก์แบบไดนามิกของ Firebase ก่อน โดยใช้โดเมนลิงก์แบบไดนามิกที่กำหนดเอง example.page.link
(แอป iOS com.example.ios
หรือแอป Android com.example.android
ซึ่งแอปจะติดตั้งหากยังไม่ได้ติดตั้ง และเวอร์ชันขั้นต่ำคือ 12
) ลิงก์ในรายละเอียดจะมีเพย์โหลด URL ที่ดำเนินการต่อhttps://www.example.com/?email=user@example.com
Swift
var actionCodeSettings = ActionCodeSettings.init() actionCodeSettings.canHandleInApp = true let user = Auth.auth().currentUser() actionCodeSettings.URL = String(format: "https://www.example.com/?email=%@", user.email) actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier! actionCodeSettings.setAndroidPakageName("com.example.android", installIfNotAvailable:true, minimumVersion:"12") // When multiple custom dynamic link domains are defined, specify which one to use. actionCodeSettings.dynamicLinkDomain = "example.page.link" user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in if error { // Error occurred. Inspect error.code and handle error. return } // Email verification sent. })
Objective-C
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; actionCodeSettings.handleCodeInApp = YES; FIRUser *user = [FIRAuth auth].currentUser; NSString *urlString = [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email]; actionCodeSettings.URL = [NSURL URLWithString:urlString]; actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier; // When multiple custom dynamic link domains are defined, specify which one to use. actionCodeSettings.dynamicLinkDomain = @"example.page.link"; [actionCodeSettings setAndroidPackageName:@"com.example.android" installIfNotAvailable:YES minimumVersion:'12']; [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings completion:^(NSError *_Nullable error) { if (error) { // Error occurred. Inspect error.code and handle error. return; } // Email verification 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
การกำหนดค่าแอปพลิเคชัน Apple
- หากคุณวางแผนที่จะจัดการลิงก์เหล่านี้จากแอปพลิเคชัน คุณจะต้องระบุรหัสแพ็กเกจในการตั้งค่าโปรเจ็กต์คอนโซล Firebase นอกจากนี้ คุณจะต้องระบุรหัส App Store และรหัสทีมนักพัฒนาซอฟต์แวร์ของ Apple ด้วย
- นอกจากนี้ คุณจะต้องกำหนดค่าโดเมน Universal Link ของ FDL เป็นโดเมนที่เชื่อมโยงในความสามารถของแอปพลิเคชัน
- หากคุณวางแผนที่จะเผยแพร่แอปพลิเคชันไปยัง iOS เวอร์ชัน 8 และต่ำกว่า คุณจะต้องตั้งค่ารหัสชุดเป็นรูปแบบที่กำหนดเองสำหรับ URL ขาเข้า
- ดูข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่วิธีการรับลิงก์แบบไดนามิกสำหรับแพลตฟอร์ม Apple
จัดการการดำเนินการกับอีเมลในเว็บแอปพลิเคชัน
คุณสามารถระบุว่าคุณต้องการจัดการลิงก์โค้ดการดำเนินการจากเว็บแอปพลิเคชันก่อน แล้วจึงเปลี่ยนเส้นทางไปยังหน้าเว็บหรือแอปพลิเคชันบนอุปกรณ์เคลื่อนที่อื่นหลังจากดำเนินการเสร็จสิ้น ซึ่งมีแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ให้ใช้งาน
ซึ่งทำโดยการตั้งค่า handleCodeInApp
เป็น false
ในออบเจ็กต์ FIRActionCodeSettings
(Obj-C) หรือ ActionCodeSettings
(Swift) แม้ว่าไม่จำเป็นต้องใช้รหัสชุดหรือชื่อแพ็กเกจ Android แต่การระบุรหัสจะทำให้ผู้ใช้เปลี่ยนเส้นทางกลับไปยังแอปที่ระบุได้เมื่อใส่โค้ดการดำเนินการทางอีเมลเรียบร้อยแล้ว
URL ของเว็บที่ใช้ที่นี่คือ URL ที่กำหนดค่าไว้ในส่วนเทมเพลตการดำเนินการกับอีเมล ระบบจะจัดสรรค่าเริ่มต้นให้กับโปรเจ็กต์ทั้งหมด โปรดดูการปรับแต่งเครื่องจัดการอีเมลเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีปรับแต่งเครื่องจัดการการดำเนินการอีเมล
ในกรณีนี้ ลิงก์ภายในพารามิเตอร์การค้นหา continueURL
จะเป็นลิงก์ FDL ซึ่งมีเพย์โหลดคือ URL
ที่ระบุในออบเจ็กต์ ActionCodeSettings
แม้ว่าคุณจะสกัดกั้นและจัดการลิงก์ขาเข้าจากแอปได้โดยไม่ต้องใช้ทรัพยากร Dependency เพิ่มเติม เราขอแนะนำให้ใช้ไลบรารีของไคลเอ็นต์ FDL เพื่อแยกวิเคราะห์ Deep Link ให้คุณ
เมื่อจัดการการดำเนินการทางอีเมล เช่น การยืนยันอีเมล รหัสการดำเนินการจากพารามิเตอร์การค้นหา oobCode
จะต้องได้รับการแยกวิเคราะห์จาก Deep Link จากนั้นนำไปใช้ผ่าน applyActionCode
เพื่อให้การเปลี่ยนแปลงมีผล เช่น อีเมลต้องได้รับการยืนยัน
การจัดการการดำเนินการกับอีเมลในแอปพลิเคชันบนอุปกรณ์เคลื่อนที่
คุณสามารถระบุว่าคุณต้องการจัดการลิงก์โค้ดการกระทำภายในแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ก่อน หากมีการติดตั้งไว้ สำหรับแอปพลิเคชัน Android คุณยังระบุผ่าน androidInstallIfNotAvailable
ได้ด้วยว่าจะติดตั้งแอปนั้นหากอุปกรณ์รองรับและยังไม่ได้ติดตั้ง
หากมีการคลิกลิงก์จากอุปกรณ์ที่ไม่รองรับแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ ลิงก์นั้นจะเปิดจากหน้าเว็บแทน
ซึ่งทำโดยการตั้งค่า handleCodeInApp
เป็น true
ในออบเจ็กต์ FIRActionCodeSettings
(Obj-C) หรือ ActionCodeSettings
(Swift) คุณจะต้องระบุชื่อแพ็กเกจ Android หรือรหัสชุดของแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ด้วย URL เว็บสำรองที่ใช้ที่นี่เมื่อไม่มีแอปบนอุปกรณ์เคลื่อนที่ให้ใช้งาน จะเป็น URL ที่กำหนดค่าไว้ในส่วนเทมเพลตการดำเนินการกับอีเมล จะมีการจัดสรรค่าเริ่มต้นสำหรับทุกโปรเจ็กต์ โปรดดูการปรับแต่งเครื่องจัดการอีเมลเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีปรับแต่งเครื่องจัดการการดำเนินการอีเมล
ในกรณีนี้ ลิงก์แอปบนอุปกรณ์เคลื่อนที่ที่ส่งไปยังผู้ใช้จะเป็นลิงก์ FDL ซึ่งมีเพย์โหลดเป็น URL ของรหัสการดำเนินการที่กำหนดค่าในคอนโซล โดยมีพารามิเตอร์การค้นหา oobCode
, mode
, apiKey
และ continueUrl
รายการหลังจะเป็น URL
เดิมที่ระบุในออบเจ็กต์ FIRActionCodeSettings
(Obj-C) หรือ ActionCodeSettings
(Swift) แม้ว่าคุณจะสกัดกั้นและจัดการลิงก์ขาเข้าจากแอปได้โดยไม่ต้องพึ่งพิงใดๆ เพิ่มเติม เราขอแนะนำให้ใช้ไลบรารีของไคลเอ็นต์ FDL เพื่อแยกวิเคราะห์ Deep Link ให้คุณ โค้ดการดำเนินการใช้ได้โดยตรงจากแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ ซึ่งคล้ายกับวิธีการจัดการจากโฟลว์เว็บที่อธิบายไว้ในส่วนการปรับแต่งเครื่องจัดการอีเมล
เมื่อจัดการการดำเนินการทางอีเมล เช่น การยืนยันอีเมล รหัสการดำเนินการจากพารามิเตอร์การค้นหา oobCode
จะต้องได้รับการแยกวิเคราะห์จาก Deep Link จากนั้นนำไปใช้ผ่าน applyActionCode
เพื่อให้การเปลี่ยนแปลงมีผล เช่น อีเมลต้องได้รับการยืนยัน