Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Tạo liên kết hành động email

Các ứng dụng di động đôi khi cần phải tương tác với người dùng và nhắc họ thực hiện một số hành động nhất định bằng cách gửi email.

SDK quản trị Firebase cung cấp khả năng gửi email cho người dùng có chứa các liên kết họ có thể sử dụng để đặt lại mật khẩu, xác minh địa chỉ email và đăng nhập dựa trên email. Những email này được gửi bởi Google và có khả năng tùy chỉnh hạn chế.

Thay vào đó, nếu bạn muốn sử dụng các mẫu email của riêng bạn và dịch vụ gửi email của riêng bạn, bạn có thể sử dụng SDK quản trị Firebase để tạo lập trình các liên kết hành động cho các luồng trên mà bạn có thể đưa vào email cho người dùng của mình.

Điều này đi kèm với các lợi ích sau:

  • Tùy chỉnh các mẫu email. Điều này bao gồm khả năng thêm kiểu mới và nhãn hiệu tùy chỉnh, thay đổi từ ngữ và logo, địa chỉ 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 tùy thuộc vào ngữ cảnh. Ví dụ: nếu người dùng đang xác minh email của họ để đăng ký nhận bản tin, bối cảnh có thể cần được cung cấp trong nội dung email. Một ví dụ khác là liên kết email đăng nhập: trong một kịch bản, điều này có thể được kích hoạt bởi cùng một người dùng hoặc như một lời mời của người dùng khác. Bối cảnh sẽ cần phải được bao gồm trong email.
  • Bản địa hóa các mẫu email tùy chỉnh.
  • Khả năng tạo liên kết từ một môi trường máy chủ an toàn.
  • Khả năng tùy chỉnh cách mở 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 trạng thái bổ sung, v.v.
  • Khả năng tùy chỉnh miền liên kết động được sử dụng cho các luồng ứng dụng di động khi xây dựng liên kết hành động email và thậm chí chỉ định một miền liên kết động khác tùy thuộc vào ngữ cảnh hoặc ứng dụng di động.

Khởi tạo ActionCodeS Settings

Trước khi bạn có thể tạo một liên kết hành động email, bạn có thể cần phải khởi tạo một thể ActionCodeSettings .

ActionCodeSettings cho phép bạn chuyển trạng thái bổ sung thông qua URL tiếp tục có thể truy cập sau khi người dùng nhấp vào liên kết email. Điều này cũng cung cấp cho người dùng khả năng quay lại ứng dụng sau khi hành động hoàn tất. Ngoài ra, bạn có thể chỉ định nên xử lý liên kết hành động email trực tiếp từ ứng dụng di động khi được cài đặt hoặc từ trình duyệt.

Đối với các liên kết được mở thông qua ứng dụng dành cho thiết bị di động, bạn sẽ cần bật Firebase Dynamic Links và thực hiện một số tác vụ để phát hiện các liên kết này từ ứng dụng di động của bạn. Tham khảo hướng dẫn về cách định cấu hình Liên kết động Firebase cho các hành động email.

Để khởi tạo một phiên bản ActionCodeSettings , hãy cung cấp dữ liệu sau:

Tham số Kiểu Sự miêu tả
url chuỗi

Đặt liên kết (trạng thái / URL tiếp tục) có ý nghĩa khác nhau trong các ngữ cảnh khác nhau:

  • Khi liên kết được xử lý trong widget hành động web, đây là liên kết sâu trong continueUrl tham số truy vấn.
  • Khi liên kết được xử lý trong ứng dụng trực tiếp, đây là continueUrl tham số truy vấn trong liên kết sâu của liên kết động.
iOS ({bundleId: chuỗi} | không xác định) Đặt ID gói iOS. Điều này sẽ cố gắng mở liên kết trong một ứng dụng iOS nếu nó được cài đặt. Ứng dụng iOS cần được đăng ký trong Bảng điều khiển.
android ({góiName: chuỗi, installApp: boolean | không xác định, minimVersion: chuỗi | không xác định} | không xác định) Đặt tên gói Android. Điều này sẽ cố gắng mở liên kết trong một ứng dụng Android nếu nó được cài đặt. Nếu installApp được thông qua, nó sẽ chỉ định có cài đặt ứng dụng Android hay không nếu thiết bị hỗ trợ và ứng dụng chưa được cài đặt. Nếu trường này được cung cấp mà không có packageName , một lỗi được đưa ra giải thích rằng tên packageName phải được cung cấp cùng với trường này. Nếu minimumVersion được chỉ định và phiên bản cũ hơn của ứng dụng được cài đặt, người dùng sẽ được đưa đến Cửa hàng Play để nâng cấp ứng dụng. Ứng dụng Android cần được đăng ký trong Bảng điều khiển.
handleCodeInApp (boolean | không xác định) Cho dù liên kết hành động email sẽ được mở trong một ứng dụng di động hoặc liên kết web trước tiên. Mặc định này sai. Khi được đặt thành đúng, liên kết mã hành động sẽ được gửi dưới dạng Liên kết phổ biến hoặc Liên kết ứng dụng Android và sẽ được ứng dụng mở nếu được cài đặt. Trong trường hợp sai, mã sẽ được gửi đến tiện ích web trước và sau đó tiếp tục sẽ chuyển hướng đến ứng dụng nếu được cài đặt.
dynamicLinkDomain (chuỗi | không xác định) Đặt tên miền liên kết động (hoặc tên miền phụ) để sử dụng cho liên kết hiện tại nếu nó được mở bằng Firebase Dynamic Links. Vì nhiều miền liên kết động có thể được cấu hình cho mỗi dự án, trường này cung cấp khả năng chọn một cách rõ ràng. Nếu không được cung cấp, tên miền cũ nhất được sử dụng theo mặc định.

Ví dụ sau minh họa cách gửi liên kết xác minh email sẽ mở trong ứng dụng di động trước tiên dưới dạng Firebase Dynamic Link (ứng dụng iOS com.example.ios hoặc ứng dụng Android com.example.android nơi ứng dụng sẽ cài đặt nếu chưa được cài đặt và phiên bản tối thiểu là 12). Liên kết sâu sẽ chứa tải trọng URL tiếp tục https://www.example.com/checkout?cartId=1234 . Tên miền liên kết động được sử dụng là coolapp.page.link , phải được cấu hình để sử dụng với Firebase Dynamic Links.

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();
 

Con trăn

 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',
)
 

Đi

 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",
};
 

Để tìm hiểu thêm, hãy xem Trạng thái chuyển qua trong Tác vụ email .

Để tạo 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 tại và một đối tượng ActionCodeSettings tùy chọn. Các hoạt động sẽ giải quyết với các liên kết hành động email. Các 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';
admin.auth().generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, 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());
}
 

Con trăn

 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)
 

Đi

 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 liên kết được tạo, nó có thể được chèn vào email đặt lại mật khẩu tùy chỉnh và sau đó gửi qua email cho người dùng tương ứng bằng máy chủ SMTP tùy chỉnh.

Nếu bạn không sử dụng trang đích đặt lại mật khẩu mặc định và xây dựng trình xử lý tùy chỉnh của riêng bạn, hãy xem tạo trình xử lý hành động email tùy chỉnh .

Để tạo liên kết xác minh email, hãy cung cấp email chưa được xác minh của người dùng hiện tại và một đối tượng ActionCodeSettings tùy chọn. Các hoạt động sẽ giải quyết với các liên kết hành động email. Các 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 email = 'user@example.com';
admin.auth().generatePasswordResetLink(email, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

// Admin SDK API to generate the email verification link.
const useremail = 'user@example.com';
admin.auth().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());
}
 

Con trăn

 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)
 

Đi

 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 liên kết được tạo, nó có thể được chèn vào email xác minh tùy chỉnh và sau đó gửi qua email cho người dùng tương ứng bằng máy chủ SMTP tùy chỉnh.

Nếu bạn không sử dụng trang đích xác minh email mặc định và xây dựng trình xử lý tùy chỉnh của riêng bạn, hãy xem tạo trình xử lý email tùy chỉnh .

Trước khi bạn có thể xác thực người dùng bằng đăng nhập liên kết email, bạn sẽ cần bật đăng nhập liên kết email cho dự án Firebase của mình.

Để tạo liên kết đăng nhập, hãy cung cấp email của người dùng và đối tượng ActionCodeSettings . Đối tượng ActionCodeSettings được yêu cầu trong trường hợp này để cung cấp thông tin về nơi trả lại người dùng sau khi nhấp vào liên kết để hoàn tất đăng nhập. Các hoạt động sẽ giải quyết với các liên kết hành động email.

Không giống như đặ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ề người dùng hiện tại, vì thao tác này có thể được sử dụng để đăng ký người dùng mới vào ứng dụng của bạn thông qua liên kết email.

Node.js

 // Admin SDK API to generate the sign in with email link.
const usremail = 'user@example.com';
admin.auth().generateSignInWithEmailLink(usremail, actionCodeSettings)
  .then((link) => {
    // Construct sign-in with email link template, embed the link and
    // send using custom SMTP server.
    return sendSignInEmail(usremail, 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());
}
 

Con trăn

 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)
 

Đi

 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 liên kết được tạo, nó có thể được chèn vào email đăng nhập tùy chỉnh và sau đó gửi qua email cho người dùng tương ứng bằng máy chủ SMTP tùy chỉnh.

Tìm hiểu thêm về xác thực người dùng với Firebase bằng liên kết email . Điều này sẽ giúp cung cấp thông tin về cách hoàn tất đăng nhập sau khi người dùng nhấp vào liên kết và được chuyển hướng quay lại ứng dụng.