Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

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

パスワード リセットの電子メール アクションを送信するとき、またはユーザーの電子メールを確認するときに、続行 URL を介して状態を渡すことができます。これにより、ユーザーはアクションの完了後にアプリに戻ることができます。さらに、Web ページではなくモバイル アプリケーションがインストールされている場合に、電子メール アクション リンクをモバイル アプリケーションから直接処理するかどうかを指定できます。

これは、次の一般的なシナリオで非常に役立ちます。

  • 現在ログインしていないユーザーが、ユーザーのサインインを必要とするコンテンツにアクセスしようとしている可能性があります。ただし、ユーザーがパスワードを忘れたため、パスワードのリセット フローがトリガーされた可能性があります。フローの最後に、ユーザーはアクセスしようとしていたアプリのセクションに戻ることを期待しています。

  • アプリケーションは、確認済みのアカウントへのアクセスのみを提供する場合があります。たとえば、ニュースレターでは、ユーザーが購読する前に電子メールを確認する必要がある場合があります。ユーザーはメール確認フローを通過し、アプリに戻ってサブスクリプションを完了することを期待します。

  • また、ユーザーがモバイル デバイスからフローを開始し、検証後にブラウザーではなくモバイル アプリに戻ることを期待している場合もあります。

継続 URL を介して状態を渡す機能を持つことは、Firebase Auth が提供する強力な機能であり、ユーザー エクスペリエンスを大幅に向上させることができます。

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

続行 URL を安全に渡すには、URL のドメインをFirebase コンソールでホワイトリストに登録する必要があります。これは、[認証] セクションで、[サインイン方法] タブの [承認されたドメイン] のリストにこのドメインが追加されていない場合は追加することによって行われます。

パスワード リセット メールまたは確認メールを送信する場合は、 ActionCodeSettingsインスタンスを指定する必要があります。次のメソッドを含む関連するActionCodeSettings.Builderクラスを使用して作成できます。

方法説明
setUrl(String url)

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

  • リンクが Web アクション ウィジェットで処理される場合、これはcontinueUrlクエリ パラメーターのディープ リンクです。
  • リンクがアプリで直接処理される場合、これはダイナミック リンクのディープ リンクのcontinueUrlクエリ パラメータです。
setIOSBundleId(String iOSBundleId) iOS バンドル ID を設定します。インストールされている場合、iOS アプリでリンクを開こうとします。 iOS アプリはコンソールに登録する必要があります。
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Android パッケージ名を設定します。インストールされている場合、Android アプリでリンクを開こうとします。 installIfNotAvailable がtrueに設定されている場合、デバイスが Android アプリをサポートしており、アプリがまだインストールされていない場合に、Android アプリをインストールするかどうかを指定します。 minimumVersion が指定されていて、古いバージョンのアプリがインストールされている場合、ユーザーは Play ストアに移動してアプリをアップグレードします。 Android アプリはコンソールに登録する必要があります。
setHandleCodeInApp(boolean status)電子メール アクション リンクが最初にモバイル アプリまたは Web リンクで開かれるかどうか。デフォルトは false です。 true に設定すると、アクション コード リンクはユニバーサル リンクまたは Android アプリ リンクとして送信され、インストールされている場合はアプリによって開かれます。 false の場合、コードは最初に Web ウィジェットに送信され、インストールされている場合は続行時にアプリにリダイレクトされます。
setDynamicLinkDomain(String dynamicLinkDomain) Firebase Dynamic Links を使用してリンクを開く場合に、現在のリンクに使用するダイナミック リンク ドメイン (またはサブドメイン) を設定します。プロジェクトごとに複数のダイナミック リンク ドメインを設定できるため、このフィールドで明示的に 1 つを選択できます。何も指定しない場合、デフォルトで最初のドメインが使用されます。

次の例は、モバイル アプリで最初に Firebase Dynamic Link (iOS アプリcom.example.iosまたは Android アプリcom.example.android ) として開くメール確認リンクを送信する方法を示しています。ディープ リンクには、継続 URL ペイロードhttps://www.example.com/?email=user@example.comが含まれます。

Kotlin+KTX

val auth = Firebase.auth
val user = auth.currentUser!!

val url = "http://www.example.com/verify?uid=" + user.uid
val actionCodeSettings = ActionCodeSettings.newBuilder()
        .setUrl(url)
        .setIOSBundleId("com.example.ios")
        // The default for this is populated with the current android package name.
        .setAndroidPackageName("com.example.android", false, null)
        .build()

user.sendEmailVerification(actionCodeSettings)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Email sent.")
            }
        }

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

String url = "http://www.example.com/verify?uid=" + user.getUid();
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
        .setUrl(url)
        .setIOSBundleId("com.example.ios")
        // The default for this is populated with the current android package name.
        .setAndroidPackageName("com.example.android", false, null)
        .build();

user.sendEmailVerification(actionCodeSettings)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

Firebase Auth は、モバイル アプリケーションで開くことを意図したリンクを送信するときにFirebase Dynamic Linksを使用します。この機能を使用するには、Firebase コンソールでダイナミック リンクを構成する必要があります。

  1. Firebase ダイナミック リンクを有効にします。

    1. Firebase コンソールで、[ Dynamic Links]セクションを開きます。
    2. Dynamic Links の利用規約に同意して Dynamic Links ドメインを作成していない場合は、ここで行ってください。

      Dynamic Links ドメインをすでに作成している場合は、メモしておいてください。通常、Dynamic Links ドメインは次の例のようになります。

      example.page.link

      この値は、受信リンクをインターセプトするように Apple または Android アプリを構成するときに必要になります。

  2. Android アプリケーションの構成:

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

    1. これらのリンクを iOS アプリケーションから処理する場合は、iOS バンドル ID を Firebase コンソール プロジェクト設定で指定する必要があります。さらに、App Store ID と Apple Developer Team ID も指定する必要があります。
    2. また、FDL ユニバーサル リンク ドメインをアプリケーション機能の関連ドメインとして構成する必要があります。
    3. アプリケーションを iOS バージョン 8 以下に配布する場合は、受信 URL のカスタム スキームとして iOS バンドル ID を設定する必要があります。
    4. 詳細については、 iOS Dynamic Links の受信手順を参照してください。

Web アプリケーションでの電子メール アクションの処理

モバイル アプリケーションが使用可能な場合、最初に Web アプリケーションからのアクション コード リンクを処理し、正常に完了した後に別の Web ページまたはモバイル アプリケーションにリダイレクトするかどうかを指定できます。これは、 ActionCodeSettings.BuilderオブジェクトでsetHandleCodeInApp(false)を呼び出すことによって行われます。 iOS バンドル ID または Android パッケージ名は必須ではありませんが、それらを提供すると、ユーザーは電子メール アクション コードの完了時に指定されたアプリにリダイレクトすることができます。

ここで使用される Web URL は、電子メール アクション テンプレート セクションで構成されたものです。デフォルトの 1 つがすべてのプロジェクトにプロビジョニングされます。メール アクション ハンドラーをカスタマイズする方法の詳細については、メール ハンドラーのカスタマイズを参照してください。

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

メール検証などのメール アクションを処理する場合、 oobCodeクエリ パラメーターのアクション コードをディープ リンクから解析し、 applyActionCodeを介して適用して変更を有効にする (つまり、メールを検証する) 必要があります。

モバイル アプリケーションでの電子メール アクションの処理

モバイル アプリケーションがインストールされている場合、最初にモバイル アプリケーション内でアクション コード リンクを処理するかどうかを指定できます。 Android アプリケーションでは、 installIfNotAvailableブール値を介して、デバイスがサポートしていてまだインストールされていない場合にアプリをインストールすることを指定することもできます。モバイル アプリケーションをサポートしていないデバイスからリンクをクリックすると、代わりに Web ページからリンクが開かれます。これは、 ActionCodeSettings.BuilderオブジェクトでsetHandleCodeInApp(true)を呼び出すことによって行われます。モバイル アプリケーションの Android パッケージ名または iOS バンドル ID も指定する必要があります。

モバイル アプリが使用できない場合にここで使用される代替 Web URL は、電子メール アクション テンプレート セクションで構成されたものです。デフォルトの 1 つがすべてのプロジェクトにプロビジョニングされます。メール アクション ハンドラーをカスタマイズする方法の詳細については、メール ハンドラーのカスタマイズを参照してください。

この場合、ユーザーに送信されるモバイル アプリ リンクは、コンソールで構成されたアクション コード URL をペイロードとする FDL リンクであり、クエリ パラメータoobCodemodeapiKey 、およびcontinueUrlを使用します。後者は、 ActionCodeSettingsオブジェクトで指定された元のURLになります。追加の依存関係なしでアプリからの着信リンクをインターセプトして処理できますが、FDL クライアント ライブラリを使用してディープ リンクを解析することをお勧めします。アクション コードは、電子メール ハンドラーのカスタマイズセクションで説明されている Web フローから処理される方法と同様に、モバイル アプリケーションから直接適用できます。

メール検証などのメール アクションを処理する場合、 oobCodeクエリ パラメーターのアクション コードをディープ リンクから解析し、 applyActionCodeを介して適用して変更を有効にする (つまり、メールを検証する) 必要があります。