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 đối với mật khẩu đặt lại 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 liên kết hành động qua email trực tiếp từ ứng dụng dành cho thiết bị di động khi nó sẽ được cài đặt thay cho một 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ố gắng truy cập 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. Ở cuối luồng, người dùng muốn quay lại phần ứ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 cho những tài khoản đã xác minh. Ví dụ: ứng dụng bản tin có thể yêu cầu người dùng xác minh email của họ trước khi đăng ký. Người dùng sẽ thực hiện quy trình xác minh email và kỳ vọng quay trở lại ứng dụng để hoàn tất gói thuê bao của họ.

  • 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 mà họ muốn hoàn thành luồng trong ứng dụng; khả năng trạng thái chuyển thông qua URL tiếp tục giúp thực hiện điều này.

Có 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ẽ 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.

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

Để chuyển URL tiếp tục một cách an toàn, miền cho URL cần phải có trong danh sách cho phép trong bảng điều khiển 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 phần 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 có các thông 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ó các ý nghĩa khác nhau trong các ngữ cảnh khác nhau:

  • Khi đường liên kết được xử lý trong tiện ích hành động trên web, đây 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 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ẽ 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. Ứng dụng cần được đăng ký trong Console. Nếu bạn không cung cấp giá trị Mã gói, thì giá trị của trường này sẽ được đặt thành mã gói của gói chính của Ứng dụng.
androidPackageName Chuỗi Đặt tên gói Android. Thao tác này sẽ cố gắng mở đường liên kết trong một ứng dụng Android nếu ứng dụng đó đã được cài đặt.
androidInstallIfNotAvailable Bool 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, sẽ xảy ra lỗi giải thích rằng packageName phải được đượ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 tối thiểu phiên bản được chỉ định và một phiên bản cũ hơn của ứng dụng được cài đặt, người dùng được chuyển đế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 Bool Liệu đường liên kết hành động trong email sẽ được mở trong ứng dụng dành cho thiết bị di động hay đường liên kết web trước. 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, 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ở 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 bạn không cung cấp miền nào, thì 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 (trạng thái/tiếp tục URL) có ý nghĩa khác nhau trong các ngữ cảnh:

  • Khi đường liên kết được xử lý trong tiện ích hành động trên web, đây 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ẽ cố gắng 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 đó. Ứng dụng cần được đăng ký trong Console.
androidPackageName NSString Đặt tên gói Android. Thao tác này sẽ cố gắng mở đường liên kết trong một ứng dụng Android nếu ứng dụng đó đã được cài đặt.
androidInstallIfNotAvailable LOA chỉ định xem 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, sẽ xảy ra lỗi giải thích rằng packageName phải được đượ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ỉ định minimumVersion và cài đặt một phiên bản ứng dụng cũ hơn, người dùng sẽ được chuyển đế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 LOA Liệu đường liên kết hành động trong email sẽ được mở trong ứng dụng dành cho thiết bị di động hay đường liên kết web trước. Giá trị mặc định là false. Khi được đặt thành đúng, đường liên kết 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 ứ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 rồi tiếp tục sẽ được chuyển hướng đến ứng dụng. .
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ở tài khoả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 một miền một cách rõ ràng. Nếu bạn không cung cấp miền nào, thì miền đầu tiên sẽ được sử dụng theo mặc định.

Ví dụ sau đây minh hoạ cách gửi đường liên kết xác minh qua email. Trước tiên, đường liên kết này sẽ mở 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 đường 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 Liên kết động Firebase khi gửi một được mở trong ứng dụng dành cho thiết bị di động. Để sử dụng . Bạn cần định cấu hình Liên kết động trong Bảng điều khiển của Firebase.

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

    1. Trong bảng điều khiển của Firebase, hãy mở phần Dynamic Links.
    2. Nếu bạn chưa chấp nhận các điều khoản của Dynamic Links và tạo miền Dynamic Links, hãy làm như vậy ngay bây giờ.

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

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

Xử lý các thao tác liên quan đến email trong ứng dụng web

Bạn có thể chỉ định xem trước tiên bạn có muốn xử lý đường liên kết mã hành động từ một ứng dụng web hay không, sau đó chuyển hướng đến một trang web hoặc ứng dụng di động khác sau khi hoàn tất thành công, miễn là ứng dụng 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). Trong khi mã nhận dạng gói hoặc tên gói Android là không bắt buộc, miễn là chúng 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ã hành động qua email.

URL web dùng ở đây là URL được định cấu hình trong các mẫu thao tác với email . Một tài sản mặc định được cấp phép cho mọi dự án. Tham khảo 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 bên 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 ActionCodeSettings . Mặc dù bạn có thể chặn và xử lý đường liên kết đến từ ứng dụng của mình mà không cần thêm phần phụ thuộc nào, 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ã hành động trong Tham số truy vấn oobCode cần được phân tích cú pháp từ đường liên kết sâu, rồi á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

Trước tiên, bạn có thể chỉ định xem có muốn xử lý đường liên kết mã hành động trong ứng dụng dành cho thiết bị di động hay không, miễn là ứng dụng đó đã được cài đặt. Với các ứng dụng Android, bạn cũng có thể chỉ định thông qua androidInstallIfNotAvailable rằng ứng dụng sẽ được cài đặt nếu thiết bị hỗ trợ ứng dụng đó và ứng dụng chưa được cài đặt. 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ợ thiết bị di động ứng dụng, ứng dụng đó sẽ được mở từ 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 Android hoặc mã gói của ứng dụng di động. URL web dự phòng được sử dụng ở đây (khi không có ứng dụng di động) là URL được định cấu hình trong phần mẫu hành động qua email. Vị trí mặc định là được cung cấp cho tất cả dự án. Tham khảo 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 đến ứng dụng di động được gửi đến người dùng sẽ là một đường liên kết FDL có tải trọng là URL mã hành động, được định cấu hình trong Console, với các tham số truy vấn oobCode, mode, apiKeycontinueUrl. Chính sách quyền riêng tư sẽ là URL ban đầu được chỉ định trong FIRActionCodeSettings (Obj-C) hoặc Đối tượng ActionCodeSettings (Swift). Mặc dù bạn có thể chặn và xử lý từ ứng dụng của bạn mà không có bất kỳ phần phụ thuộc nào khác, thì bạn nên bằng cách sử dụng thư viện ứng dụng FDL để phân tích cú pháp đường liên kết sâu cho bạn. Bạn có thể áp dụng mã hành động trực tiếp từ một ứng dụng di động tương tự như cách xử lý mã hành động từ luồng web được mô tả trong phần tuỳ chỉnh trình xử lý email.

Khi xử lý các hành động liên quan đến email, chẳng hạn như xác minh email, bạn cần phân tích cú pháp mã hành động từ tham số truy vấn oobCode 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 sẽ được xác minh.