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

Ứ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 nhất định bằng cách gửi email.

SDK khách 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 dựa trên mẫu 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 mẫu email và dịch vụ gửi email của riêng mình, trang này sẽ giải thích cách 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 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 tượ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 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 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 một người dùng khác. Bối cảnh sẽ cần phải được đưa vào 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 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 dành cho thiết bị di động.

Khởi tạo ActionCodeSettings

Trước khi 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 chuyển 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 hành động hoàn tất. Ngoài ra, bạn có thể chỉ định xử lý liên kết hành động email trực tiếp từ ứng dụng di động khi ứng dụng này được cài đặt hay 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 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 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 sợi dây

Đặt liên kết (URL trạng thái/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 tiện ích hành động trên 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à tham số truy vấn continueUrl trong liên kết sâu của Liên kết động.
iOS ({bundleId: string}|không xác định) Đặt ID gói. Điều này sẽ cố gắng mở liên kết trong ứng dụng Apple nếu nó được cài đặt. Ứng dụng cần phải được đăng ký trong Bảng điều khiển.
android ({packageName: chuỗi, installApp:boolean|không xác định, phiên bản tối thiểu: 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ố gắng mở liên kết trong ứng dụng Android nếu ứng dụng này được cài đặt. Nếu installApp được thông qua, nó sẽ chỉ định xem có cài đặt ứng dụng Android hay không nếu thiết bị hỗ trợ ứng dụ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 thì sẽ xảy ra lỗi giải thích rằng 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 thì người dùng sẽ được đưa tới Cửa hàng Play để nâng cấp ứng dụng. Ứng dụng Android cần phải được đăng ký trong Bảng điều khiển.
handleCodeInApp (boolean|không xác định) Liên kết hành động email sẽ được mở trong ứng dụng di động hay liên kết web trước tiên. 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, 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 tên 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ì nhiều miền liên kết động có thể được cấu hình cho mỗi dự án nên trường này cung cấp khả năng chọn một miền một cách rõ ràng. Nếu không được cung cấp thì tên 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 Apple 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 Chuyển trạng thái 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ẽ được giải quyết bằng liên kết hành động qua email. Email được sử dụng phải thuộc về 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)

Đ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 đó đượ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à xây dựng trình xử lý tùy chỉnh của riêng mình, hãy xem cách 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ẽ được giải quyết bằng liên kết hành động qua email. Email được sử dụng phải thuộc về 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)

Đ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 đó đượ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à xây dựng trình xử lý tùy chỉnh của riêng mình, hãy xem cách 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 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. Thao tác sẽ được giải quyết bằ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ề 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 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)

Đ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 đó đượ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 bằng 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.