傳送密碼的電子郵件動作時,您可以透過延續網址來傳遞狀態 重設或驗證使用者的電子郵件這樣一來,使用者 應用程式會在動作完成後返回應用程式。此外,您還可以指定 是否直接從行動應用程式處理電子郵件動作連結 而不是網頁
這在下列常見情境中非常實用:
使用者 (目前並未登入) 可能嘗試存取 要求使用者必須登入。然而,使用者可能忘記 並因此觸發重設密碼流程。結尾 流程時,使用者會預期返回應用程式的某個部分 嘗試存取的內容
應用程式只能提供已驗證帳戶的存取權。適用對象 舉例來說,電子報應用程式可能會要求使用者先驗證電子郵件地址 訂閱。使用者會經過電子郵件驗證流程,並預期 完成訂閱程序
一般而言,使用者啟動密碼重設或電子郵件驗證流程時 預期會在應用程式中完成流程的 Apple 應用程式。包括 可以透過繼續網址傳遞狀態
能夠透過繼續網址傳遞狀態是一項強大的功能, Firebase 驗證功能提供可大幅提升使用者體驗的功能。
在電子郵件動作中傳遞狀態/繼續網址
為了安全傳遞繼續網址,網址的網域必須符合 已加入 Firebase 控制台的許可清單。 方法是在驗證部分,將該網域新增至 「Sign-in method」分頁下會列出「Authorized domain」(授權網域) 清單 (如果尚未顯示)。
傳送時必須提供 FIRActionCodeSettings
例項
並要求重設密碼電子郵件或驗證電子郵件這個介面使用
參數
Swift
參數 | 類型 | 說明 |
---|---|---|
URL |
字串 | 設定不同意義的連結 (狀態/繼續網址) 不同的情境:
|
iOSBundleID |
字串 | 設定軟體包 ID。如果發生以下情況,系統將嘗試在 Apple 應用程式中開啟連結 已安裝您必須在 Play 管理中心註冊應用程式。如果答案為「否」 軟體包 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 應用程式中開啟連結 已安裝您必須在 Play 管理中心註冊應用程式。 |
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 開啟)做為多重動態 每個專案都可以設定連結網域 明確選擇一種如未提供,第一個網域 加以排序。 |
以下範例說明如何傳送
會先以 Firebase 動態連結的形式在行動應用程式中開啟
動態連結網域 example.page.link
(iOS 應用程式 com.example.ios
或 Android 應用程式 com.example.android
,且請前往
如未安裝,最低版本為 12
,則會安裝。
深層連結將包含繼續網址酬載
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 控制台中設定 Dynamic Links。
啟用 Firebase Dynamic Links:
- 在 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 Dynamic Links 操作說明。
設定 Apple 應用程式:
- 如果您打算從應用程式處理這些連結,請 您必須在 Firebase 控制台中指定軟體包 ID 專案設定。此外,App Store ID 和 Apple Developer 您也需要指定團隊 ID。
- 您也必須將 FDL 通用連結網域設為 應用程式功能的關聯網域。
- 如果您打算將應用程式發行到 iOS 8 以下版本, 您需要將軟體包 ID 設定為 網址。
- 詳情請參閱 取得 Apple 平台 Dynamic Links 操作說明。
處理網頁應用程式中的電子郵件動作
您可以指定是否要處理來自網路的動作代碼連結
再重新導向至其他網頁或行動應用程式
驗證完成後,前提是行動應用程式可供使用。
方法是將 handleCodeInApp
設為 false
FIRActionCodeSettings
(Obj-C) 或 ActionCodeSettings
(Swift) 物件。雖然
軟體包 ID
或 Android 套件名稱,只要提供這類名稱,使用者就能
以在電子郵件動作程式碼完成時,重新導向至指定應用程式。
這裡使用的網址是電子郵件動作範本中設定的網址 專區。已佈建所有專案的預設 ID。詳情請參閱 自訂電子郵件處理常式,以瞭解更多資訊 如何自訂電子郵件動作處理常式。
在這個範例中,continueURL
查詢參數中的連結會是
FDL 連結,其酬載是 ActionCodeSettings
中指定的 URL
物件。雖然您可以攔截及處理應用程式傳入的連結
沒有額外的依附元件,建議使用 FDL 用戶端程式庫
自動剖析深層連結
處理電子郵件動作 (例如電子郵件驗證) 時,
您需要從深層連結中剖析 oobCode
查詢參數,然後套用
並透過 applyActionCode
使變更生效,例如:待驗證電子郵件。
處理行動應用程式中的電子郵件動作
您可以指定是否要處理檔案中的動作程式碼連結。
請先安裝行動應用程式Android 應用程式
您也可以透過 androidInstallIfNotAvailable
指定
如果裝置支援且尚未安裝應用程式,系統將進行安裝。
已安裝。
如果點擊連結的來源裝置不支援行動裝置
就會改為從網頁開啟
方法是將 handleCodeInApp
設為 true
FIRActionCodeSettings
(Obj-C) 或 ActionCodeSettings
(Swift) 物件。
行動應用程式的 Android 套件名稱或軟體包 ID
這裡使用的備用網址,在沒有行動應用程式可用時,就會是
電子郵件動作範本部分中設定的範本預設選項為
所有專案都能使用詳情請參閱
自訂電子郵件處理常式,以瞭解更多資訊
如何自訂電子郵件動作處理常式。
在此情況下,傳送到使用者的行動應用程式連結會是 FDL 連結,且
payload 是動作程式碼網址,在主控台中設定,使用查詢
oobCode
、mode
、apiKey
和 continueUrl
參數。後者則是
FIRActionCodeSettings
(Obj-C) 中指定的原始 URL
,或
ActionCodeSettings
(Swift) 物件。雖然您可以攔截及處理
無需任何其他依附元件的應用程式傳入連結,
並使用 FDL 用戶端程式庫剖析深層連結。動作程式碼可以
直接從行動應用程式套用
網路流程中的
自訂電子郵件處理常式一節。
處理電子郵件動作 (例如電子郵件驗證) 時,
您需要從深層連結中剖析 oobCode
查詢參數,然後套用
並透過 applyActionCode
使變更生效,例如:待驗證電子郵件。