電子郵件動作中的狀態

傳送密碼重設或驗證使用者電子郵件的電子郵件動作時,您可以透過繼續網址傳遞狀態。這樣一來,使用者就能在完成動作後返回應用程式。此外,您也可以指定是否要直接從已安裝的行動應用程式處理電子郵件動作連結,而非網頁。

在下列常見情境中,這項功能非常實用:

  • 使用者目前未登入,但嘗試存取需要登入才能存取的內容。不過,使用者可能忘記密碼,因此觸發密碼重設流程。流程結束時,使用者應會返回他們嘗試存取的應用程式部分。

  • 應用程式只能提供經過驗證的帳戶存取權。舉例來說,電子報應用程式可能會要求使用者先驗證電子郵件地址,才能訂閱電子報。使用者會完成電子郵件驗證流程,並預期系統會將他們帶回應用程式,完成訂閱程序。

  • 一般來說,使用者在 Apple 應用程式中開始密碼重設或電子郵件驗證流程時,會希望在應用程式內完成流程;透過繼續網址傳遞狀態的功能可實現這項需求。

透過繼續網址傳遞狀態是 Firebase Auth 提供的一項強大功能,可大幅提升使用者體驗。

在電子郵件動作中傳遞狀態/繼續網址

如要安全地傳遞延續網址,請在 Firebase 控制台中將該網址的網域加入允許清單。如要完成這項操作,請前往「Authentication」(驗證) 專區,然後在「Sign-in method」(登入方式) 分頁下,將這個網域新增至「Authorized domains」(已授權網域) 清單 (如果尚未新增)。

傳送密碼重設電子郵件或驗證電子郵件時,必須提供 ActionCodeSettings 例項。這個介面會採用下列參數:

參數 類型 說明
url 字串

設定連結 (狀態/繼續網址),在不同情境中具有不同意義:

  • 在網頁動作小工具中處理連結時,這是 continueUrl 查詢參數中的深層連結。
  • 如果應用程式直接處理連結,這就是 Dynamic Link 深層連結中的 continueUrl 查詢參數。
iOSBundleId 字串 設定軟體包 ID。如果已安裝 Apple 應用程式,系統會嘗試在該應用程式中開啟連結。應用程式必須在 Play 管理中心註冊。如果未提供軟體包 ID,這個欄位的值會設為應用程式主要軟體包的軟體包 ID。
androidPackageName 字串 設定 Android 套件名稱。如果已安裝 Android 應用程式,系統會嘗試在該應用程式中開啟連結。
androidInstallApp bool 指定是否要在裝置支援 Android 應用程式,且尚未安裝該應用程式時進行安裝。如果提供這個欄位,但沒有 packageName,系統會擲回錯誤,說明必須一併提供 packageName。
androidMinimumVersion 字串 這個流程支援的最低應用程式版本。如果指定了 minimumVersion,且安裝的應用程式版本較舊,系統會將使用者帶往 Play 商店升級應用程式。Android 應用程式必須在管理中心註冊。
handleCodeInApp bool 電子郵件動作連結會先在行動應用程式或網頁連結中開啟。預設值為 false。如果設為 true,系統會將動作代碼連結做為通用連結或 Android 應用程式連結傳送,並在安裝應用程式後開啟。如果為 false,系統會先將驗證碼傳送至網頁小工具,然後在使用者繼續操作時,將其重新導向至應用程式 (如果已安裝)。
dynamicLinkDomain 字串 (已淘汰,請改用 `linkDomain`) 設定要用於目前連結的動態連結網域 (或子網域),前提是連結要透過 Firebase Dynamic Links 開啟。每個專案可設定多個動態連結網域,因此這個欄位可供您明確選擇一個網域。如未提供,系統預設會使用第一個網域。 linkDomain 字串 這是選用的自訂 Firebase 託管網域,用於透過指定行動應用程式開啟連結時。網域必須在 Firebase 託管中設定,且為專案所有。這不能是預設的託管網域 (`web.app` 或 `firebaseapp.com`)。這項設定會取代已淘汰的 `dynamicLinkDomain` 設定。

以下範例說明如何使用自訂 Dynamic Links 網域,以 Firebase Dynamic Links 形式傳送電子郵件驗證連結,並優先在行動應用程式中開啟 (iOS 應用程式 example.page.link com.example.ios或 Android 應用程式 com.example.android,如果應用程式尚未安裝,系統會安裝,且最低版本為 12)。深層連結會包含繼續網址的酬載 https://www.example.com/?email=user@example.com

final user = FirebaseAuth.instance.currentUser;

final actionCodeSettings = ActionCodeSettings(
  url: "http://www.example.com/verify?email=${user?.email}",
  iOSBundleId: "com.example.ios",
  androidPackageName: "com.example.android",
);

await user?.sendEmailVerification(actionCodeSettings);

Firebase 驗證會在傳送要在行動應用程式中開啟的連結時,使用 Firebase Dynamic Links。如要使用這項功能,請在 Firebase 控制台中設定動態連結。

  1. 啟用 Firebase Dynamic Links:

    1. 在 Firebase 控制台中,開啟「Dynamic Links」部分。

    2. 如果您尚未接受 Dynamic Links 條款並建立 Dynamic Links 網域,請立即完成這些步驟。

    3. 如果您已建立 Dynamic Links 網域,請記下該網域。動態連結網域通常如下列範例所示:

      example.page.link

    4. 設定 Apple 或 Android 應用程式來攔截傳入的連結時,需要用到這個值。

  2. 設定 Android 應用程式:

    1. 如果您打算從 Android 應用程式處理這些連結,則必須在 Firebase 控制台專案設定中指定 Android 套件名稱。此外,您還需要提供應用程式憑證的 SHA-1 和 SHA-256。
    2. 您也需要在 AndroidManifest.xml 檔案中設定深層連結的意圖篩選器。
    3. 詳情請參閱「接收 Android 動態連結的指示」。
  3. 設定 Apple 應用程式:

    1. 如果您打算從應用程式處理這些連結,就必須在 Firebase 控制台專案設定中指定套件組合 ID。此外,您也需要指定 App Store ID 和 Apple 開發人員團隊 ID。
    2. 您也需要在應用程式功能中,將 FDL 通用連結網域設定為關聯網域。
    3. 如果您打算將應用程式發布至 iOS 8 以下版本,則需要將軟體包 ID 設為傳入網址的自訂架構。
    4. 如要瞭解詳情,請參閱接收 Apple 平台 Dynamic Links 的操作說明

在網路應用程式中處理電子郵件動作

您可以指定是否要先從網路應用程式處理動作代碼連結,然後在成功完成後重新導向至其他網頁或行動應用程式 (如果行動應用程式可用)。方法是在 ActionCodeSettings 物件中將 handleCodeInApp 設為 false。雖然不是必要資訊,但提供套件 ID 或 Android 套件名稱,可讓使用者在完成電子郵件動作程式碼後,重新導向至指定應用程式。

這裡使用的網址是電子郵件動作範本部分中設定的網址。所有專案都會預先佈建預設的服務帳戶。如要進一步瞭解如何自訂電子郵件動作處理常式,請參閱自訂電子郵件處理常式

在本例中,continueURL 查詢參數中的連結會是 FDL 連結,其酬載是 ActionCodeSettings 物件中指定的 URL。雖然您可以在不使用任何額外依附元件的情況下,攔截及處理應用程式的傳入連結,但我們建議使用 FDL 用戶端程式庫來剖析深層連結。

處理電子郵件動作 (例如電子郵件驗證) 時,需要從深層連結剖析 oobCode 查詢參數中的動作代碼,然後透過 applyActionCode 套用,變更才會生效 (即驗證電子郵件)。

在行動應用程式中處理電子郵件動作

您可以指定是否要先在行動應用程式中處理動作代碼連結 (如果已安裝)。如果是 Android 應用程式,您也可以透過 androidInstallApp 指定,如果裝置支援且尚未安裝該應用程式,則應安裝該應用程式。如果使用者透過不支援行動應用程式的裝置點選連結,系統會改為開啟網頁。 方法是在 ActionCodeSettings 物件中將 handleCodeInApp 設為 true。您也需要指定行動應用程式的 Android 套件名稱或套件 ID。如果沒有可用的行動應用程式,系統會使用電子郵件動作範本部分中設定的備用網頁網址。系統會為所有專案佈建預設專案。如要進一步瞭解如何自訂電子郵件動作處理常式,請參閱自訂電子郵件處理常式

在這種情況下,傳送給使用者的行動應用程式連結會是 FDL 連結,其酬載是您在管理中心設定的動作代碼網址,並附上 oobCodemodeapiKeycontinueUrl 查詢參數。後者會是 ActionCodeSettings 物件中指定的原始 URL。雖然您可以在不新增任何依附元件的情況下,攔截及處理應用程式的連入連結,但我們建議使用 FDL 用戶端程式庫來剖析深層連結。您可以直接從行動應用程式套用動作代碼,做法與「自訂電子郵件處理常式」一節所述的網頁流程類似。

處理電子郵件動作 (例如電子郵件驗證) 時,需要從深層連結剖析 oobCode 查詢參數中的動作代碼,然後透過 applyActionCode 套用,變更才會生效 (即驗證電子郵件)。