正在電子郵件動作中傳送狀態

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

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

  • 使用者 (目前尚未登入) 可能嘗試存取需要登入的內容。但是使用者可能忘記密碼,因而觸發重設密碼流程。流程結束時,使用者會預期回到他們嘗試存取的應用程式區段。

  • 應用程式僅提供已驗證帳戶的存取權。例如,電子報可能會要求使用者先驗證電子郵件,才能訂閱。使用者會完成電子郵件驗證流程,並預期返回應用程式完成訂閱。

  • 在其他情況下,使用者可能已從行動裝置啟動流程,並預期在驗證完成後返回行動應用程式,而不是瀏覽器。

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

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

為了安全傳遞繼續網址,您需要在 Firebase 控制台中將該網址的網域加入許可清單。方法是在「Authentication」區段完成這項操作,方法是將這個網域新增至「Sign-in method」分頁下的「Authorized domains」清單 (如果尚未顯示)。

傳送密碼重設電子郵件或驗證電子郵件時,必須提供 ActionCodeSettings 執行個體。您可以使用相關聯的 ActionCodeSettings.Builder 類別建立它,該類別包含下列方法:

方式 說明
setUrl(String url)

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

  • 在網站動作小工具中處理連結時,這是 continueUrl 查詢參數的深層連結。
  • 系統直接在應用程式中處理連結時,動態連結深層連結中的 continueUrl 查詢參數就是這個查詢參數。
setIOSBundleId(String iOSBundleId) 設定 iOS 軟體包 ID。如果已安裝 iOS 應用程式,系統將嘗試在應用程式中開啟該連結。iOS 應用程式必須在控制台中註冊。
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) 設定 Android 套件名稱。讓系統嘗試在已安裝的 Android 應用程式中開啟連結。如果 installIfNotAvailable 設為 true,系統會指定是否要在裝置支援 Android 應用程式,且尚未安裝該應用程式的情況下安裝該應用程式。如果已指定 minVersion 且已安裝舊版應用程式,系統會將使用者帶往 Play 商店升級應用程式。你必須在 Play 管理中心註冊該 Android 應用程式。
setHandleCodeInApp(boolean status) 您要先在行動應用程式或網頁連結中開啟電子郵件動作連結。預設值為 false。如果設為 True,系統會以通用連結或 Android 應用程式連結的形式傳送動作代碼連結,並由應用程式開啟。如為非題,系統會先將程式碼傳送至網頁小工具,接著繼續操作會將使用者重新導向至應用程式 (如果已安裝)。
setDynamicLinkDomain(String dynamicLinkDomain) 設定要使用 Firebase Dynamic Links 開啟目前連結的動態連結網域 (或子網域)。由於每項專案可以設定多個動態連結網域,因此這個欄位可讓您明確選擇網域。如未提供,預設會使用第一個網域。

以下範例說明如何傳送電子郵件驗證連結,此連結會先在行動應用程式中以 Firebase Dynamic Links (iOS 應用程式 com.example.ios 或 Android 應用程式 com.example.android) 開啟。深層連結會包含繼續網址酬載 https://www.example.com/?email=user@example.com

Kotlin+KTX

val auth = Firebase.auth
val user = auth.currentUser!!

val url = "http://www.example.com/verify?uid=" + user.uid
val actionCodeSettings = ActionCodeSettings.newBuilder()
    .setUrl(url)
    .setIOSBundleId("com.example.ios")
    // The default for this is populated with the current android package name.
    .setAndroidPackageName("com.example.android", false, null)
    .build()

user.sendEmailVerification(actionCodeSettings)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Email sent.")
        }
    }

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

String url = "http://www.example.com/verify?uid=" + user.getUid();
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
        .setUrl(url)
        .setIOSBundleId("com.example.ios")
        // The default for this is populated with the current android package name.
        .setAndroidPackageName("com.example.android", false, null)
        .build();

user.sendEmailVerification(actionCodeSettings)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

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

  1. 啟用 Firebase Dynamic Links:

    1. Firebase 控制台開啟「Dynamic Links」部分。
    2. 如果您尚未接受動態連結條款並建立 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 Dynamic Links 操作說明
  3. 設定 iOS 應用程式:

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

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

您可以指定是否要先處理網頁應用程式中的動作程式碼連結,只要應用程式可供使用,接著要重新導向至其他網頁或行動應用程式。方法是在 ActionCodeSettings.Builder 物件中呼叫 setHandleCodeInApp(false)。雖然不一定要提供 iOS 軟體包 ID 或 Android 套件名稱,但提供這兩個名稱後,使用者就能在電子郵件動作程式碼完成時,將使用者重新導向回指定應用程式。

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

在這種情況下,continueUrl 查詢參數中的連結將會是 FDL 連結,其酬載為 ActionCodeSettings 物件中指定的 URL。雖然您可以從應用程式攔截及處理傳入的連結,而無需任何其他依附元件,但我們建議使用 FDL 用戶端程式庫來剖析深層連結。

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

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

您可以指定是否要先在已安裝的行動應用程式中處理動作程式碼連結。使用 Android 應用程式時,您也可以透過 installIfNotAvailable 布林值指定要安裝的應用程式 (如果裝置支援的話,但尚未安裝)。如果使用者在不支援行動應用程式的裝置上點選連結,系統會改為透過網頁開啟連結。方法是在 ActionCodeSettings.Builder 物件中呼叫 setHandleCodeInApp(true)。此外,您還必須指定行動應用程式的 Android 套件名稱或 iOS 軟體包 ID。

在沒有可用的行動應用程式時,這裡使用的備用網頁網址,即是電子郵件動作範本區段中設定的備用網址。系統會為所有專案佈建預設值如要進一步瞭解如何自訂電子郵件動作處理常式,請參閱自訂電子郵件處理常式

在此情況下,傳送給使用者的行動應用程式連結會是 FDL 連結,此連結酬載是在控制台中設定的動作代碼網址,使用查詢參數 oobCodemodeapiKeycontinueUrl。後者則是 ActionCodeSettings 物件中指定的原始 URL。雖然您無需任何其他依附元件,即可攔截及處理應用程式傳入的連結,但建議您使用 FDL 用戶端程式庫來剖析深層連結。動作程式碼可以直接從行動應用程式套用,方法與在自訂電子郵件處理常式一節所述的網頁流程的處理方式類似。

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