Trạng thái chuyển trong thao tác qua email

Bạn có thể chuyển trạng thái qua URL tiếp tục khi gửi thao tác email để đặt lại mật khẩu hoặc xác minh email của người dùng. Điều này 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 qua email ngay trên ứng dụng dành cho thiết bị di động hay không khi đường liên kết này được cài đặt thay vì qua trang web.

Điều này có thể cực kỳ hữu ích trong các trường hợp phổ biến sau:

  • Người dùng hiện chưa đăng nhập có thể đang cố truy cập vào nội dung yêu cầu người dùng phải đăng nhập. Tuy nhiên, người dùng có thể quên mật khẩu và do đó kích hoạt quy trình đặt lại mật khẩu. Khi kết thúc luồng, người dùng muốn quay lại phần của ứng dụng mà họ đang cố gắng truy cập.

  • Ứng dụng chỉ có thể cung cấp quyền truy cập vào các tài khoản đã xác minh. Ví dụ: một ứng dụng bản tin có thể yêu cầu người dùng xác minh email trước khi đăng ký. Người dùng sẽ thực hiện quy trình xác minh email và muốn được đưa trở lại ứng dụng để hoàn tất gói thuê bao.

  • Nhìn chung, khi người dùng bắt đầu quy trình đặt lại mật khẩu hoặc xác minh email trên một ứng dụng của Apple, họ muốn hoàn tất quy trình trong ứng dụng đó; khả năng chuyển trạng thái thông qua URL tiếp tục giúp điều này xảy ra.

Khả năng chuyển trạng thái qua URL tiếp tục là một tính năng mạnh mẽ mà tính năng Xác thực Firebase cung cấp và có thể cải thiện đáng kể trải nghiệm người dùng.

Chuyển URL trạng thái/tiếp tục trong các hành động email

Để chuyển URL tiếp tục một cách an toàn, miền cho URL đó sẽ cần phải được đưa vào danh sách cho phép trong bảng điều khiển của Firebase. Bạn có thể thực hiện việc này trong phần Xác thực bằng cách thêm miền này vào danh sách Miền được uỷ quyền trong thẻ Phương thức đăng nhập nếu chưa có.

Bạn cần cung cấp một thực thể FIRActionCodeSettings khi gửi email đặt lại mật khẩu hoặc email xác minh. Giao diện này nhận các tham số sau:

Swift

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ó ý nghĩa riêng tuỳ theo ngữ cảnh:

  • Khi đường liên kết được xử lý trong các tiện ích thao tác trên web, đây sẽ là đường liên kết sâu 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 đường liên kết sâu của Đường liên kết động.
iOSBundleID Chuỗi Đặt mã nhận dạng gói. Thao tác này sẽ tìm cách mở đường liên kết trong một ứng dụng của Apple nếu bạn đã cài đặt ứng dụng này. Bạn cần đăng ký ứng dụng này trong Console. Nếu bạn không cung cấp mã nhận dạng gói, thì giá trị của trường này sẽ được đặt thành mã nhận dạng gói của gói chính trong Ứng dụng.
androidPackageName Chuỗi Đặt tên gói Android. Thao tác này sẽ cố mở đường liên kết trong một ứng dụng Android nếu bạn đã cài đặt đường liên kết đó.
androidInstallIfNotAvailable Tiếng Bool Chỉ định việc 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, hệ thống 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.
androidMinimumVersion Chuỗi Phiên bản tối thiểu của ứng dụng được hỗ trợ trong quy trình này. Nếu bạn chỉ địnhMinimumVersion và cài đặt một phiên bản cũ của ứng dụng, thì người dùng sẽ được đưa đến Cửa hàng Play để nâng cấp ứng dụng. Người dùng cần đăng ký ứng dụng Android trong Console.
handleCodeInApp Tiếng Bool Liệu đường liên kết hành động qua email sẽ được mở trong ứng dụng di động hay đường liên kết web trước tiên. Giá trị mặc định là "false". Khi bạn đặt chính sách này thành true, thì đườ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 ứ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, sau đó tiếp tục sẽ chuyển hướng đến ứng dụng nếu đã cài đặt.
dynamicLinkDomain Chuỗi Đặ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ở miền này bằng Đường liên kết động của Firebase. Vì có thể định cấu hình nhiều miền liên kết động cho mỗi dự án, nên trường này cho phép bạn chọn rõ ràng một miền. Nếu không có miền nào được cung cấp, miền đầu tiên sẽ được sử dụng theo mặc định.

Objective-C

Thông số Loại Mô tả
URL NSString

Đặt đường liên kết (URL trạng thái/URL tiếp tục) có ý nghĩa riêng tuỳ theo ngữ cảnh:

  • Khi đường liên kết được xử lý trong các tiện ích thao tác trên web, đây sẽ là đường liên kết sâu 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 đường liên kết sâu của Đường liên kết động.
iOSBundleID NSString Đặt mã nhận dạng gói. Thao tác này sẽ tìm cách mở đường liên kết trong một ứng dụng của Apple nếu bạn đã cài đặt ứng dụng này. Bạn cần đăng ký ứng dụng này trong Console.
androidPackageName NSString Đặt tên gói Android. Thao tác này sẽ cố mở đường liên kết trong một ứng dụng Android nếu bạn đã cài đặt đường liên kết đó.
androidInstallIfNotAvailable HOẠT ĐỘNG 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, hệ thống 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.
androidMinimumVersion NSString Phiên bản tối thiểu của ứng dụng được hỗ trợ trong quy trình này. Nếu bạn chỉ địnhMinimumVersion và cài đặt một phiên bản cũ của ứng dụng, thì người dùng sẽ được đưa đến Cửa hàng Play để nâng cấp ứng dụng. Người dùng cần đăng ký ứng dụng Android trong Console.
handleCodeInApp HOẠT ĐỘNG Liệu đường liên kết hành động qua email sẽ được mở trong ứng dụng di động hay đường liên kết web trước tiên. Giá trị mặc định là "false". Khi bạn đặt chính sách này thành true, thì đườ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 ứ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, sau đó tiếp tục sẽ chuyển hướng đến ứng dụng nếu đã cài đặt.
dynamicLinkDomain NSString Đặ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ở miền này bằng Đường liên kết động của Firebase. Vì có thể định cấu hình nhiều miền liên kết động cho mỗi dự án, nên trường này cho phép bạn chọn rõ ràng một miền. Nếu không có miền nào được cung cấp, miền đầu tiên sẽ đượ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ở trước tiên trong ứng dụng di động dưới dạng Đường liên kết động của Firebase bằng cách sử dụng miền liên kết động tuỳ chỉnh example.page.link (ứng dụng iOS 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/?email=user@example.com.

Swift


var actionCodeSettings =  ActionCodeSettings.init()
actionCodeSettings.canHandleInApp = true
let user = Auth.auth().currentUser()
actionCodeSettings.URL =
    String(format: "https://www.example.com/?email=%@", user.email)
actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier!
actionCodeSettings.setAndroidPakageName("com.example.android",
                                         installIfNotAvailable:true,
                                         minimumVersion:"12")
// When multiple custom dynamic link domains are defined, specify which one to use.
actionCodeSettings.dynamicLinkDomain = "example.page.link"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Objective-C

 FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
 actionCodeSettings.handleCodeInApp = YES;
 FIRUser *user = [FIRAuth auth].currentUser;
 NSString *urlString =
     [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email];
 actionCodeSettings.URL = [NSURL URLWithString:urlString];
 actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
 // When multiple custom dynamic link domains are defined, specify which one to use.
 actionCodeSettings.dynamicLinkDomain = @"example.page.link";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"
                     installIfNotAvailable:YES
                            minimumVersion:'12'];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

Tính năng Xác thực Firebase sử dụng Đường liên kết động của Firebase khi gửi đường liên kết sẽ được mở trong ứng dụng dành cho thiết bị di động. Để sử dụng tính năng này, bạn cần định cấu hình Đường liên kết động trong Bảng điều khiển của Firebase.

  1. Bật liên kết động của Firebase:

    1. Trong bảng điều khiển của Firebase, hãy mở mục Đường liên kết động.
    2. Nếu bạn chưa chấp nhận các điều khoản về Đường liên kết động và tạo một miền Đường liên kết động, hãy thực hiện ngay.

      Nếu bạn đã tạo một miền Đường liên kết động, hãy ghi lại miền đó. Miền Liên kết động thường có dạng như ví dụ sau:

      example.page.link

      Bạn sẽ cần giá trị này khi định cấu hình ứng dụng Apple hoặc Android để chặn đường liên kết đến.

  2. Định cấu hình ứng dụng Android:

    1. Nếu dự định xử lý các đường liên kết này từ ứng dụng Android của mình, bạn cần chỉ định tên gói Android trong phần cài đặt dự án trên Bảng điều khiển của Firebase. Ngoài ra, bạn cần cung cấp SHA-1 và SHA-256 của chứng chỉ ứng dụng.
    2. Bạn cũng sẽ cần định cấu hình bộ lọc ý định cho đường liên kết sâu trong tệp AndroidManifest.xml.
    3. Để biết thêm thông tin về nội dung này, hãy tham khảo bài viết Nhận hướng dẫn về Đường liên kết động của Android.
  3. Định cấu hình các ứng dụng của Apple:

    1. Nếu dự định xử lý các đường liên kết này từ ứng dụng của mình, thì bạn cần chỉ định mã gói trong phần cài đặt dự án trên Bảng điều khiển của Firebase. Ngoài ra, bạn cũng cần chỉ định Mã cửa hàng ứng dụng và Mã nhóm nhà phát triển của Apple.
    2. Bạn cũng cần định cấu hình miền đường liên kết phổ quát FDL dưới dạng Miền được liên kết trong các chức năng của ứng dụng.
    3. Nếu dự định phân phối ứng dụng sang iOS phiên bản 8 trở xuống, bạn cần đặt mã nhận dạng gói dưới dạng lược đồ tuỳ chỉnh cho các URL nhận được.
    4. Để biết thêm thông tin về nội dung này, hãy tham khảo bài viết Hướng dẫn về cách nhận Đường liên kết động trên các nền tảng của Apple.

Xử lý các hành động với email trong ứng dụng web

Bạn có thể chỉ định xem bạn có muốn xử lý đường liên kết đến mã hành động từ một ứng dụng web trước rồi chuyển hướng đến một trang web hoặc ứng dụng dành cho thiết bị di động khác sau khi hoàn tất thành công hay không, miễn là ứng dụng dành cho thiết bị di động đó có sẵn. Bạn có thể thực hiện việc này bằng cách đặt handleCodeInApp thành false trong đối tượng FIRActionCodeSettings (Obj-C) hoặc ActionCodeSettings (Swift). Mặc dù không bắt buộc phải có mã nhận dạng gói hoặc tên gói Android, nhưng việc cung cấp các mã này sẽ cho phép người dùng chuyển hướng trở lại ứng dụng đã chỉ định khi hoàn tất mã thao tác qua email.

URL web sử dụng ở đây là URL được định cấu hình trong phần mẫu thao tác qua email. Một tài sản mặc định được cấp phép cho mọi dự án. Hãy tham khảo bài viết tuỳ chỉnh trình xử lý email để tìm hiểu thêm về cách tuỳ chỉnh trình xử lý thao tác qua email.

Trong trường hợp này, đường liên kết trong tham số truy vấn continueURL sẽ là đường liên kết FDL có tải trọng là URL được chỉ định trong đối tượng ActionCodeSettings. Mặc dù có thể chặn và xử lý đường liên kết đến từ ứng dụng mà không cần thêm phần phụ thuộc nào khác, nhưng bạn nên sử dụng thư viện ứng dụng FDL để phân tích cú pháp đường liên kết sâu.

Khi xử lý các thao tác qua email như xác minh email, mã thao tác từ tham số truy vấn oobCode cần được phân tích cú pháp từ đường liên kết sâu, sau đó áp dụng qua applyActionCode để thay đổi có hiệu lực, tức là email cần được xác minh.

Xử lý các hành động với email trong ứng dụng dành cho thiết bị di động

Bạn có thể chỉ định xem bạn có muốn xử lý đường liên kết đến mã thao tác trong ứng dụng dành cho thiết bị di động trước hay không, miễn là đường liên kết đó đã được cài đặt. Với ứng dụng Android, bạn cũng có thể chỉ định qua androidInstallIfNotAvailable rằng ứng dụng sẽ được cài đặt nếu thiết bị hỗ trợ và chưa cài đặt ứng dụng. Nếu người dùng nhấp vào đường liên kết trên một thiết bị không hỗ trợ ứng dụng di động, thì đường liên kết đó sẽ được mở trên một trang web. Bạn có thể thực hiện việc này bằng cách đặt handleCodeInApp thành true trong đối tượng FIRActionCodeSettings (Obj-C) hoặc ActionCodeSettings (Swift). Bạn cũng cần chỉ định tên gói hoặc mã nhận dạng gói Android của ứng dụng di động.URL web dự phòng được dùng tại đây (khi không có ứng dụng di động) sẽ là URL được định cấu hình trong phần mẫu thao tác qua email. Một quy tắc mặc định được cấp cho mọi dự án. Hãy tham khảo bài viết tuỳ chỉnh trình xử lý email để tìm hiểu thêm về cách tuỳ chỉnh trình xử lý thao tác qua email.

Trong trường hợp này, đường liên kết ứng dụng di động gửi đến người dùng sẽ là đường liên kết FDL có tải trọng là URL mã hành động, được định cấu hình trong Bảng điều khiển, với các tham số truy vấn oobCode, mode, apiKeycontinueUrl. Miền sau sẽ là URL gốc được chỉ định trong đối tượng FIRActionCodeSettings (Obj-C) hoặc ActionCodeSettings (Swift). Mặc dù có thể chặn và xử lý đường liên kết đến từ ứng dụng mà không cần thêm phần phụ thuộc nào khác, nhưng bạn nên sử dụng thư viện ứng dụng FDL để phân tích cú pháp đường liên kết sâu đó. Bạn có thể áp dụng mã hành động trực tiếp từ ứng dụng di động, tương tự như cách xử lý mã từ luồng web được mô tả trong phần tuỳ chỉnh trình xử lý email.

Khi xử lý các thao tác qua email như xác minh email, mã thao tác từ tham số truy vấn oobCode cần được phân tích cú pháp từ đường liên kết sâu, sau đó áp dụng qua applyActionCode để thay đổi có hiệu lực, tức là email cần được xác minh.