メール アクションで状態を渡す

パスワードの再設定や、ユーザーのメールアドレスを確認する目的でメール アクションを送信するときに、続行 URL を使用して状態を渡すことができます。これにより、ユーザーはアクションの完了後にアプリに戻れるようになります。また、モバイルアプリがインストールされている場合に、ウェブページではなくモバイルアプリからメール アクション リンクが直接処理されるようにデベロッパー側で指定することも可能です。

この動作は、以下のようなよくある状況では非常に役立ちます。

  • 現在ログインしていないユーザーがログインの必要なコンテンツにアクセスしようとしているが、パスワードを忘れたため、パスワードを再設定するフローをトリガーする場合。ユーザーはこのフローの終了後、元々アクセスしようとしていたアプリのセクションに戻ることを期待します。

  • 確認済みのアカウントにしかアクセスを許可しないアプリの場合。たとえば、ニュースレターの登録では、ユーザーにメールアドレスの確認を求めます。ユーザーはメール確認フローを処理した後に、アプリに戻って登録を完了できることを期待します。

  • 一般に、ユーザーは iOS アプリでパスワードの再設定やメール確認フローを開始した場合、アプリ内でフローを完了することを期待します。続行 URL を使用して状態を受け渡せる機能により、このことが可能になります。

続行 URL を使用して状態を受け渡せる機能は、ユーザー エクスペリエンスを大幅に向上させることができる Firebase Auth の強力な特長です。

メール アクションで状態 / 続行 URL を渡す

続行 URL を安全に渡すには、URL のドメインが Firebase コンソールでホワイトリストに登録されている必要があります。それには、[Authentication] セクションで、[OAuth リダイレクト ドメイン] のリストにこのドメインを追加します(まだ存在しない場合)。

パスワードの再設定メールまたは確認メールを送信する際は、FIRActionCodeSettings インスタンスを指定する必要があります。このインターフェースでは、次のパラメータを指定できます。

Objective-C

パラメータ 説明
URL NSString

コンテキストによって異なる意味を持つリンク(状態 / 続行 URL)を設定します。

  • リンクがウェブ アクション ウィジェットで処理される場合、これは continueUrl クエリ パラメータのディープリンクを表します。
  • リンクがアプリ内で直接処理される場合、これはダイナミック リンクのディープリンク内の continueUrl クエリ パラメータを表します。
iOSBundleID NSString iOS バンドル ID を設定します。これにより、iOS アプリがインストールされている場合に、そのアプリでリンクを開くことを試みます。iOS アプリはコンソールに登録されている必要があります。
androidPackageName NSString Android パッケージ名を設定します。これにより、Android アプリがインストールされている場合に、そのアプリでリンクを開くことを試みます。
androidInstallIfNotAvailable BOOL Android アプリが端末でサポートされていて、まだインストールされていない場合に、そのアプリをインストールするかどうかを指定します。このフィールドが packageName なしで指定された場合、このフィールドとともに packageName を指定する必要があることを示すエラーがスローされます。
androidMinimumVersion NSString このフローでサポートされるアプリの最小バージョン。minimumVersion が指定され、古いバージョンのアプリがインストールされている場合、ユーザーは Play ストアにリダイレクトされ、アプリのアップグレードを促されます。Android アプリはコンソールに登録されている必要があります。
handleCodeInApp BOOL メール アクション リンクがモバイルアプリとウェブリンクのどちらで最初に開かれるかを示します。デフォルトは false です。true に設定すると、アクション コード リンクはユニバーサル リンクまたは Android アプリリンクとして送信され、アプリがインストールされている場合はそのアプリで開かれます。false の場合、コードは最初にウェブ ウィジェットに送信され、続いてアプリがインストールされている場合はそのアプリにリダイレクトされます。

Swift

パラメータ 説明
URL 文字列

コンテキストによって異なる意味を持つリンク(状態 / 続行 URL)を設定します。

  • リンクがウェブ アクション ウィジェットで処理される場合、これは continueUrl クエリ パラメータのディープリンクを表します。
  • リンクがアプリ内で直接処理される場合、これはダイナミック リンクのディープリンク内の continueUrl クエリ パラメータを表します。
iOSBundleID 文字列 iOS バンドル ID を設定します。これにより、iOS アプリがインストールされている場合に、そのアプリでリンクを開こうとします。iOS アプリはコンソールに登録されている必要があります。
androidPackageName 文字列 Android パッケージ名を設定します。これにより、Android アプリがインストールされている場合に、そのアプリでリンクを開くことを試みます。
androidInstallIfNotAvailable BOOL Android アプリが端末でサポートされていて、まだインストールされていない場合に、そのアプリをインストールするかどうかを指定します。このフィールドが packageName なしで指定された場合、このフィールドとともに packageName を指定する必要があることを示すエラーがスローされます。
androidMinimumVersion 文字列 このフローでサポートされるアプリの最小バージョン。minimumVersion が指定され、古いバージョンのアプリがインストールされている場合、ユーザーは Play ストアにリダイレクトされ、アプリのアップグレードを促されます。Android アプリはコンソールに登録されている必要があります。
handleCodeInApp BOOL メール アクション リンクがモバイルアプリとウェブリンクのどちらで最初に開かれるかを示します。デフォルトは false です。true に設定すると、アクション コード リンクはユニバーサル リンクまたは Android アプリリンクとして送信され、アプリがインストールされている場合はそのアプリで開かれます。false の場合、コードは最初にウェブ ウィジェットに送信され、続いてアプリがインストールされている場合はそのアプリにリダイレクトされます。

次の例は、モバイルアプリで最初に Firebase ダイナミック リンクとして開かれるメール確認リンクを送信する方法を示しています(iOS アプリ com.example.ios または Android アプリ com.example.android がまだインストールされていない場合はインストールされます。また、最小バージョンは 12 です)。ディープリンクには、続行 URL ペイロード https://www.example.com/?email=user@example.com が含まれています。

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 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.
 }];

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.setAndroidPakageName("com.example.android",
                                         installIfNotAvailable:true,
                                         minumumVersion:"12")
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Firebase Auth では、モバイルアプリで開かれるリンクを送信するときに Firebase Dynamic Links が使用されます。この機能を使用するには、Firebase コンソールで Dynamic Links を設定する必要があります。

  1. Firebase Dynamic Links を有効にします。

    1. Firebase コンソールで [Dynamic Links] セクションを開きます。
    2. Dynamic Links の利用規約をまだ受け入れていない場合は、[使ってみる] を選択します。メインの Dynamic Links ダッシュボードに戻ります。
    3. ダイナミック リンク ドメインをメモしておきます。これは abc123.app.goo.gl のような形式で、受信リンクをインターセプトするように Android または iOS アプリを設定するときに必要になります。
  2. Android アプリを設定します。

    1. Android アプリでこれらのリンクを処理する予定の場合は、Android パッケージ名を Firebase コンソールのプロジェクト設定で指定する必要があります。それに加えて、アプリ証明書の SHA-1 および SHA-256 を指定する必要があります。
    2. AndroidManifest.xml ファイルのディープリンクのインテント フィルタを設定する必要があります。
    3. これについて詳しくは、Android Dynamic Links の受信の手順をご覧ください。
  3. iOS アプリを設定します。

    1. iOS アプリでこれらのリンクを処理する予定の場合は、iOS バンドル ID を Firebase コンソールのプロジェクト設定で指定する必要があります。それに加えて、App Store ID と Apple デベロッパー チーム ID を指定する必要があります。
    2. FDL ユニバーサル リンク ドメインをアプリ機能の関連ドメインとして設定する必要があります。
    3. アプリを iOS バージョン 8 以下に配布する予定がある場合は、iOS バンドル ID を受信 URL のカスタム スキームとして設定する必要があります。
    4. 詳しくは、iOS Dynamic Links の受信の手順をご覧ください。

ウェブアプリでメール アクションを処理する

最初にウェブアプリでアクション コード リンクを処理し、正常に完了した後で別のウェブページまたはモバイルアプリ(使用可能な場合)にリダイレクトするかどうかを指定できます。これを行うには、FIRActionCodeSettings(Obj-C)または ActionCodeSettings(Swift)オブジェクトで handleCodeInAppfalse に設定します。iOS バンドル ID または Android パッケージ名は必須ではありませんが、指定すると、メール アクション コードの完了時にユーザーを指定されたアプリにリダイレクトさせることができます。

ここで使用されるウェブ URL は、メール アクション テンプレートのセクションで設定された URL です。デフォルトの URL がすべてのプロジェクトにプロビジョニングされます。メール アクション ハンドラをカスタマイズする方法について詳しくは、メールハンドラのカスタマイズをご覧ください。

この場合、continueURL クエリ パラメータ内のリンクは、ActionCodeSettings オブジェクトで指定された URL がペイロードに含まれる FDL リンクになります。アプリからの受信リンクは、他の依存関係なしでもインターセプトして処理することができますが、FDL クライアント ライブラリを使用してディープリンクを解析することをおすすめします。

モバイルアプリでメール アクションを処理する

モバイルアプリがインストールされている場合に、最初にモバイルアプリ内でアクション コード リンクを処理するかどうかを指定できます。Android アプリの場合は、androidInstallIfNotAvailable を使って、端末でサポートされているものの、まだインストールされていないアプリをインストールするよう指定することもできます。そのモバイルアプリをサポートしていない端末からリンクがクリックされた場合、リンクはウェブページから開かれます。これを行うには、FIRActionCodeSettings(Obj-C)または ActionCodeSettings(Swift)オブジェクトで handleCodeInApptrue に設定します。モバイルアプリの Android パッケージ名または iOS バンドル ID も指定する必要があります。モバイルアプリが使用できない場合に使用される代替ウェブ URL は、メール アクション テンプレートのセクションで設定された URL です。デフォルトの URL がすべてのプロジェクトにプロビジョニングされます。メール アクション ハンドラをカスタマイズする方法について詳しくは、メールハンドラのカスタマイズをご覧ください。

この場合、ユーザーに送信されるモバイルアプリ リンクは、クエリ パラメータ oobCodemodeapiKeycontinueUrl を使用してコンソールで設定されたアクション コード URL がペイロードに含まれる FDL リンクになります。後者は、FIRActionCodeSettings(Obj-C)または ActionCodeSettings(Swift)オブジェクトで指定された元の URL になります。アプリからの受信リンクは、他の依存関係なしでもインターセプトして処理することができますが、FDL クライアント ライブラリを使用してディープリンクを解析することをおすすめします。アクション コードは、メールハンドラのカスタマイズ セクションで説明されているウェブフローからの処理方法と同様に、モバイルアプリから直接適用できます。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。