Trạng thái chuyển trong tác vụ email

Bạn có thể chuyển trạng thái qua URL tiếp tục khi gửi các thao tác qua email để đặt lại mật khẩu hoặc xác minh email của người dùng. Điều này giúp người dùng có thể quay lại ứng dụng sau khi hoàn tất thao tác. Ngoài ra, bạn có thể chỉ định xem có xử lý đường liên kết thao tác email trực tiếp từ ứng dụng dành cho thiết bị di động hay không khi ứng dụng đó được cài đặt thay vì 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 đây:

  • 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 của họ và do đó kích hoạt quy trình đặt lại mật khẩu. Vào cuối 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ể cấp quyền truy cập vào các tài khoản đã xác minh. Ví dụ: một 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à mong muốn quay lại ứng dụng để hoàn tất gói thuê bao.

  • Trong các trường hợp khác, người dùng có thể đã bắt đầu quy trình từ thiết bị di động và mong đợi sau khi xác minh sẽ quay lại ứng dụng dành cho thiết bị di động thay vì trình duyệt.

Khả năng chuyển trạng thái qua URL liên 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ể giúp nâng cao đáng kể trải nghiệm người dùng.

URL chuyển trạng thái/tiếp tục trong các tác vụ email

Để chuyển URL tiếp tục một cách an toàn, miền cho URL 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ể ActionCodeSettings khi gửi email đặt lại mật khẩu hoặc email xác minh. Bạn có thể tạo lớp này bằng lớp ActionCodeSettings.Builder được liên kết, chứa các phương thức sau:

Phương thức Mô tả
setUrl(String url)

Đặt đường 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 đường liên kết được xử lý trong các tiện ích thao tác 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.
setIOSBundleId(String iOSBundleId) Đặt mã nhận dạng gói iOS. Thao tác này sẽ cố mở đường liên kết trong một ứng dụng iOS nếu ứng dụng đó đã được cài đặt. Bạn cần đăng ký ứng dụng iOS trong Console.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Đặt tên gói Android. Thao tác này sẽ tìm cách mở đường liên kết trong một ứng dụng Android nếu ứng dụng đó đã được cài đặt. Nếu bạn đặt installIfNotAvailable thành true, thì hệ thống sẽ chỉ định xem có cài đặt ứng dụng Android hay không nếu thiết bị có hỗ trợ ứng dụng đó và ứng dụng chưa được cài đặt. Nếu bạn chỉ định OptimizeVersion và một phiên bản cũ hơn của ứng dụng được cài đặt, thì 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.
setHandleCodeInApp(boolean status) Trước tiên, đường liên kết đến 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 trên web. 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 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ài đặt. Trong trường hợp sai, mã sẽ được gửi tới 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.
setDynamicLinkDomain(String dynamicLinkDomain) Đặt miền 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 đường liên kết đó được mở bằng Đường liên kết động của Firebase. Vì bạn 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 cung cấp khả năng chọn một cách rõ ràng. Nếu không có tuỳ chọn nào được cung cấp, thì 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 email sẽ mở trong ứng dụng dành cho thiết bị di động trước tiên dưới dạng Đường liên kết động Firebase (ứng dụng iOS com.example.ios hoặc ứng dụng Android com.example.android). Đườ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.

Kotlin+KTX

val auth = Firebase.auth
val user = auth.currentUser!!

val url = "http://www.example.com/verify?uid=" + user.uid
val actionCodeSettings = ActionCodeSettings.newBuilder()
    .setUrl(url)
    .setIOSBundleId("com.example.ios")
    // The default for this is populated with the current android package name.
    .setAndroidPackageName("com.example.android", false, null)
    .build()

user.sendEmailVerification(actionCodeSettings)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Email sent.")
        }
    }

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

String url = "http://www.example.com/verify?uid=" + user.getUid();
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
        .setUrl(url)
        .setIOSBundleId("com.example.ios")
        // The default for this is populated with the current android package name.
        .setAndroidPackageName("com.example.android", false, null)
        .build();

user.sendEmailVerification(actionCodeSettings)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

Tính năng Xác thực Firebase sử dụ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 phải đị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 Liên kết động, hãy ghi lại miền này. 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 của 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 định xử lý các đường liên kết này từ ứng dụng Android, 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ũng cần cung cấp SHA-1 và SHA-256 của chứng chỉ ứng dụng.
    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.
    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 ứng dụng iOS:

    1. Nếu định xử lý các đường liên kết này từ ứng dụng iOS của mình, bạn cần chỉ định mã gói iOS trong phần cài đặt dự á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 liên kết chung 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 cho iOS phiên bản 8 trở xuống, bạn sẽ cần đặt mã nhận dạng gói iOS dưới dạng một lược đồ tuỳ chỉnh cho các URL đến.
    4. Để biết thêm về vấn đề này, hãy tham khảo bài viết Nhận hướng dẫn về Đường liên kết động dành cho iOS.

Xử lý các hành động trên email trong ứng dụng web

Bạn có thể chỉ định xem bạn muốn xử lý đường liên kết mã thao tác 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 di động khác sau khi hoàn tất thành công, miễn là có ứng dụng di động đó. Bạn có thể thực hiện việc này bằng cách gọi setHandleCodeInApp(false) trong đối tượng ActionCodeSettings.Builder. Mặc dù không bắt buộc phải có mã nhận dạng gói iOS hoặc tên gói trên 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 được sử dụng ở đây là URL được định cấu hình trong phần mẫu hành động đối với email. Một mã mặc định được cấp phép cho tất cả 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 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 của mình mà không cần thêm bất kỳ 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ã 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, rồi áp dụng thông qua applyActionCode để thay đổi có hiệu lực, tức là email được xác minh.

Xử lý các hành động trên 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 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 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 boolean installIfNotAvailable 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 từ một thiết bị không hỗ trợ ứng dụng di động, thì đường liên kết đó sẽ được mở từ một trang web. Bạn có thể thực hiện việc này bằng cách gọi setHandleCodeInApp(true) trong đối tượng ActionCodeSettings.Builder. Bạn cũng cần chỉ định tên gói Android hoặc mã nhận dạng gói iOS 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 thao tác đối với email. Một mã mặc định được cấp phép cho tất cả 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 email.

Trong trường hợp này, đường liên kết trong ứng dụng dành cho thiết bị di động được gửi đến người dùng sẽ là đường liên kết FDL có tải trọng là URL của mã hành động, được định cấu hình trong Console, với các tham số truy vấn oobCode, mode, apiKeycontinueUrl. Phần tử thứ hai sẽ là URL gốc đượ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 của mình mà không cần thêm bất kỳ 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. Bạn có thể áp dụng mã thao tác trực tiếp từ ứng dụng dành cho thiết bị di động, tương tự như cách mã được xử lý 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, rồi áp dụng thông qua applyActionCode để thay đổi có hiệu lực, tức là email được xác minh.