Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

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

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

  • 在其他情況下,用戶可能已經從他們的移動設備啟動了流程,並期望在驗證後返回到他們的移動應用程序而不是瀏覽器。

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

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

為了安全地傳遞下去的URL,URL中的域名將需要在列入白名單火力地堡控制台。這是在認證部分由登錄方法選項卡中添加此域名授權域的列表中,如果它已不存在做。

一個firebase.auth.ActionCodeSettings實例需要發送密碼重置電子郵件或驗證電子郵件時要提供。該接口採用以下參數:

範圍類型描述
url細繩

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

  • 當鏈接在網絡操作部件的處理,這是在深層鏈接continueUrl查詢參數。
  • 當鏈路在應用程序直接處理,這是continueUrl動態鏈接的深層鏈接查詢參數。
iOS ({bundleId: 字符串}|未定義)設置 iOS 包 ID。如果已安裝,這將嘗試在 iOS 應用程序中打開該鏈接。 iOS 應用程序需要在控制台中註冊。
android ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined)設置 Android 包名稱。如果已安裝,這將嘗試在 android 應用程序中打開鏈接。如果傳入 installApp,則指定在設備支持且尚未安裝該應用程序的情況下是否安裝該 Android 應用程序。如果此字段未提供 packageName,則會引發錯誤,說明 packageName 必須與此字段一起提供。如果指定了 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 = {
  url: 'https://www.example.com/?email=' + firebase.auth().currentUser.email,
  iOS: {
    bundleId: 'com.example.ios'
  },
  android: {
    packageName: 'com.example.android',
    installApp: true,
    minimumVersion: '12'
  },
  handleCodeInApp: true,
  // When multiple custom dynamic link domains are defined, specify which
  // one to use.
  dynamicLinkDomain: "example.page.link"
};
firebase.auth().currentUser.sendEmailVerification(actionCodeSettings)
  .then(function() {
    // Verification email sent.
  })
  .catch(function(error) {
    // Error occurred. Inspect error.code.
  });

火力地堡驗證使用火力地堡動態鏈接發送一個,就是在移動應用程序中打開鏈接時。要使用此功能,需要在 Firebase 控制台中配置動態鏈接。

  1. 啟用 Firebase 動態鏈接:

    1. 火力地堡控制台,打開動態鏈接部分。
    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 應用程序的操作代碼鏈接,然後在成功完成後重定向到另一個網頁或移動應用程序。這是通過設置handleCodeInAppfalsefirebase.auth.ActionCodeSettings對象。雖然不需要 iOS 包 ID 或 Android 包名稱,但提供它們將允許用戶在電子郵件操作代碼完成時重定向回指定的應用程序。

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

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

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

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

如果已安裝,您可以指定是否要首先處理移動應用程序中的操作代碼鏈接。隨著Android應用程序,您還可以通過指定的能力android.installApp該應用程序是,如果尚未安裝該設備支持它,它被安裝。如果從不支持移動應用程序的設備單擊鏈接,則會從網頁打開它。這是通過設置handleCodeInApptruefirebase.auth.ActionCodeSettings對象。還需要指定移動應用程序的 Android 包名稱或 iOS 包 ID。

當沒有可用的移動應用程序時,此處使用的後備 Web URL 是在電子郵件操作模板部分中配置的 URL。為所有項目提供了一個默認值。請參閱自定義郵件處理程序,以了解更多關於如何定制的電子郵件操作處理程序。

在這種情況下,移動應用鏈路發送到用戶將其有效載荷是行動碼URL的FDL鏈路,在控制台中配置成與所述查詢參數oobCodemodeapiKeycontinueUrl 。後者將是原來的URL指定ActionCodeSettings對象。雖然您可以在沒有任何額外依賴的情況下攔截和處理來自應用程序的傳入鏈接,但我們建議使用 FDL 客戶端庫為您解析深層鏈接。的動作代碼可以直接從類似於它是如何從在所描述的網絡流處理的移動應用程序時應用定制的電子郵件處理程序部分。

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