パスワードの再設定や、ユーザーのメールアドレスを確認する目的でメール アクションを送信するときに、続行 URL を使用して状態を渡すことができます。これにより、ユーザーはアクションの完了後にアプリに戻れるようになります。また、モバイルアプリがインストールされている場合に、ウェブページではなくモバイルアプリからメール アクション リンクが直接処理されるようにデベロッパー側で指定することも可能です。
これは、次の一般的に起こるシナリオで非常に役立ちます。
現在ログインしていないユーザーがログインの必要なコンテンツにアクセスしようとしているが、パスワードを忘れたため、パスワードを再設定するフローをトリガーする場合。ユーザーはこのフローの終了後、元々アクセスしようとしていたアプリのセクションに戻ることを期待しています。
確認済みのアカウントにしかアクセスを許可しないアプリの場合。たとえば、ニュースレターの登録では、ユーザーにメールアドレスの確認を求めます。ユーザーはメール確認フローを処理した後に、アプリに戻って登録を完了できることを期待します。
一般に、ユーザーは Apple アプリでパスワードの再設定やメール確認フローを開始した場合、アプリ内でフローを完了することを期待します。続行 URL を使用して状態を受け渡せる機能により、このことが可能になります。
続行 URL を使用して状態を受け渡せる Firebase Auth の強力な機能により、ユーザー エクスペリエンスを大幅に向上させることができます。
メール アクションで続行 URL の状態を渡す
続行 URL を安全に渡すには、URL のドメインが Firebase コンソールで許可リストに登録されている必要があります。それには、[Authentication] セクションで、[ログイン方法] タブの下にある [承認済みドメイン] のリストにこのドメインを追加します(まだ存在しない場合)。
パスワードの再設定メールまたは確認メールを送信する際は、FIRActionCodeSettings
インスタンスを指定する必要があります。このインターフェースでは、次のパラメータを指定できます。
Swift
パラメータ | 型 | 説明 |
---|---|---|
URL |
文字列 | コンテキストによって異なる意味を持つリンク(状態 / 続行 URL)を設定します。
|
iOSBundleID |
文字列 | iOS バンドル ID を設定して、Firebase Authentication が Apple デバイスで開くウェブ専用リンクとモバイルリンクのどちらを作成するかを判断できるようにします。 |
androidPackageName |
文字列 | Android パッケージ名を設定して、Firebase Authentication が Android デバイスで開くウェブ専用リンクとモバイルリンクのどちらを作成するかを判断できるようにします。 |
handleCodeInApp |
Bool | メール アクション リンクがモバイルアプリとウェブリンクのどちらで最初に開かれるかを示します。デフォルトは false です。true に設定すると、アクション コード リンクはユニバーサル リンクまたは Android アプリリンクとして送信され、アプリがインストールされている場合はそのアプリで開かれます。false の場合、コードは最初にウェブ ウィジェットに送信され、続いてアプリがインストールされている場合はそのアプリにリダイレクトされます。 |
linkDomain |
文字列 | プロジェクトにカスタム Hosting リンク ドメインが定義されている場合は、指定したモバイルアプリでリンクを開く際に使用するドメインを指定します。指定しない場合、デフォルトのドメインが自動的に選択されます(PROJECT_ID.firebaseapp.com |
dynamicLinkDomain |
文字列 | 非推奨。このパラメータは指定しないでください。 |
Objective-C
パラメータ | 型 | 説明 |
---|---|---|
URL |
NSString | コンテキストによって異なる意味を持つリンク(状態 / 続行 URL)を設定します。
|
iOSBundleID |
NSString | iOS バンドル ID を設定して、Firebase Authentication が Android デバイスまたは Apple デバイスで開くウェブ専用リンクとモバイルリンクのどちらを作成するかを判断できるようにします。 |
androidPackageName |
NSString | Android パッケージ名を設定して、Firebase Authentication が Android デバイスまたは Apple デバイスで開くウェブ専用リンクとモバイルリンクのどちらを作成するかを判断できるようにします。 |
handleCodeInApp |
BOOL | メール アクション リンクがモバイルアプリとウェブリンクのどちらで最初に開かれるかを示します。デフォルトは false です。true に設定すると、アクション コード リンクはユニバーサル リンクまたは Android アプリリンクとして送信され、アプリがインストールされている場合はそのアプリで開かれます。false の場合、コードは最初にウェブ ウィジェットに送信され、続いてアプリがインストールされている場合はそのアプリにリダイレクトされます。 |
linkDomain |
NSString | プロジェクトにカスタム Hosting リンク ドメインが定義されている場合は、指定したモバイルアプリでリンクを開く際に使用するドメインを指定します。指定しない場合、デフォルトのドメインが自動的に選択されます(PROJECT_ID.firebaseapp.com |
dynamicLinkDomain |
NSString | 非推奨。このパラメータは指定しないでください。 |
次の例は、カスタム Hosting リンク ドメイン custom-domain.com
を使用して、モバイルアプリで最初に開かれるメール確認リンクを送信する方法を示しています。ディープリンクには、続行 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") // Specify a custom Hosting link domain to use. The domain must be // configured in Firebase Hosting and owned by the project. actionCodeSettings.linkDomain = "custom-domain.com" 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; // Specify a custom Hosting link domain to use. The domain must be // configured in Firebase Hosting and owned by the project. actionCodeSettings.linkDomain = @"custom-domain.com"; [actionCodeSettings setAndroidPackageName:@"com.example.android"]; [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings completion:^(NSError *_Nullable error) { if (error) { // Error occurred. Inspect error.code and handle error. return; } // Email verification sent. }];
Firebase Hosting リンクの構成
Firebase Authentication は、モバイルアプリで開かれるリンクを送信するときに Firebase Hosting を使用します。この機能を使用するには、Firebase コンソールで Hosting リンクを構成する必要があります。
Apple アプリを構成する方法:
- アプリでこれらのリンクを処理する予定の場合は、アプリ機能の関連ドメインとして Hosting リンク ドメインを構成する必要があります。
- 詳しくは、iOS Hosting リンクの受信の手順をご覧ください。
Android アプリを構成します。
- Android アプリでこれらのリンクを処理する予定の場合は、Firebase コンソールのプロジェクト設定でアプリのパッケージ名を指定する必要があります。それに加えて、アプリ証明書の SHA-1 および SHA-256 を指定する必要があります。
AndroidManifest.xml
ファイルで、ディープリンクのインテント フィルタを構成する必要があります。- 詳しくは、Android Hosting リンクの受信の手順をご覧ください。
ウェブ アプリケーションでメール アクションを処理する
最初にウェブアプリでアクション コード リンクを処理し、正常に完了した後で別のウェブページまたはモバイルアプリ(使用可能な場合)にリダイレクトするかどうかを指定できます。これを行うには、FIRActionCodeSettings
(Obj-C)または ActionCodeSettings
(Swift)オブジェクトで handleCodeInApp
を false
に設定します。バンドル ID または Android パッケージ名は必須ではありませんが、指定すると、メール アクション コードの完了時に、指定されたアプリにユーザーをリダイレクトできます。
ここで使用されるウェブ URL は、メール アクション テンプレートのセクションで構成された URL です。デフォルトの URL がすべてのプロジェクトにプロビジョニングされます。メール アクション ハンドラをカスタマイズする方法について詳しくは、メールハンドラのカスタマイズをご覧ください。
この場合、continueURL
クエリ パラメータ内のリンクは、ActionCodeSettings
オブジェクトで指定された URL
がペイロードに含まれる Hosting リンクになります。
メール確認などのメール アクションを処理する場合、ディープリンクから oobCode
クエリ パラメータのアクション コードを解析した後、applyActionCode
を使用してそのコードを適用し、変更を有効にする(メール確認などが行われるようにする)必要があります。
モバイルアプリでメール アクションを処理する
モバイルアプリがインストールされている場合に、最初にモバイルアプリ内でアクション コード リンクを処理するかどうかを指定できます。そのモバイルアプリをサポートしていないデバイスからリンクがクリックされた場合、リンクはウェブページから開かれます。これを行うには、FIRActionCodeSettings
(Obj-C)または ActionCodeSettings
(Swift)オブジェクトで handleCodeInApp
を true
に設定します。モバイルアプリの Android パッケージ名またはバンドル ID も指定する必要があります。モバイルアプリが使用できない場合に使用される代替ウェブ URL は、メール アクション テンプレートのセクションで設定された URL です。デフォルトの URL がすべてのプロジェクトにプロビジョニングされます。メール アクション ハンドラをカスタマイズする方法について詳しくは、メールハンドラのカスタマイズをご覧ください。
この場合、ユーザーに送信されるモバイルアプリ リンクは、ペイロードがアクション コード URL の Hosting リンクとなります。このリンクは、コンソールで構成され、oobCode
、mode
、apiKey
、continueUrl
のクエリ パラメータを含んでいます。後者は、FIRActionCodeSettings
(Obj-C)または ActionCodeSettings
(Swift)オブジェクトで指定された元の URL
になります。アクション コードは、メールハンドラのカスタマイズで説明されているウェブフローからの処理方法と同様に、モバイルアプリから直接適用できます。
メール確認などのメール アクションを処理する場合、ディープリンクから oobCode
クエリ パラメータのアクション コードを解析した後、applyActionCode
を使用してそのコードを適用し、変更を有効にする(メール確認などが行われるようにする)必要があります。