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

Đô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 bằng cách gửi email.

SDK ứng dụng của Firebase cung cấp khả năng gửi cho người dùng email có chứa mà 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. Các email dựa trên mẫu này do Google gửi và có khả năng tuỳ chỉnh bị hạn chế.

Nếu bạn muốn sử dụng các mẫu email của riêng mình và khả năng gửi email của riêng bạn trang web này giải thích cách sử dụng SDK quản trị của Firebase để tạo liên kết hành động cho các quy trình ở trên theo cách lập trình mà bạn có thể gửi vào email gửi cho người dùng.

Điều này đi kèm với những lợi ích sau:

  • Tuỳ chỉnh mẫu email. Điều này bao gồm khả năng thêm kiểu mới và xây dựng thương hiệu tuỳ chỉnh, thay đổi từ ngữ và biểu trưng, đề cập đến người dùng bằng tên họ và tên, v.v.
  • Áp dụng các mẫu khác nhau tuỳ theo ngữ cảnh. Ví dụ: nếu người dùng là xác minh email để đăng ký nhận bản tin thì ngữ cảnh có thể cần phải được cung cấp 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 tình huống này có thể do cùng một người dùng kích hoạt hoặc dưới dạng lời mời của một người khác người dùng. Bạn cần phải thêm bối cảnh vào email.
  • Bản địa hoá 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ủ bảo mật.
  • Có thể tuỳ chỉnh cách mở đường liên kết, thông qua ứng dụng dành cho thiết bị di động hoặc trình duyệt và cách chuyển thông tin bổ sung về trạng thái, v.v.
  • Khả năng tuỳ chỉnh miền đường liên kết động dùng cho các luồng ứng dụng di động khi tạo đường liên kết hành động qua email và thậm chí chỉ định một đường liên kết động khác tùy thuộc vào ngữ cảnh hoặc ứng dụng dành cho thiết bị di động.

Khởi chạy ActionCodeSettings

Để có thể tạo đường liên kết hành động qua email, bạn có thể cần khởi chạy một Thực thể ActionCodeSettings.

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

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

Để khởi tạo một thực thể ActionCodeSettings, hãy cung cấp dữ liệu sau:

Thông số Loại Mô tả
url chuỗi

Đặt đường liên kết (URL trạng thái/URL tiếp tục) có 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 các tiện ích thao tác trên web, đây là trong tham số truy vấn continueUrl.
  • Khi đường liên kết được xử lý trực tiếp trong ứng dụng, đây là Tham số truy vấn continueUrl trong liên kết sâu của Đường liên kết động.
iOS ({bundleId: string}|không xác định) Đặt mã nhận dạng gói. Thao tác này sẽ cố mở đường liên kết trong một ứng dụng của Apple nếu ứng dụng sẽ được cài đặt. Bạn cần đăng ký ứng dụng này trong Console.
android ({packageName: string, installApp:boolean|không xác định, MinimumVersion: chuỗi|không xác định}|không xác định) Đặt tên gói Android. Thao tác này sẽ cố mở đường liên kết trong Ứng dụng Android nếu ứng dụng này đã được cài đặt. Nếu installApp được truyền, thì chỉ định xem có cài đặt ứng dụng Android nếu thiết bị hỗ trợ hay không 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, sẽ xảy ra một lỗi giải thích rằng Bạn phải cung cấp packageName cùng với trường này. Nếu bạn chỉ định minimumVersion và một phiên bản cũ của sau khi cài đặt xong, người dùng sẽ được đưa đến Cửa hàng Play để nâng cấp ứng dụng. Bạn cần đăng ký ứng dụng Android trong Console.
handleCodeInApp (boolean|không xác định) Đường liên kết hành động liên quan đến email sẽ được mở trong ứng dụng di động hay web liên kết đầu tiên. Giá trị mặc định là "false". Khi bạn đặt chính sách này thành true, đường liên kết đến 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 trong ứng dụng Android và sẽ được mở của ứng dụng nếu đã cài đặt. Trong trường hợp sai, mã sẽ được gửi đến tiện ích web trước rồi tiếp tục sẽ được chuyển hướng đến ứng dụng. .
dynamicLinkDomain (chuỗi|không xác định) Đặt miền đường liên kết động (hoặc miền con) để sử dụng cho đường liên kết hiện tại nếu bạn mở tài khoản đó bằng Liên kết động của Firebase. Dưới dạng nhiều thành phần linh động có thể định cấu hình các miền liên kết theo từng 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ó miền nào được cung cấp, thì miền cũ nhất được sử dụng theo mặc định.

Ví dụ sau minh hoạ cách gửi đường liên kết xác minh qua email sẽ mở trong ứng dụng dành cho thiết bị di động trước tiên dưới dạng Liên kết động Firebase (Apple ứng dụng com.example.ios hoặc ứng dụng Android com.example.android, trong đó ứ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). Đường 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. Miền liên kết động được sử dụng là coolapp.page.link, bạn phải định cấu hình để sử dụng với Firebase Dynamic Đường liên kết.

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

Tiến hành

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 trong thao tác qua email.

Để tạo đường liên kết đặt lại mật khẩu, hãy cung cấp địa chỉ email của người dùng hiện tại và đối tượng ActionCodeSettings không bắt buộc. Thao tác sẽ được giải quyết bằng email hành động. Email bạn dùng phải thuộc về một người dùng hiện tại.

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)

Tiến hành

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 vào mục đặt lại mật khẩu tuỳ chỉnh email rồi gửi email tới 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à tạo trình xử lý tuỳ chỉnh riêng, hãy xem tạo trình xử lý thao tác tuỳ chỉnh cho email.

Để tạo đường liên kết xác minh email, hãy cung cấp thông tin chưa được xác minh của người dùng hiện tại email và một đối tượng ActionCodeSettings (không bắt buộc). Thao tác sẽ giải quyết bằng đường liên kết hành động qua email. Email bạn dùng phải thuộc về một người dùng hiện tại.

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)

Tiến hành

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 quy trình xác minh tuỳ chỉnh email rồi gửi email tới 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 và phiên bản xác minh email mặc định trình xử lý tùy chỉnh của riêng bạn, hãy xem tạo trình xử lý thao tác tuỳ chỉnh cho email.

Để có thể xác thực người dùng bằng thông tin đăng nhập bằng đường liên kết email, bạn cần bật tính năng đăng nhập bằng đường liên kết email cho dự án Firebase của bạn.

Để tạo đường liên kết đăng nhập, hãy cung cấp địa chỉ email của người dùng và ActionCodeSettings . Trong trường hợp này, bạn bắt buộc phải có đối tượng ActionCodeSettings để cung cấp thông tin về nơi trả lại người dùng sau khi nhấp vào đường liên kết để đăng nhập hoàn thành. Thao tác này sẽ được giải quyết bằng đường liên kết hành động qua 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ề một 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 qua liên kết 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)

Tiến hành

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 đó vào email đăng nhập tuỳ chỉnh rồi gửi email tới người dùng tương ứng bằng máy chủ SMTP tuỳ chỉnh.

Tìm hiểu thêm về xác thực người dùng bằng Firebase bằng đườ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 quy trình đăng nhập sau khi người dùng nhấp vào đường liên kết rồi được chuyển hướng trở lại ứng dụng.