パスワードの再設定や、ユーザーのメールアドレスを確認する目的でメール アクションを送信するときに、続行 URL を使用して状態を渡すことができます。これにより、ユーザーはアクションの完了後にアプリに戻れるようになります。また、モバイルアプリがインストールされている場合に、ウェブページではなくモバイルアプリからメール アクション リンクが直接処理されるようにデベロッパー側で指定することも可能です。
これは、次の一般的に起こるシナリオで非常に役立ちます。
現在ログインしていないユーザーがログインの必要なコンテンツにアクセスしようとしているが、パスワードを忘れたため、パスワードを再設定するフローをトリガーする場合。ユーザーはこのフローの終了後、元々アクセスしようとしていたアプリのセクションに戻ることを期待しています。
確認済みのアカウントにしかアクセスを許可しないアプリの場合。たとえば、ニュースレターの登録では、ユーザーにメールアドレスの確認を求めます。ユーザーはメール確認フローを処理した後に、アプリに戻って登録を完了できることを期待します。
一般に、ユーザーは Apple アプリでパスワードの再設定やメール確認フローを開始した場合、アプリ内でフローを完了することを期待します。続行 URL を使用して状態を受け渡せる機能により、このことが可能になります。
続行 URL を使用して状態を受け渡せる Firebase Auth の強力な機能により、ユーザー エクスペリエンスを大幅に向上させることができます。
メール アクションで状態 / 続行 URL を渡す
続行 URL を安全に渡すには、URL のドメインが Firebase コンソールで許可リストに登録されている必要があります。それには、[Authentication] セクションで、[ログイン方法] タブの下にある [承認済みドメイン] のリストにこのドメインを追加します(まだ存在しない場合)。
パスワードの再設定メールまたは確認メールを送信する際は、FIRActionCodeSettings
インスタンスを指定する必要があります。このインターフェースでは、次のパラメータを指定できます。
Swift
パラメータ | タイプ | 説明 |
---|---|---|
URL |
文字列 | コンテキストによって異なる意味を持つリンク(状態 / 続行 URL)を設定します。
|
iOSBundleID |
文字列 | バンドル ID を設定します。これにより、Apple アプリがインストールされていれば、そのアプリでリンクを開くことを試みます。このアプリはコンソールに登録されている必要があります。バンドル ID が指定されていない場合、このフィールドの値は、アプリのメインバンドルのバンドル ID に設定されます。 |
androidPackageName |
文字列 | Android パッケージ名を設定します。これにより、Android アプリがインストールされている場合に、そのアプリでリンクを開くことを試みます。 |
androidInstallIfNotAvailable |
Bool | Android アプリがデバイスでサポートされていて、まだインストールされていない場合に、そのアプリをインストールするかどうかを指定します。このフィールドが packageName なしで指定された場合、このフィールドとともに packageName を指定する必要があることを示すエラーがスローされます。 |
androidMinimumVersion |
文字列 | このフローでサポートされるアプリの最小バージョン。minimumVersion が指定され、古いバージョンのアプリがインストールされている場合、ユーザーは Play ストアにリダイレクトされ、アプリのアップグレードを促されます。Android アプリはコンソールに登録されている必要があります。 |
handleCodeInApp |
Bool | メール アクション リンクがモバイルアプリとウェブリンクのどちらで最初に開かれるかを示します。デフォルトは false です。true に設定すると、アクション コード リンクはユニバーサル リンクまたは Android アプリリンクとして送信され、アプリがインストールされている場合はそのアプリで開かれます。false の場合、コードは最初にウェブ ウィジェットに送信され、続いてアプリがインストールされている場合はそのアプリにリダイレクトされます。 |
dynamicLinkDomain |
文字列 | Firebase Dynamic Links を使用してリンクを開く場合は、現在のリンクに使用するダイナミック リンク ドメイン(またはサブドメイン)を設定します。プロジェクトごとに複数のダイナミック リンク ドメインを構成できるため、このフィールドでドメインを明示的に選択できます。指定しない場合、デフォルトで最初のドメインが使用されます。 |
Objective-C
パラメータ | タイプ | 説明 |
---|---|---|
URL |
NSString | コンテキストによって異なる意味を持つリンク(状態 / 続行 URL)を設定します。
|
iOSBundleID |
NSString | バンドル ID を設定します。これにより、Apple アプリがインストールされていれば、そのアプリでリンクを開くことを試みます。このアプリはコンソールに登録されている必要があります。 |
androidPackageName |
NSString | Android パッケージ名を設定します。これにより、Android アプリがインストールされている場合に、そのアプリでリンクを開くことを試みます。 |
androidInstallIfNotAvailable |
BOOL | Android アプリがデバイスでサポートされていて、まだインストールされていない場合に、そのアプリをインストールするかどうかを指定します。このフィールドが packageName なしで指定された場合、このフィールドとともに packageName を指定する必要があることを示すエラーがスローされます。 |
androidMinimumVersion |
NSString | このフローでサポートされるアプリの最小バージョン。minimumVersion が指定され、古いバージョンのアプリがインストールされている場合、ユーザーは Play ストアにリダイレクトされ、アプリのアップグレードを促されます。Android アプリはコンソールに登録されている必要があります。 |
handleCodeInApp |
BOOL | メール アクション リンクがモバイルアプリとウェブリンクのどちらで最初に開かれるかを示します。デフォルトは false です。true に設定すると、アクション コード リンクはユニバーサル リンクまたは Android アプリリンクとして送信され、アプリがインストールされている場合はそのアプリで開かれます。false の場合、コードは最初にウェブ ウィジェットに送信され、続いてアプリがインストールされている場合はそのアプリにリダイレクトされます。 |
dynamicLinkDomain |
NSString | Firebase Dynamic Links を使用してリンクを開く場合は、現在のリンクに使用するダイナミック リンク ドメイン(またはサブドメイン)を設定します。プロジェクトごとに複数のダイナミック リンク ドメインを構成できるため、このフィールドでドメインを明示的に選択できます。指定しない場合、デフォルトで最初のドメインが使用されます。 |
次の例は、カスタム動的リンクドメイン example.page.link
を使用して、モバイルアプリで最初に Firebase Dynamic Links として開かれるメール確認リンクを送信する方法を示しています(iOS アプリ com.example.ios
、または Android アプリ com.example.android
がまだインストールされていない場合はインストールされます。最小バージョンは 12
です)。ディープリンクには、続行 URL ペイロード 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 Auth では、モバイルアプリで開かれるリンクを送信するときに 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 アプリを構成する方法:
- Apple アプリでこれらのリンクを処理する予定の場合は、Firebase コンソールのプロジェクト設定で Apple バンドル ID を指定する必要があります。それに加えて、App Store ID と Apple デベロッパー チーム ID を指定する必要があります。
- FDL ユニバーサル リンク ドメインをアプリ機能の関連ドメインとして構成する必要があります。
- アプリを iOS バージョン 8 以下に配布する予定がある場合は、Apple バンドル ID を受信 URL のカスタム スキームとして設定する必要があります。
- 詳しくは、Apple プラットフォームで Dynamic Links を受信する手順をご覧ください。
ウェブ アプリケーションでメール アクションを処理する
最初にウェブアプリでアクション コード リンクを処理し、正常に完了した後で別のウェブページまたはモバイルアプリ(使用可能な場合)にリダイレクトするかどうかを指定できます。これを行うには、FIRActionCodeSettings
(Obj-C)または ActionCodeSettings
(Swift)オブジェクトで handleCodeInApp
を false
に設定します。バンドル ID または Android パッケージ名は必須ではありませんが、指定すると、メール アクション コードの完了時に、指定されたアプリにユーザーをリダイレクトできます。
ここで使用されるウェブ URL は、メール アクション テンプレートのセクションで構成された URL です。デフォルトの URL がすべてのプロジェクトにプロビジョニングされます。メール アクション ハンドラをカスタマイズする方法について詳しくは、メールハンドラのカスタマイズをご覧ください。
この場合、continueURL
クエリ パラメータ内のリンクは、ActionCodeSettings
オブジェクトで指定された URL
がペイロードに含まれる FDL リンクになります。アプリからの受信リンクは、他の依存関係なしでもインターセプトして処理できますが、FDL クライアント ライブラリを使用してディープリンクを解析することをおすすめします。
メール確認などのメール アクションを処理する場合、ディープリンクから oobCode
クエリ パラメータのアクション コードを解析した後、applyActionCode
を使用してそのコードを適用し、変更を有効にする(メール確認などが行われるようにする)必要があります。
モバイルアプリでメール アクションを処理する
モバイルアプリがインストールされている場合に、最初にモバイルアプリ内でアクション コード リンクを処理するかどうかを指定できます。Android アプリの場合は、androidInstallIfNotAvailable
を使って、デバイスでサポートされているアプリがまだインストールされていなければインストールするよう指定することもできます。そのモバイルアプリをサポートしていないデバイスからリンクがクリックされた場合、リンクはウェブページから開かれます。これを行うには、FIRActionCodeSettings
(Obj-C)または ActionCodeSettings
(Swift)オブジェクトで handleCodeInApp
を true
に設定します。モバイルアプリの Android パッケージ名またはバンドル ID も指定する必要があります。モバイルアプリが使用できない場合に使用される代替ウェブ URL は、メール アクション テンプレートのセクションで構成された URL です。デフォルトの URL がすべてのプロジェクトにプロビジョニングされます。メール アクション ハンドラをカスタマイズする方法について詳しくは、メールハンドラのカスタマイズをご覧ください。
この場合、ユーザーに送信されるモバイルアプリ リンクは、コンソールで構成したアクション コード URL をペイロードとする FDL リンクになり、oobCode
、mode
、apiKey
、continueUrl
のクエリ パラメータを伴います。後者は、FIRActionCodeSettings
(Obj-C)または ActionCodeSettings
(Swift)オブジェクトで指定された元の URL
になります。アプリからの受信リンクは、他の依存関係なしでもインターセプトして処理することができますが、FDL クライアント ライブラリを使用してディープリンクを解析することをおすすめします。アクション コードは、メールハンドラのカスタマイズで説明されているウェブフローからの処理方法と同様に、モバイルアプリから直接適用できます。
メール確認などのメール アクションを処理する場合、ディープリンクから oobCode
クエリ パラメータのアクション コードを解析した後、applyActionCode
を使用してそのコードを適用し、変更を有効にする(メール確認などが行われるようにする)必要があります。