บางครั้งแอปบนอุปกรณ์เคลื่อนที่ต้องโต้ตอบกับผู้ใช้และแจ้งให้ผู้ใช้ดำเนินการบางอย่างโดยการส่งอีเมล
SDK ของไคลเอ็นต์ Firebase ช่วยให้คุณส่งอีเมลที่มีลิงก์ให้ผู้ใช้ใช้รีเซ็ตรหัสผ่าน ยืนยันอีเมล และลงชื่อเข้าใช้ด้วยอีเมลได้ อีเมลที่อิงตามเทมเพลตเหล่านี้ส่งโดย Google และปรับแต่งได้แบบจํากัด
หากต้องการใช้เทมเพลตอีเมลและบริการนำส่งอีเมลของคุณเองแทน หน้านี้จะอธิบายวิธีใช้ Firebase Admin SDK เพื่อสร้างลิงก์การดำเนินการสำหรับขั้นตอนข้างต้นแบบเป็นโปรแกรม ซึ่งคุณสามารถใส่ไว้ในอีเมลที่ส่งถึงผู้ใช้
ซึ่งมีข้อดีดังต่อไปนี้
- ปรับแต่งเทมเพลตอีเมล ซึ่งรวมถึงความสามารถในการเพิ่มสไตล์ใหม่และการสร้างแบรนด์ที่กําหนดเอง เปลี่ยนข้อความและโลโก้ เรียกผู้ใช้ด้วยชื่อแทนชื่อเต็ม และอื่นๆ
- ใช้เทมเพลตที่แตกต่างกันตามบริบท เช่น หากผู้ใช้กำลังยืนยันอีเมลเพื่อสมัครรับจดหมายข่าว คุณอาจต้องระบุบริบทในเนื้อหาอีเมล อีกตัวอย่างหนึ่งคือการลงชื่อเข้าใช้ด้วยลิงก์อีเมล: ในสถานการณ์หนึ่ง ผู้ใช้รายเดียวกันอาจทริกเกอร์การดำเนินการนี้ หรือเป็นคำเชิญจากผู้ใช้รายอื่น โดยจะต้องใส่บริบทไว้ในอีเมล
- แปลเทมเพลตอีเมลที่กำหนดเองเป็นภาษาท้องถิ่น
- ความสามารถในการสร้างลิงก์จากสภาพแวดล้อมเซิร์ฟเวอร์ที่ปลอดภัย
- ความสามารถในการปรับแต่งวิธีเปิดลิงก์ผ่านแอปบนอุปกรณ์เคลื่อนที่หรือเบราว์เซอร์ และวิธีส่งข้อมูลเพิ่มเติมเกี่ยวกับสถานะ ฯลฯ
- ความสามารถในการปรับแต่งโดเมนลิงก์แบบไดนามิกที่ใช้สำหรับขั้นตอนของแอปบนอุปกรณ์เคลื่อนที่เมื่อสร้างลิงก์การดําเนินการทางอีเมล และระบุโดเมนลิงก์แบบไดนามิกอื่นได้ ทั้งนี้ขึ้นอยู่กับบริบทหรือแอปบนอุปกรณ์เคลื่อนที่
เริ่มต้น ActionCodeSettings
คุณอาจต้องเริ่มต้นการทำงานของอินสแตนซ์ ActionCodeSettings
ก่อนจึงจะสร้างลิงก์การดําเนินการทางอีเมลได้
ActionCodeSettings
ช่วยให้คุณส่งสถานะเพิ่มเติมผ่าน URL ดำเนินการต่อซึ่งเข้าถึงได้หลังจากที่ผู้ใช้คลิกลิงก์อีเมล นอกจากนี้ ยังช่วยให้ผู้ใช้กลับไปที่แอปได้หลังจากดำเนินการเสร็จแล้ว นอกจากนี้ คุณยังระบุได้ว่าจะให้จัดการลิงก์การดําเนินการของอีเมลโดยตรงจากแอปพลิเคชันบนอุปกรณ์เคลื่อนที่เมื่อติดตั้งหรือจากเบราว์เซอร์
สําหรับลิงก์ที่มีไว้เปิดผ่านแอปบนอุปกรณ์เคลื่อนที่ คุณจะต้องเปิดใช้ Firebase Dynamic Links และทํางานบางอย่างเพื่อตรวจหาลิงก์เหล่านี้จากแอปบนอุปกรณ์เคลื่อนที่ โปรดดูวิธีการกําหนดค่า Firebase Dynamic Links สําหรับการดําเนินการทางอีเมล
หากต้องการเริ่มต้นอินสแตนซ์ ActionCodeSettings
ให้ระบุข้อมูลต่อไปนี้
พารามิเตอร์ | ประเภท | คำอธิบาย |
---|---|---|
url |
สตริง | ตั้งค่าลิงก์ (URL สถานะ/ดำเนินการต่อ) ซึ่งมีความหมายแตกต่างกันในบริบทต่างๆ ดังนี้
|
iOS |
({bundleId: string}|undefined) | ตั้งค่ารหัสชุด ซึ่งจะพยายามเปิดลิงก์ในแอปของ Apple หากติดตั้งไว้ แอปต้องได้รับการลงทะเบียนในคอนโซล |
android |
({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) | ตั้งค่าชื่อแพ็กเกจ Android ซึ่งจะพยายามเปิดลิงก์ในแอป Android หากติดตั้งไว้ หากมีการส่ง installApp ระบบจะระบุว่าจะติดตั้งแอป Android หรือไม่ หากอุปกรณ์รองรับและยังไม่มีการติดตั้งแอป หากระบุช่องนี้โดยไม่มี packageName ระบบจะแสดงข้อผิดพลาดที่อธิบายว่าต้องระบุ packageName ควบคู่ไปกับช่องนี้
หากระบุ minimumVersion และติดตั้งแอปเวอร์ชันเก่า ระบบจะนําผู้ใช้ไปยัง Play Store เพื่ออัปเกรดแอป แอป Android ต้องลงทะเบียนใน Console |
handleCodeInApp |
(boolean|undefined) | ระบุว่าลิงก์การดําเนินการของอีเมลจะเปิดในแอปบนอุปกรณ์เคลื่อนที่หรือลิงก์เว็บก่อน ค่าเริ่มต้นคือ False เมื่อตั้งค่าเป็น "จริง" ระบบจะส่งลิงก์โค้ดการดำเนินการเป็น Universal Link หรือ App Link ของ Android และแอปจะเปิดลิงก์ดังกล่าวหากติดตั้งไว้ ในกรณีที่เป็นเท็จ ระบบจะส่งโค้ดไปยังวิดเจ็ตบนเว็บก่อน จากนั้นจะเปลี่ยนเส้นทางไปยังแอปหากติดตั้งไว้ |
dynamicLinkDomain |
(string|undefined) | ตั้งค่าโดเมนลิงก์แบบไดนามิก (หรือโดเมนย่อย) ที่จะใช้กับลิงก์ปัจจุบัน หากต้องการเปิดลิงก์โดยใช้ Firebase Dynamic Links เนื่องจากคุณกําหนดค่าโดเมนลิงก์แบบไดนามิกหลายรายการต่อโปรเจ็กต์ได้ ช่องนี้จึงช่วยให้คุณเลือกโดเมนได้อย่างชัดเจน หากไม่ได้ระบุ ระบบจะใช้โดเมนที่เก่าที่สุดโดยค่าเริ่มต้น |
ตัวอย่างต่อไปนี้แสดงวิธีส่งลิงก์ยืนยันอีเมลที่จะเปิดในแอปบนอุปกรณ์เคลื่อนที่ก่อนเป็น Firebase Dynamic Link (แอป Apple com.example.ios
หรือแอป Android com.example.android
ซึ่งแอปจะติดตั้งหากยังไม่ได้ติดตั้งและเวอร์ชันขั้นต่ำคือ 12) Deep Link จะมีเพย์โหลด URL ต่อ
https://www.example.com/checkout?cartId=1234
โดเมนลิงก์แบบไดนามิกที่ใช้คือ coolapp.page.link
ซึ่งต้องได้รับการกําหนดค่าเพื่อใช้กับลิงก์แบบไดนามิกของ Firebase
Node.js
const actionCodeSettings = {
// URL you want to redirect back to. The domain (www.example.com) for
// this URL must be whitelisted in the Firebase Console.
url: 'https://www.example.com/checkout?cartId=1234',
// This must be true for email link sign-in.
handleCodeInApp: true,
iOS: {
bundleId: 'com.example.ios',
},
android: {
packageName: 'com.example.android',
installApp: true,
minimumVersion: '12',
},
// FDL custom domain.
dynamicLinkDomain: 'coolapp.page.link',
};
Java
ActionCodeSettings actionCodeSettings = ActionCodeSettings.builder()
.setUrl("https://www.example.com/checkout?cartId=1234")
.setHandleCodeInApp(true)
.setIosBundleId("com.example.ios")
.setAndroidPackageName("com.example.android")
.setAndroidInstallApp(true)
.setAndroidMinimumVersion("12")
.setDynamicLinkDomain("coolapp.page.link")
.build();
Python
action_code_settings = auth.ActionCodeSettings(
url='https://www.example.com/checkout?cartId=1234',
handle_code_in_app=True,
ios_bundle_id='com.example.ios',
android_package_name='com.example.android',
android_install_app=True,
android_minimum_version='12',
dynamic_link_domain='coolapp.page.link',
)
Go
actionCodeSettings := &auth.ActionCodeSettings{
URL: "https://www.example.com/checkout?cartId=1234",
HandleCodeInApp: true,
IOSBundleID: "com.example.ios",
AndroidPackageName: "com.example.android",
AndroidInstallApp: true,
AndroidMinimumVersion: "12",
DynamicLinkDomain: "coolapp.page.link",
}
C#
var actionCodeSettings = new ActionCodeSettings()
{
Url = "https://www.example.com/checkout?cartId=1234",
HandleCodeInApp = true,
IosBundleId = "com.example.ios",
AndroidPackageName = "com.example.android",
AndroidInstallApp = true,
AndroidMinimumVersion = "12",
DynamicLinkDomain = "coolapp.page.link",
};
ดูข้อมูลเพิ่มเติมได้ที่การส่งสถานะในการดำเนินการทางอีเมล
สร้างลิงก์อีเมลสำหรับการรีเซ็ตรหัสผ่าน
หากต้องการสร้างลิงก์สำหรับรีเซ็ตรหัสผ่าน ให้ระบุอีเมลของผู้ใช้ที่มีอยู่และออบเจ็กต์ ActionCodeSettings
(ไม่บังคับ) การดำเนินการจะแก้ไขด้วยอีเมลที่มีลิงก์การดำเนินการ อีเมลที่ใช้ต้องเป็นของผู้ใช้ปัจจุบัน
Node.js
// Admin SDK API to generate the password reset link.
const userEmail = 'user@example.com';
getAuth()
.generatePasswordResetLink(userEmail, actionCodeSettings)
.then((link) => {
// Construct password reset email template, embed the link and send
// using custom SMTP server.
return sendCustomPasswordResetEmail(userEmail, displayName, link);
})
.catch((error) => {
// Some error occurred.
});
Java
String email = "user@example.com";
try {
String link = FirebaseAuth.getInstance().generatePasswordResetLink(
email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
System.out.println("Error generating email link: " + e.getMessage());
}
Python
email = 'user@example.com'
link = auth.generate_password_reset_link(email, action_code_settings)
# Construct password reset email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)
Go
email := "user@example.com"
link, err := client.PasswordResetLinkWithSettings(ctx, email, actionCodeSettings)
if err != nil {
log.Fatalf("error generating email link: %v\n", err)
}
// Construct password reset template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)
C#
var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GeneratePasswordResetLinkAsync(
email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);
หลังจากสร้างลิงก์แล้ว คุณสามารถแทรกลิงก์ดังกล่าวลงในอีเมลสำหรับรีเซ็ตรหัสผ่านที่กำหนดเอง แล้วส่งอีเมลไปยังผู้ใช้ที่เกี่ยวข้องโดยใช้เซิร์ฟเวอร์ SMTP ที่กําหนดเอง
หากคุณไม่ได้ใช้หน้า Landing Page สำหรับการรีเซ็ตรหัสผ่านเริ่มต้นและสร้างตัวแฮนเดิลที่กำหนดเองของคุณเอง โปรดดูการสร้างตัวแฮนเดิลการดำเนินการกับอีเมลที่กำหนดเอง
สร้างลิงก์สำหรับการยืนยันอีเมล
หากต้องการสร้างลิงก์ยืนยันอีเมล ให้ระบุอีเมลที่ยังไม่ได้ยืนยันของผู้ใช้ที่มีอยู่และออบเจ็กต์ ActionCodeSettings
(ไม่บังคับ) การดำเนินการจะแก้ไขได้ด้วยลิงก์การดำเนินการทางอีเมล
อีเมลที่ใช้ต้องเป็นของผู้ใช้ปัจจุบัน
Node.js
// Admin SDK API to generate the email verification link.
const useremail = 'user@example.com';
getAuth()
.generateEmailVerificationLink(useremail, actionCodeSettings)
.then((link) => {
// Construct email verification template, embed the link and send
// using custom SMTP server.
return sendCustomVerificationEmail(useremail, displayName, link);
})
.catch((error) => {
// Some error occurred.
});
Java
String email = "user@example.com";
try {
String link = FirebaseAuth.getInstance().generateEmailVerificationLink(
email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
System.out.println("Error generating email link: " + e.getMessage());
}
Python
email = 'user@example.com'
link = auth.generate_email_verification_link(email, action_code_settings)
# Construct email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)
Go
email := "user@example.com"
link, err := client.EmailVerificationLinkWithSettings(ctx, email, actionCodeSettings)
if err != nil {
log.Fatalf("error generating email link: %v\n", err)
}
// Construct email verification template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)
C#
var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GenerateEmailVerificationLinkAsync(
email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);
หลังจากสร้างลิงก์แล้ว คุณสามารถแทรกลิงก์ดังกล่าวลงในอีเมลยืนยันที่กำหนดเอง แล้วส่งอีเมลไปยังผู้ใช้ที่เกี่ยวข้องได้โดยใช้เซิร์ฟเวอร์ SMTP ที่กําหนดเอง
หากคุณไม่ได้ใช้หน้า Landing Page เริ่มต้นสำหรับการยืนยันอีเมลและสร้างตัวแฮนเดิลที่กำหนดเองของคุณเอง โปรดดูการสร้างตัวแฮนเดิลการดำเนินการกับอีเมลที่กำหนดเอง
สร้างลิงก์อีเมลสำหรับการลงชื่อเข้าใช้
คุณต้องเปิดใช้การลงชื่อเข้าใช้ด้วยลิงก์อีเมลสำหรับโปรเจ็กต์ Firebase ก่อนจึงจะตรวจสอบสิทธิ์ผู้ใช้ได้
หากต้องการสร้างลิงก์ลงชื่อเข้าใช้ ให้ระบุอีเมลของผู้ใช้และActionCodeSettings
ออบเจ็กต์ ในกรณีนี้ คุณต้องใช้ออบเจ็กต์ ActionCodeSettings
เพื่อระบุข้อมูลเกี่ยวกับตําแหน่งที่จะนําผู้ใช้กลับหลังจากคลิกลิงก์เพื่อลงชื่อเข้าใช้ การดำเนินการจะแก้ไขด้วยลิงก์การดำเนินการทางอีเมล
อีเมลที่ใช้ไม่จำเป็นต้องเป็นของผู้ใช้เดิม ต่างจากรีเซ็ตรหัสผ่านและการยืนยันอีเมล เนื่องจากการดำเนินการนี้สามารถใช้เพื่อลงชื่อสมัครใช้ผู้ใช้ใหม่ในแอปผ่านลิงก์อีเมลได้
Node.js
// Admin SDK API to generate the sign in with email link.
const useremail = 'user@example.com';
getAuth()
.generateSignInWithEmailLink(useremail, actionCodeSettings)
.then((link) => {
// Construct sign-in with email link template, embed the link and
// send using custom SMTP server.
return sendSignInEmail(useremail, displayName, link);
})
.catch((error) => {
// Some error occurred.
});
Java
String email = "user@example.com";
try {
String link = FirebaseAuth.getInstance().generateSignInWithEmailLink(
email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
System.out.println("Error generating email link: " + e.getMessage());
}
Python
email = 'user@example.com'
link = auth.generate_sign_in_with_email_link(email, action_code_settings)
# Construct email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)
Go
email := "user@example.com"
link, err := client.EmailSignInLink(ctx, email, actionCodeSettings)
if err != nil {
log.Fatalf("error generating email link: %v\n", err)
}
// Construct sign-in with email link template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)
C#
var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GenerateSignInWithEmailLinkAsync(
email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);
หลังจากสร้างลิงก์แล้ว คุณสามารถแทรกลิงก์ดังกล่าวลงในอีเมลการลงชื่อเข้าใช้ที่กำหนดเอง แล้วส่งอีเมลถึงผู้ใช้ที่เกี่ยวข้องโดยใช้เซิร์ฟเวอร์ SMTP ที่กําหนดเอง
ดูข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ผู้ใช้ด้วย Firebase โดยใช้ลิงก์อีเมล ซึ่งจะช่วยระบุข้อมูลเกี่ยวกับวิธีลงชื่อเข้าใช้ให้เสร็จสมบูรณ์หลังจากที่ผู้ใช้คลิกลิงก์และระบบเปลี่ยนเส้นทางกลับไปที่แอป