Đôi khi, ứng dụng di động cần tương tác với người dùng và nhắc họ thực hiện một số hành động bằng cách gửi email.
SDK Firebase Client cho phép gửi email cho người dùng có chứa đường liên kết mà họ có thể dùng để đặt lại mật khẩu, xác minh địa chỉ email và đăng nhập bằng email. Những email dựa trên mẫu này do Google gửi và có khả năng tuỳ chỉnh hạn chế.
Nếu bạn muốn sử dụng mẫu email và dịch vụ gửi email của riêng mình, thì trang này sẽ giải thích cách sử dụng SDK của Firebase dành cho quản trị viên để tạo đường liên kết hành động theo phương thức lập trình cho các quy trình nêu trên. Bạn có thể đưa đường liên kết này vào email gửi cho người dùng.
Việc này mang lại những lợi ích sau:
- Tuỳ chỉnh mẫu email. Trong đó có cả tính năng thêm kiểu mới và thương hiệu tuỳ chỉnh, thay đổi từ ngữ và biểu trưng, gọi người dùng bằng tên thay vì tên đầy đủ, v.v.
- Áp dụng các mẫu khác nhau tuỳ theo bối cảnh. Ví dụ: nếu người dùng đang xác minh email để đăng ký nhận bản tin, thì bạn có thể cần cung cấp bối cảnh trong nội dung email. Một ví dụ khác là đăng nhập bằng đường liên kết trong email: trong một trường hợp, thao tác này có thể do chính người dùng đó kích hoạt hoặc do một người dùng khác gửi lời mời. Bạn cần đưa bối cảnh vào email.
- Nội địa hoá các mẫu email tuỳ chỉnh.
- Có thể tạo đường liên kết từ một môi trường máy chủ an toàn.
- Có thể tuỳ chỉnh cách mở đường liên kết (thông qua ứng dụng di động hoặc trình duyệt) và cách truyền thông tin bổ sung về trạng thái, v.v.
- Có thể tuỳ chỉnh miền đường liên kết dành cho thiết bị di động dùng cho các quy trình của ứng dụng di động khi tạo đường liên kết hành động trong email.
Khởi chạy ActionCodeSettings
Trước khi có thể tạo đường liên kết hành động trong email, bạn có thể cần khởi chạy một thực thể ActionCodeSettings.
ActionCodeSettings cho phép bạn truyền state bổ sung thông qua URL tiếp nối mà người dùng có thể truy cập sau khi nhấp vào đường liên kết trong email. Thao tác này cũng cho phép người dùng quay lại ứng dụng sau khi hoàn tất hành động. Ngoài ra, bạn có thể chỉ định xem có xử lý đường liên kết hành động trong email trực tiếp từ ứng dụng di động khi ứng dụng đó được cài đặt hay không hoặc xử lý từ trình duyệt.
Đối với những đường liên kết được mở thông qua ứng dụng di động, bạn cần thực hiện một số việc để phát hiện những đường liên kết này từ ứng dụng di động. Hãy tham khảo hướng dẫn về cách định cấu hình đường liên kết trên thiết bị di động cho các hành động trong email.
Để khởi chạy một thực thể ActionCodeSettings, hãy cung cấp dữ liệu sau:
| Tham số | Loại | Mô tả |
|---|---|---|
url |
chuỗi | Đặt đường liên kết (state/URL tiếp nối) có ý nghĩa khác nhau trong từng bối cảnh:
|
iOS |
({bundleId: string}|undefined) | Đặt mã nhận dạng gói iOS để giúp Firebase Authentication xác định xem có nên tạo đường liên kết chỉ dành cho web hay liên kết dành cho thiết bị di động được mở trên thiết bị Apple hay không |
android |
({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) | Đặt tên gói Android để giúp Firebase Authentication xác định xem có nên tạo đường liên kết chỉ dành cho web hay liên kết dành cho thiết bị di động được mở trên thiết bị Android hay không |
handleCodeInApp |
(boolean|undefined) | Đường liên kết hành động trong email sẽ được mở trong ứng dụng di động hay đường liên kết trên web trước. Giá trị mặc định là "false". Khi được đặt thành "true", đường liên kết mã hành động sẽ được gửi dưới dạng Đường liên kết phổ quát hoặc Đường liên kết ứng dụng Android và sẽ được ứng dụng mở bởi ứng dụng nếu ứng dụng đó được cài đặt. Trong trường hợp "false", mã sẽ được gửi đến tiện ích trên web trước, sau đó sẽ chuyển hướng đến ứng dụng nếu ứng dụng đó được cài đặt. |
linkDomain |
(string|undefined) | Khi các miền đường liên kết Lưu trữ tuỳ chỉnh được xác định cho một dự án, hãy chỉ định miền cần sử dụng khi đường liên kết được mở bằng một ứng dụng di động cụ thể. Nếu không, miền mặc định sẽ tự động được chọn (ví dụ: PROJECT_ID.firebaseapp.com |
dynamicLinkDomain |
(string|undefined) | Không dùng nữa. Đừng chỉ định tham số này. |
Ví dụ sau minh hoạ cách gửi đường liên kết xác minh email sẽ mở trong ứng dụng di động trước. Đường liên kết sâu sẽ chứa tải trọng URL tiếp nối https://www.example.com/checkout?cartId=1234. Miền đường liên kết tuỳ chỉnh được sử dụng là custom-domain.com. Bạn phải định cấu hình miền này để sử dụng với
Firebase Hosting.Hosting
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',
},
// The domain must be configured in Firebase Hosting and owned by the project.
linkDomain: 'custom-domain.com',
};
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',
)
Bắt đầu
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",
LinkDomain = "coolapp.page.link",
};
Để tìm hiểu thêm, hãy xem bài viết Truyền trạng thái trong các hành động trong email.
Tạo đường liên kết trong email đặt lại mật khẩu
Để tạo đường liên kết đặt lại mật khẩu, hãy cung cấp email của người dùng hiện có và đối tượng ActionCodeSettings không bắt buộc. Thao tác này sẽ phân giải bằng đường liên kết hành động trong email. Email được sử dụng phải thuộc về một người dùng hiện có.
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)
Bắt đầu
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);
Sau khi tạo, bạn có thể chèn đường liên kết này vào email đặt lại mật khẩu tuỳ chỉnh, sau đó gửi email cho người dùng tương ứng bằng máy chủ SMTP tuỳ chỉnh.
Nếu bạn không sử dụng trang đích đặt lại mật khẩu mặc định và đang tạo trình xử lý tuỳ chỉnh của riêng mình, hãy xem bài viết tạo trình xử lý hành động trong email tuỳ chỉnh.
Tạo đường liên kết xác minh email
Để tạo đường liên kết xác minh email, hãy cung cấp email chưa xác minh của người dùng hiện có và đối tượng ActionCodeSettings không bắt buộc. Thao tác này sẽ phân giải bằng đường liên kết hành động trong email.
Email được sử dụng phải thuộc về một người dùng hiện có.
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)
Bắt đầu
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);
Sau khi tạo, bạn có thể chèn đường liên kết này vào email xác minh tuỳ chỉnh, sau đó gửi email cho người dùng tương ứng bằng máy chủ SMTP tuỳ chỉnh.
Nếu bạn không sử dụng trang đích xác minh email mặc định và đang tạo trình xử lý tuỳ chỉnh của riêng mình, hãy xem bài viết tạo trình xử lý hành động trong email tuỳ chỉnh.
Tạo đường liên kết trong email để đăng nhập
Trước khi có thể xác thực người dùng bằng tính năng đăng nhập bằng đường liên kết trong email, bạn cần bật tính năng đăng nhập bằng đường liên kết trong email cho dự án Firebase.
Để tạo đường liên kết đăng nhập, hãy cung cấp email của người dùng và đối tượng ActionCodeSettings. Trong trường hợp này, bạn phải có đối tượng ActionCodeSettings để cung cấp thông tin về nơi trả người dùng về sau khi họ nhấp vào đường liên kết để hoàn tất quá trình đăng nhập. Thao tác này sẽ phân giải bằng đường liên kết hành động trong email.
Không giống như tính năng đặt lại mật khẩu và xác minh email, email được sử dụng không nhất thiết phải thuộc về một người dùng hiện có, vì bạn có thể dùng thao tác này để đăng ký người dùng mới vào ứng dụng của mình thông qua đường liên kết trong email.
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)
Bắt đầu
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);
Sau khi tạo, bạn có thể chèn đường liên kết này vào email đăng nhập tuỳ chỉnh, sau đó gửi email cho người dùng tương ứng bằng máy chủ SMTP tuỳ chỉnh.
Tìm hiểu thêm về cách xác thực người dùng bằng Firebase thông qua đường liên kết trong email. Việc này sẽ giúp cung cấp thông tin về cách hoàn tất quá trình đăng nhập sau khi người dùng nhấp vào đường liên kết và được chuyển hướng trở lại ứng dụng.