傳送密碼的電子郵件動作時,您可以透過延續網址來傳遞狀態 重設或驗證使用者的電子郵件這樣一來,使用者 應用程式會在動作完成後返回應用程式。此外,您還可以指定 是否直接從行動應用程式處理電子郵件動作連結 而不是網頁
在下列常見情境中,這項功能非常實用:
使用者 (目前並未登入) 可能嘗試存取 要求使用者必須登入。然而,使用者可能忘記 並因此觸發重設密碼流程。結尾 流程時,使用者會預期返回應用程式的某個部分 嘗試存取的內容
應用程式只能提供已驗證帳戶的存取權。適用對象 舉例來說,電子報應用程式可能會要求使用者先驗證電子郵件地址 訂閱。使用者會完成電子郵件驗證流程,並預期會返回應用程式完成訂閱。
一般而言,使用者啟動密碼重設或電子郵件驗證流程時 預期會在應用程式中完成流程的 Apple 應用程式。包括 可以透過繼續網址傳遞狀態
能夠透過繼續網址傳遞狀態是一項強大的功能, Firebase 驗證功能提供可大幅提升使用者體驗的功能。
在電子郵件動作中傳遞狀態/繼續網址
為了安全傳遞繼續網址,網址的網域必須符合 已加入 Firebase 控制台的許可清單。 如要完成這項操作,請前往「Authentication」部分,將這個網域新增至「Sign-in method」分頁下方的「Authorized domains」清單中 (如果尚未加入)。
傳送時必須提供 FIRActionCodeSettings
例項
並要求重設密碼電子郵件或驗證電子郵件這個介面使用
參數
Swift
參數 | 類型 | 說明 |
---|---|---|
URL |
字串 | 設定不同意義的連結 (狀態/繼續網址) 不同的情境:
|
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 | 設定在不同情境中具有不同意義的連結 (狀態/繼續網址):
|
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 Dynamic Links
Firebase 驗證會使用 Firebase Dynamic Links 傳送 連結,專用在行動應用程式中開啟如要使用這項功能,您必須在 Firebase 控制台中設定動態連結。
啟用 Firebase 動態連結:
- 在 Firebase 控制台中,開啟「Dynamic Links」專區。
-
如果您尚未接受 Dynamic Links 條款並建立 Dynamic Links 網域,請立即完成。
如果您已建立 Dynamic Links 網域,請記下該網域。Dynamic Links 網域通常如下所示:
example.page.link
您需要這個值,才能設定 Apple 或 Android 應用程式,以便攔截傳入的連結。
設定 Android 應用程式:
- 如果您打算透過 Android 應用程式處理這些連結,請在 Firebase 控制台專案設定中指定 Android 套件名稱。此外,應用程式的 SHA-1 和 SHA-256 所需憑證
- 您還需要在 AndroidManifest.xml 檔案中設定深層連結的意圖篩選器。
- 詳情請參閱「接收 Android 動態連結指示」。
設定 Apple 應用程式:
- 如果您打算透過應用程式處理這些連結,請在 Firebase 控制台專案設定中指定套件 ID。此外,您還需要指定 App Store ID 和 Apple 開發人員團隊 ID。
- 您也必須將 FDL 通用連結網域設為 應用程式功能的關聯網域。
- 如果您打算將應用程式發行到 iOS 8 以下版本, 您需要將軟體包 ID 設定為 網址。
- 詳情請參閱「接收 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 是動作程式碼網址,在主控台中設定,使用查詢
oobCode
、mode
、apiKey
和 continueUrl
參數。後者是 FIRActionCodeSettings
(Obj-C) 或 ActionCodeSettings
(Swift) 物件中指定的原始 URL
。雖然您可以攔截並處理來自應用程式的傳入連結,而無需任何額外依附元件,但我們建議您使用 FDL 用戶端程式庫來剖析深層連結。行動應用程式可以直接套用動作代碼,類似於自訂電子郵件處理程序一節所述的網頁流程處理方式。
處理電子郵件驗證等電子郵件動作時,需要從深層連結解析 oobCode
查詢參數的動作代碼,然後透過 applyActionCode
套用變更,才能生效,也就是驗證電子郵件。