電子郵件動作中的狀態

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

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

  • 使用者 (目前並未登入) 可能嘗試存取 要求使用者必須登入。然而,使用者可能忘記 並因此觸發重設密碼流程。結尾 流程時,使用者會預期返回應用程式的某個部分 嘗試存取的內容

  • 應用程式只能提供已驗證帳戶的存取權。適用對象 舉例來說,電子報應用程式可能會要求使用者先驗證電子郵件地址 訂閱。使用者會完成電子郵件驗證流程,並預期會返回應用程式完成訂閱。

  • 一般而言,使用者啟動密碼重設或電子郵件驗證流程時 預期會在應用程式中完成流程的 Apple 應用程式。包括 可以透過繼續網址傳遞狀態

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

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

為了安全傳遞繼續網址,網址的網域必須符合 已加入 Firebase 控制台的許可清單。 如要完成這項操作,請前往「Authentication」部分,將這個網域新增至「Sign-in method」分頁下方的「Authorized domains」清單中 (如果尚未加入)。

傳送時必須提供 FIRActionCodeSettings 例項 並要求重設密碼電子郵件或驗證電子郵件這個介面使用 參數

Swift

參數 類型 說明
URL 字串

設定不同意義的連結 (狀態/繼續網址) 不同的情境:

  • 在網頁動作小工具中處理連結時,這就是深層連結 continueUrl 查詢參數中的連結。
  • 如果連結是直接在應用程式中處理,則這是動態連結深層連結中的 continueUrl 查詢參數。
iOSBundleID 字串 設定軟體包 ID。系統會嘗試在已安裝的 Apple 應用程式中開啟連結。應用程式必須在控制台中註冊。如果未提供組合 ID,這個欄位的值會設為應用程式主要組合的組合 ID。
androidPackageName 字串 設定 Android 套件名稱。系統將嘗試在 的 Android 應用程式 (如果有的話)
androidInstallIfNotAvailable 布林值 指定是否要安裝裝置支援 Android 應用程式 且應用程式尚未安裝如果您在提供這個欄位時未提供 packageName,系統會擲回錯誤,說明必須與這個欄位一併提供 packageName。
androidMinimumVersion 字串 這個流程中支援的應用程式最低版本。如果 指定 minVersion,且已安裝舊版應用程式。 系統會引導使用者前往 Play 商店升級應用程式。Android 應用程式 必須先在控制台註冊
handleCodeInApp 布林值 電子郵件動作連結是否會先在行動應用程式或網頁連結中開啟。預設值為 false。如果設為 True,系統會以通用連結或 Android 應用程式連結傳送動作碼連結,並在安裝應用程式時由應用程式開啟。如果是 false,則程式碼會傳送到 網頁小工具會重新導向至 已安裝。
dynamicLinkDomain 字串 設定目前連結要使用的動態連結網域 (或子網域) (如果是使用 Firebase Dynamic Links 開啟)每個專案可設定多個動態連結網域,因此這個欄位可讓您明確選擇其中一個網域。如未提供,第一個網域 加以使用。

Objective-C

參數 類型 說明
URL NSString

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

  • 在網頁動作小工具中處理連結時,這就是深層連結 continueUrl 查詢參數中的連結。
  • 如果連結是直接在應用程式中處理,則這是動態連結深層連結中的 continueUrl 查詢參數。
iOSBundleID NSString 設定軟體包 ID。如果發生以下情況,系統將嘗試在 Apple 應用程式中開啟連結 已安裝應用程式必須在控制台中註冊。
androidPackageName NSString 設定 Android 套件名稱。系統會嘗試在已安裝的 Android 應用程式中開啟連結。
androidInstallIfNotAvailable BOOL 指定裝置是否支援 Android 應用程式。 且應用程式尚未安裝如果您在提供這個欄位時未提供 packageName,系統會擲回錯誤,說明必須與這個欄位一併提供 packageName。
androidMinimumVersion NSString 這個流程中支援的應用程式最低版本。如果 指定 minVersion,且已安裝舊版應用程式。 系統會引導使用者前往 Play 商店升級應用程式。Android 應用程式 必須先在控制台註冊
handleCodeInApp BOOL 電子郵件動作連結是否會先在行動應用程式或網頁連結中開啟。預設值為 false。如果設為 true,動作代碼連結 會以通用連結或 Android 應用程式連結的形式傳送,且會開啟 。如果是 false,則程式碼會傳送到 網頁小工具會重新導向至 已安裝。
dynamicLinkDomain NSString 設定目前連結要使用的動態連結網域 (或子網域) (如果是使用 Firebase Dynamic Links 開啟)每個專案可設定多個動態連結網域,因此這個欄位可讓您明確選擇其中一個網域。如未提供,第一個網域 加以使用。

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

Swift


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

Objective-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 Dynamic Links 傳送 連結,專用在行動應用程式中開啟如要使用這項功能,您必須在 Firebase 控制台中設定動態連結。

  1. 啟用 Firebase 動態連結:

    1. Firebase 控制台中,開啟「Dynamic Links專區。
    2. 如果您尚未接受 Dynamic Links 條款並建立 Dynamic Links 網域,請立即完成。

      如果您已建立 Dynamic Links 網域,請記下該網域。Dynamic Links 網域通常如下所示:

      example.page.link

      您需要這個值,才能設定 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 指示」。

處理網頁應用程式中的電子郵件動作

您可以指定是否要先從網頁應用程式處理動作碼連結,然後在完成後重新導向至其他網頁或行動應用程式 (如果有)。方法是將 handleCodeInApp 設為 false FIRActionCodeSettings (Obj-C) 或 ActionCodeSettings (Swift) 物件。雖然 軟體包 ID 或 Android 套件名稱,只要提供這類名稱,使用者就能 以在電子郵件動作程式碼完成時,重新導向至指定應用程式。

這裡使用的網頁網址,是您在「電子郵件動作範本」一節中所設定的網址。系統會為所有專案提供預設的專案。如要進一步瞭解如何自訂電子郵件動作處理常式,請參閱「自訂電子郵件處理常式」。

在這個範例中,continueURL 查詢參數中的連結會是 FDL 連結,其酬載是 ActionCodeSettings 中指定的 URL 物件。您可以攔截並處理來自應用程式的傳入連結,而無需任何額外依附元件,但我們建議您使用 FDL 用戶端程式庫來剖析深層連結。

處理電子郵件動作 (例如電子郵件驗證) 時, 您需要從深層連結中剖析 oobCode 查詢參數,然後套用 並透過 applyActionCode 使變更生效,例如:待驗證電子郵件。

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

您可以指定是否要在行動應用程式中先處理動作碼連結 (如果已安裝)。對於 Android 應用程式,您也可以透過 androidInstallIfNotAvailable 指定應用程式安裝作業,前提是裝置支援該應用程式且尚未安裝。如果點擊連結的來源裝置不支援行動裝置 就會改為從網頁開啟 方法是在 FIRActionCodeSettings (Obj-C) 或 ActionCodeSettings (Swift) 物件中,將 handleCodeInApp 設為 true。您也必須指定行動應用程式的 Android 套件名稱或套件 ID。如果沒有可用的行動應用程式,這裡使用的備用網頁網址就是在電子郵件動作範本部分中設定的網址。系統會為所有專案提供預設的專案。詳情請參閱 自訂電子郵件處理常式,以瞭解更多資訊 如何自訂電子郵件動作處理常式。

在此情況下,傳送到使用者的行動應用程式連結會是 FDL 連結,且 payload 是動作程式碼網址,在主控台中設定,使用查詢 oobCodemodeapiKeycontinueUrl 參數。後者是 FIRActionCodeSettings (Obj-C) 或 ActionCodeSettings (Swift) 物件中指定的原始 URL。雖然您可以攔截並處理來自應用程式的傳入連結,而無需任何額外依附元件,但我們建議您使用 FDL 用戶端程式庫來剖析深層連結。行動應用程式可以直接套用動作代碼,類似於自訂電子郵件處理程序一節所述的網頁流程處理方式。

處理電子郵件驗證等電子郵件動作時,需要從深層連結解析 oobCode 查詢參數的動作代碼,然後透過 applyActionCode 套用變更,才能生效,也就是驗證電子郵件。