Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

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

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

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

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

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

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

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

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

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

發送密碼重置電子郵件或驗證電子郵件時,需要提供一個ActionCodeSettings實例。可以使用關聯的ActionCodeSettings.Builder類創建該類,該類包含以下方法:

方法描述
setUrl(String url)

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

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

以下示例說明瞭如何發送電子郵件驗證鏈接,該鏈接將首先在移動應用程序中作為Firebase動態鏈接(iOS應用程序com.example.ios或Android應用程序com.example.android )打開。深層鏈接將包含繼續URL有效負載https://www.example.com/?email=user@example.com

爪哇

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.");
                }
            }
        });

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

當發送要在移動應用程序中打開的鏈接時,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應用程序的操作代碼鏈接,然後在成功完成後(如果移動應用程序可用)重定向到另一個網頁或移動應用程序。這是通過在ActionCodeSettings.Builder對像中調用setHandleCodeInApp(false)來完成的。儘管不需要iOS捆綁包ID或Android軟件包名稱,但提供它們將允許用戶在電子郵件操作代碼完成時重定向回指定的應用程序。

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

在這種情況下, continueUrl查詢參數中的鏈接將是FDL鏈接,其有效負載是ActionCodeSettings像中指定的URL 。雖然您可以攔截和處理來自應用程序的傳入鏈接,而無需任何其他依賴,但我們建議您使用FDL客戶端庫為您解析深層鏈接。

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

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

您可以指定是否要先在移動應用程序中處理操作代碼鏈接(如果已安裝)。對於Android應用程序,您還可以通過installIfNotAvailable布爾值指定要安裝的應用程序(如果設備支持該應用程序且該應用程序尚未安裝)。如果從不支持移動應用程序的設備上單擊鏈接,則會從網頁打開它。這是通過在ActionCodeSettings.Builder對像中調用setHandleCodeInApp(true)來完成的。還需要指定移動應用程序的Android軟件包名稱或iOS軟件包ID。

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

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

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