Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

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

Các ứng dụng dành cho thiết bị di động đôi khi 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 quản trị Firebase cung cấp khả năng gửi cho người dùng email chứa các liên kết 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. Những email này do Google gửi 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 mình và dịch vụ gửi email của riêng mình, bạn có thể sử dụng SDK quản trị Firebase để tạo liên kết hành động theo chương trình 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 những 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à 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 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, ngữ cảnh có thể cần được cung cấp trong nội dung email. Một ví dụ khác là đăng nhập liên kết email: trong một trường hợp, điều này có thể được kích hoạt bởi cùng một người dùng hoặc dưới dạng lời mời của người dùng khác. Bối cảnh sẽ cần đượ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ô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 chuyể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 dành cho thiết bị di động khi tạo liên kết tác vụ email và thậm chí chỉ định miền 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 tạo ActionCodeSettings

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

ActionCodeSettings cho phép bạn vượt qua trạng thái bổ sung thông qua URL tiếp tục có thể truy cập được 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 hoàn thành hành động. Ngoài ra, bạn có thể chỉ định xem có xử lý liên kết tác vụ email trực tiếp từ ứng dụng di động khi nó được cài đặt hay từ trình duyệt hay không.

Đố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 cần bật Liên kết động Firebase 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 dành cho thiết bị di động của mình. Tham khảo hướng dẫn về cách định cấu hình Liên kết động Firebase cho các tác vụ email.

Để khởi tạo 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 (URL trạng thái / 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 tác vụ web, đây là liên kết sâu trong tham số truy vấn continueUrl .
  • Khi liên kết được xử lý trực tiếp trong ứng dụng, đây là thông số truy vấn continueUrl trong liên kết sâu của Liên kết động.
iOS ({packId: string} | không xác định) Đặt ID gói iOS. Thao tác này sẽ cố gắng mở liên kết trong ứ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 ({packageName: string, installApp: boolean | undefined, MinimumVersion: string | undefined} | undefined) Đặt tên gói Android. Thao tác này sẽ cố gắng mở liên kết trong ứ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ó tên packageName , thì sẽ xảy ra lỗi 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 | undefined) Trước tiên, liên kết hành động email sẽ được mở trong ứng dụng di động hay liên kết web. Mặc định này sai. Khi được đặt thành true, liên kết mã hành động sẽ được gửi dưới dạng Liên kết chung 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 tiên 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 miền liên kết động (hoặc miền phụ) để sử dụng cho liên kết hiện tại nếu nó được mở bằng Liên kết động Firebase. Vì có thể định cấu hình nhiều miền liên kết động 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ó miền nào được cung cấp, miền cũ nhất sẽ đượ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 Liên kết động Firebase (ứ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 . Miền liên kết động được sử dụng là coolapp.page.link , miền này phải được định cấu hình để sử dụng với Liên kết động 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',
)

Đ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 vượt 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à đối tượng ActionCodeSettings tùy chọn. Thao tác sẽ giải quyết bằng liên kết hành động email. Email được sử dụng phải thuộc về 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());
}

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)

Đ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, liên kết có thể được chèn vào email đặt lại mật khẩu tùy chỉnh và sau đó được 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à tạo trình xử lý tùy chỉnh của riêng mình, 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à đối tượng ActionCodeSettings tùy chọn. Thao tác sẽ giải quyết bằng liên kết hành động email. Email được sử dụng phải thuộc về 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());
}

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)

Đ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, liên kết có thể được chèn vào email xác minh tùy chỉnh và sau đó được 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à tạo trình xử lý tùy chỉnh của riêng mình, hãy xem tạo trình xử lý hành động email tùy chỉnh .

Trước khi có thể xác thực người dùng bằng đăng nhập liên kết email, bạn 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 liên kết được nhấp để hoàn tất đăng nhập. Thao tác sẽ giải quyết bằng 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 có 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 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());
}

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)

Đ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, liên kết có thể được chèn vào email đăng nhập tùy chỉnh và sau đó được 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ề cách 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 trở lại ứng dụng.