Bạn có thể truyền trạng thái thông qua URL tiếp tục khi gửi 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 hành động. Ngoài ra, bạn có thể chỉ định có xử lý đường liên kết hành động trong email trực tiếp từ một ứng dụng di động khi ứng dụng đó được cài đặt hay không thay vì 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:
Một người dùng chưa đăng nhập có thể đang cố gắng 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 quy trình, người dùng mong 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 đã được xác minh. Ví dụ: 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à dự kiến sẽ quay lại ứng dụng để hoàn tất việc đăng ký.
Trong các trường hợp khác, người dùng có thể đã bắt đầu quy trình trên thiết bị di động và mong đợi sau khi xác minh sẽ quay lại ứng dụng di động thay vì trình duyệt.
Khả năng truyền trạng thái thông qua URL tiếp tục là một tính năng mạnh mẽ mà Firebase Auth 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 của URL tiếp tục trong các thao tác trên email
Để truyền một cách an toàn URL tiếp tục, bạn cần đưa miền của URL vào danh sách cho phép trong bảng điều khiển Firebase. Việc này được thực hiện 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 miền này chưa có trong danh sách.
Bạn cần cung cấp một phiên bản ActionCodeSettings khi gửi email đặt lại mật khẩu hoặc email xác minh. Bạn có thể tạo đối tượng này bằng lớp ActionCodeSettings.Builder được liên kết. Lớp này 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:
|
setIOSBundleId(String iOSBundleId) |
Đặt mã nhận dạng gói iOS để giúp Firebase Authentication xác định xem có nên tạo một đường liên kết chỉ dành cho web hay đường liên kết dành cho thiết bị di động được mở trên thiết bị Apple hay không |
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) |
Đặt tên gói Android để giúp Firebase Authentication xác định xem có nên tạo đường liên kết chỉ dành cho web hay đường liên kết dành cho thiết bị di động được mở trên thiết bị Android hay không |
setHandleCodeInApp(boolean status) |
Đường liên kết đến thao tác trong email sẽ được mở trong ứng dụng di động hay đường liên kết trên web trước. Giá trị mặc định là false. Khi được đặt thành true, đường liên kết mã thao tác sẽ được gửi dưới dạng Đường liên kết phổ quát hoặc Đường liên kết đến ứ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 đến tiện ích web trước, sau đó khi tiếp tục, mã sẽ chuyển hướng đến ứng dụng nếu đã cài đặt. |
setLinkDomain(String customDomain) |
Khi các miền đường liên kết Hosting tuỳ chỉnh được xác định cho một dự án, hãy chỉ định miền nào sẽ dùng khi đường liên kết được mở bằng một ứng dụng di động cụ thể. Nếu không, miền mặc định sẽ được tự động chọn (ví dụ: PROJECT_ID.firebaseapp.com |
setDynamicLinkDomain(String dynamicLinkDomain) |
Không dùng nữa. Không chỉ định tham số này. |
Ví dụ sau đây minh hoạ cách gửi một đường liên kết xác minh email sẽ mở trong ứng dụng di động trước. Đường liên kết sâu sẽ chứa tải trọng URL tiếp tục http://www.example.com/verify?uid=1234
.
Kotlin
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."); } } });
Định cấu hình đường liên kết đến Firebase Hosting
Firebase Authentication sử dụng Firebase Hosting khi gửi một đường liên kết được mở trong ứng dụng 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 lưu trữ trong bảng điều khiển Firebase.
Định cấu hình ứng dụng Android:
- Nếu bạn dự định xử lý các đường liên kết này từ ứng dụng Android, thì bạn cần chỉ định tên gói của ứng dụng trong phần cài đặt dự án trên bảng điều khiển Firebase. Ngoài ra, bạn cần cung cấp SHA-1 và SHA-256 của chứng chỉ ứng dụng.
- 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
. - Để biết thêm thông tin về vấn đề này, hãy tham khảo Hướng dẫn nhận đường liên kết lưu trữ Android.
Định cấu hình ứng dụng iOS:
- Nếu dự định xử lý các đường liên kết này từ ứng dụng iOS, bạn sẽ cần định cấu hình miền đường liên kết Hosting làm miền được liên kết trong các chức năng của ứng dụng.
- Để biết thêm thông tin về vấn đề này, hãy tham khảo Hướng dẫn nhận đường liên kết lưu trữ iOS.
Xử lý các thao tác với 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à ứng dụng di động đó có sẵn.
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 trên iOS hoặc tên gói trên Android, nhưng việc cung cấp các thông tin 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 trên email.
URL trang web được dùng ở đây là URL được định cấu hình trong phần mẫu hành động qua email. Một dự án mặc định được cung cấp cho tất cả cá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à một đường liên kết Hosting có tải trọng là URL
được chỉ định trong đối tượng ActionCodeSettings
.
Khi xử lý các thao tác 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ã thao tác từ tham số truy vấn oobCode
trong đường liên kết sâu, sau đó áp dụng thô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 đối với email trong ứng dụng 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 di động của mình trước hay không, miễn là ứng dụng đó đã đượ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ợ ứng dụng di động, thì đường liên kết đó sẽ mở ra 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 dự phòng trên web được 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 qua email. Một tài khoản mặc định được cung cấp cho tất cả cá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 đến ứng dụng di động được gửi cho người dùng sẽ là một đường liên kết Hosting có tải trọng là URL mã thao tác, được định cấu hình trong Console, với các tham số truy vấn oobCode
, mode
, apiKey
và continueUrl
. Sau này sẽ là URL
ban đầu được chỉ định trong đối tượng ActionCodeSettings
. Bạn có thể áp dụng mã thao tác trực tiếp từ một ứng dụng di động tương tự như cách xử lý mã này từ quy trình trên web được mô tả trong phần tuỳ chỉnh trình xử lý email.
Khi xử lý các thao tác 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ã thao tác từ tham số truy vấn oobCode
trong đường liên kết sâu, sau đó áp dụng thông qua applyActionCode
để thay đổi có hiệu lực, tức là email cần được xác minh.