本頁面由 Cloud Translation API 翻譯而成。
Switch to English

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

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

在以下常見情況下,這可能非常有用:

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

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

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

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

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

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

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

迅速

參數類型描述
URL

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

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

目標C

參數類型描述
URL NSString

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

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

以下示例說明瞭如何使用自定義動態鏈接域example.page.link (iOS應用com.example.ios或Android應用com.example.android發送電子郵件驗證鏈接,該鏈接首先將在Fireapp動態鏈接中作為Firebase動態鏈接打開com.example.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 Auth使用Firebase動態鏈接 。為了使用此功能,需要在Firebase控制台中配置動態鏈接。

  1. 啟用Firebase動態鏈接:

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

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

      example.page.link

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

  2. 配置Android應用程序:

    1. 如果您打算通過Android應用程序處理這些鏈接,則需要在Firebase Console項目設置中指定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客戶端庫為您解析深層鏈接。

在處理諸如電子郵件驗證之類的電子郵件操作時,需要從深層鏈接解析來自oobCode查詢參數的操作代碼,然後通過applyActionCode進行應用以使更改生效,即要驗證的電子郵件。

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

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

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

在處理諸如電子郵件驗證之類的電子郵件操作時,需要從深層鏈接解析來自oobCode查詢參數的操作代碼,然後通過applyActionCode進行應用以使更改生效,即要驗證的電子郵件。