Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

在電子郵件操作中傳遞狀態

在發送用於密碼重置或驗證用戶電子郵件的電子郵件操作時,您可以通過繼續 URL 傳遞狀態。這使用戶能夠在操作完成後返回到應用程序。此外,您可以指定是否在安裝時直接從移動應用程序而不是網頁處理電子郵件操作鏈接。

這在以下常見場景中非常有用:

  • 當前未登錄的用戶可能正在嘗試訪問需要用戶登錄的內容。但是,用戶可能忘記了他們的密碼,因此觸發了重置密碼流程。在流程結束時,用戶希望返回到他們試圖訪問的應用程序部分。

  • 應用程序只能提供對經過驗證的帳戶的訪問。例如,時事通訊應用可能要求用戶在訂閱前驗證他們的電子郵件。用戶將通過電子郵件驗證流程並期望返回到應用程序以完成他們的訂閱。

  • 一般來說,當用戶在 iOS 應用程序上開始密碼重置或電子郵件驗證流程時,他們希望在應用程序內完成流程;通過繼續 URL 傳遞狀態的能力使這成為可能。

能夠通過繼續 URL 傳遞狀態是 Firebase 身份驗證提供的一項強大功能,可以顯著增強用戶體驗。

在電子郵件操作中傳遞狀態/繼續 URL

為了安全地傳遞繼續 URL,該 URL 的域需要在Firebase 控制台中列入白名單。這是在身份驗證部分中完成的,方法是將此域添加到登錄方法選項卡下的授權域列表(如果尚未存在)。

發送密碼重置郵件或驗證郵件時需要提供FIRActionCodeSettings實例。該接口採用以下參數:

迅速

範圍類型描述
URL細繩

設置在不同上下文中具有不同含義的鏈接(狀態/繼續 URL):

  • 在 Web 操作小部件中處理鏈接時,這是continueUrl查詢參數中的深層鏈接。
  • 在app中直接處理鏈接時,這是動態鏈接深層鏈接中的continueUrl查詢參數。
iOSBundleID細繩設置 iOS 包 ID。如果已安裝,這將嘗試在 iOS 應用程序中打開該鏈接。 iOS 應用程序需要在控制台中註冊。如果未提供 Bundle ID,則該字段的值設置為 App 主 bundle 的 bundle ID。
androidPackageName細繩設置 Android 包名稱。如果已安裝,這將嘗試在 android 應用程序中打開鏈接。
androidInstallIfNotAvailable布爾值指定是否在設備支持且尚未安裝該應用程序的情況下安裝該 Android 應用程序。如果此字段未提供 packageName,則會引發錯誤,說明必須與此字段一起提供 packageName。
androidMinimumVersion細繩此流程中支持的應用程序的最低版本。如果指定了 minimumVersion,並且安裝了舊版本的應用程序,則用戶將被帶到 Play 商店以升級應用程序。 Android 應用程序需要在控制台中註冊。
handleCodeInApp布爾值電子郵件操作鏈接將首先在移動應用程序中打開還是在網絡鏈接中打開。默認值為假。設置為 true 時,操作代碼鏈接將作為通用鏈接或 Android 應用程序鏈接發送,如果安裝,應用程序將打開。在錯誤的情況下,代碼將首先發送到 Web 小部件,然後繼續將重定向到應用程序(如果已安裝)。
dynamicLinkDomain細繩如果要使用 Firebase 動態鏈接打開當前鏈接,則設置要用於當前鏈接的動態鏈接域(或子域)。由於每個項目可以配置多個動態鏈接域,因此該字段提供了明確選擇一個的能力。如果未提供,則默認使用第一個域。

目標-C

範圍類型描述
URL字符串

設置在不同上下文中具有不同含義的鏈接(狀態/繼續 URL):

  • 在 Web 操作小部件中處理鏈接時,這是continueUrl查詢參數中的深層鏈接。
  • 在app中直接處理鏈接時,這是動態鏈接深層鏈接中的continueUrl查詢參數。
iOSBundleID字符串設置 iOS 包 ID。如果已安裝,這將嘗試在 iOS 應用程序中打開該鏈接。 iOS 應用程序需要在控制台中註冊。
androidPackageName字符串設置 Android 包名稱。如果已安裝,這將嘗試在 android 應用程序中打開鏈接。
androidInstallIfNotAvailable布爾值指定是否在設備支持且尚未安裝該應用程序的情況下安裝該 Android 應用程序。如果此字段未提供 packageName,則會引發錯誤,說明必須與此字段一起提供 packageName。
androidMinimumVersion字符串此流程中支持的應用程序的最低版本。如果指定了 minimumVersion,並且安裝了舊版本的應用程序,則用戶將被帶到 Play 商店以升級應用程序。 Android 應用程序需要在控制台中註冊。
handleCodeInApp布爾值電子郵件操作鏈接將首先在移動應用程序中打開還是在網絡鏈接中打開。默認值為假。設置為 true 時,操作代碼鏈接將作為通用鏈接或 Android 應用程序鏈接發送,如果安裝,應用程序將打開。在錯誤的情況下,代碼將首先發送到 Web 小部件,然後繼續將重定向到應用程序(如果已安裝)。
dynamicLinkDomain字符串如果要使用 Firebase 動態鏈接打開當前鏈接,則設置要用於當前鏈接的動態鏈接域(或子域)。由於每個項目可以配置多個動態鏈接域,因此該字段提供了明確選擇一個的能力。如果未提供,則默認使用第一個域。

以下示例說明瞭如何使用自定義動態鏈接域example.page.link (iOS 應用com.example.ios或 Android 應用com.example.android如果尚未安裝該應用程序將在其中安裝並且最低版本為12 )。深層鏈接將包含繼續 URL 負載https://www.example.com/?email=user@example.com

迅速


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,
                                         minumumVersion:"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.
})

目標-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.
 }];

Firebase 身份驗證在發送要在移動應用程序中打開的鏈接時使用Firebase 動態鏈接。要使用此功能,需要在 Firebase 控制台中配置動態鏈接。

  1. 啟用 Firebase 動態鏈接:

    1. Firebase 控制台中,打開動態鏈接部分。
    2. 如果您尚未接受動態鏈接條款並創建了動態鏈接域,請立即執行。

      如果您已經創建了動態鏈接域,請記下它。動態鏈接域通常類似於以下示例:

      example.page.link

      當您配置 iOS 或 Android 應用程序以攔截傳入鏈接時,您將需要此值。

  2. 配置安卓應用程序:

    1. 如果您計劃從您的 Android 應用程序處理這些鏈接,則需要在 Firebase 控制台項目設置中指定 Android 包名稱。另外還需要提供申請證書的SHA-1和SHA-256。
    2. 您還需要為 AndroidManifest.xml 文件中的深層鏈接配置意圖過濾器。
    3. 有關更多信息,請參閱接收 Android 動態鏈接說明
  3. 配置 iOS 應用程序:

    1. 如果您計劃從 iOS 應用程序處理這些鏈接,則需要在 Firebase 控制台項目設置中指定 iOS 包 ID。此外,還需要指定 App Store ID 和 Apple Developer Team ID。
    2. 您還需要在應用程序功能中將 FDL 通用鏈接域配置為關聯域。
    3. 如果您計劃將應用程序分發到 iOS 8 及以下版本,則需要將您的 iOS 包 ID 設置為傳入 URL 的自定義方案。
    4. 有關更多信息,請參閱接收 iOS 動態鏈接說明

在 Web 應用程序中處理電子郵件操作

如果移動應用程序可用,您可以指定是否要先處理來自 Web 應用程序的操作代碼鏈接,然後在成功完成後重定向到另一個網頁或移動應用程序。這是通過在FIRActionCodeSettings (Obj-C) 或ActionCodeSettings (Swift) 對FIRActionCodeSettings handleCodeInApp設置為false來完成的。雖然不需要 iOS 包 ID 或 Android 包名稱,但提供它們將允許用戶在電子郵件操作代碼完成時重定向回指定的應用程序。

此處使用的 Web URL 是在電子郵件操作模板部分中配置的 URL。為所有項目提供了一個默認值。請參閱自定義電子郵件處理程序以了解有關如何自定義電子郵件操作處理程序的更多信息。

在這種情況下, continueURL查詢參數中的鏈接將是一個 FDL 鏈接,其負載是ActionCodeSettings像中指定的URL 。雖然您可以在沒有任何額外依賴的情況下攔截和處理來自您的應用程序的傳入鏈接,但我們建議使用 FDL 客戶端庫為您解析深層鏈接。

處理email動作時,例如email驗證,需要從深層鏈接解析oobCode查詢參數中的action code,然後通過applyActionCode應用,更改生效,即email要驗證。

在移動應用程序中處理電子郵件操作

如果已安裝,您可以指定是否要首先處理移動應用程序中的操作代碼鏈接。對於 Android 應用程序,您還可以通過androidInstallIfNotAvailable指定如果設備支持該應用程序並且尚未安裝該應用程序,則該應用程序將被安裝。如果從不支持移動應用程序的設備單擊鏈接,則會從網頁打開它。這是通過在FIRActionCodeSettings (Obj-C) 或ActionCodeSettings (Swift) 對FIRActionCodeSettings handleCodeInApp設置為true來完成的。還需要指定移動應用程序的 Android 包名稱或 iOS 包 ID。此處使用的後備 Web URL,當沒有移動應用程序可用時,是在電子郵件操作模板部分中配置的 URL。為所有項目提供了一個默認值。請參閱自定義電子郵件處理程序以了解有關如何自定義電子郵件操作處理程序的更多信息。

在這種情況下,發送給用戶的移動應用鏈接將是一個 FDL 鏈接,其負載是操作代碼 URL,在控制台中配置,查詢參數為oobCodemodeapiKeycontinueUrl 。後者將是FIRActionCodeSettings (Obj-C) 或ActionCodeSettings (Swift) 對FIRActionCodeSettings指定的原始URL 。雖然您可以在沒有任何額外依賴的情況下攔截和處理來自您的應用程序的傳入鏈接,但我們建議使用 FDL 客戶端庫為您解析深層鏈接。操作代碼可以直接從移動應用程序應用,類似於在自定義電子郵件處理程序部分中描述的 Web 流中處理它的方式。

處理email動作時,例如email驗證,需要從深層鏈接解析oobCode查詢參數中的action code,然後通過applyActionCode應用,更改生效,即email要驗證。