iframe を使用してワンタップを統合する

Google One Tap は iframe(以下 中間 iframe など)が使用されます。ユーザーが認識できる 中間 iframe を使用した場合のワンタップ UX の変更

中間的な iframe ベースの統合には、ある程度の柔軟性とリスクが伴います。

  • ワンタップ用の埋め込み UX とその後の UX フロー

    ワンタップ UX が完了すると、後続の UX フローを 中間の iframe です。したがって、ワンタップとその後の UX の両方に埋め込みが可能 直接移動することもできます次の例をご覧ください。

    中間 iframe を使った埋め込み UX の例。

    中間 iframe を使用しない場合、通常はページ全体のナビゲーションが必要になります。 後続の UX フローが表示されるため、場合によっては煩わしくなる可能性があります。

  • 一度統合すれば、どこにでも表示できる

    すべてのワンタップ統合コード(One Tap API の呼び出しとその後の UX) 中間の iframe にカプセル化されます。コンテンツページでは ワンタップで画像を表示できます。必要なのは、 使用できます。

    このアーキテクチャでは懸念事項を分離できるため、 統合とメンテナンスのコストが削減されます。

  • ID トークンの公開スコープを制限します

    ID トークンは中間 iframe で直接使用されます。内容は次のとおりです。 コンテンツページには一切表示されませんこのアーキテクチャは ID トークンの露出範囲を減らす。

    中級者向けの iframe 方法は、 専用のログイン関連サブドメイン(例: login.example.com)と、 コンテンツ関連のサブドメイン(sports.example.com、games.example.com など)

  • ワンタップでドメインを表示

    Google の OAuth ポリシーで定められているように、OAuth を受け取るすべてのドメイン Google Cloud コンソールで事前登録する必要があります。普通 タップの統合。デベロッパーはワンタップですべてのドメインを事前登録する必要がある ID トークンがドメインに渡されるため、表示される場合があります。一部 ウェブサイトでは、ユーザーがサブドメインを動的に作成でき、 事前登録は不可能ですそのため、ワンタップを 自動的に作成されます。

    この問題は、中間 iframe を利用することで解決できます。この例では 中間 iframe のドメインのみを事前登録する必要があります。そこで、 コンテンツ ページのドメインを登録する必要はありません。ID トークンは 該当コンテンツページにのみアクセスできます

  • プライバシーのリスク

    デベロッパーは、中間 iframe が機能しないようにするため、対策を講じる必要があります。 想定外の結果に埋め込まれる場合ですたとえば、malad.com がユーザーの 中間 iframe を使用して、ワンタップ UX をウェブサイトに表示します。この エンドユーザーからプライバシーに関する多くの懸念が生じます

  • セキュリティ リスク

    上述の予期しないフレーム処理の問題が発生したため、 iframe では、セキュリティやプライバシーに関わる機密データを親に送信しないようにする必要がある ユーザーデータを ID トークン、セッション Cookie 値、ユーザーデータなどに保存して、 このルールに従うと、ウェブサイトが危険にさらされる可能性があります。

中間 iframe でワンタップをレンダリングする

中間 iframe 内にワンタップを表示するには、次のコードを配置します。 スニペットを中間 iframe の HTML コードに挿入します。

<div id="g_id_onload"
     data-client_id="YOUR_GOOGLE_CLIENT_ID"
     data-login_uri="https://your.domain/your_login_endpoint"
     data-allowed_parent_origin="https://example.com">
</div>

data-allowed_parent_origin 属性を使用すると、Google One Tap が実行されます。 中間の iframe モードで使用すると1 つのドメインまたはカンマ区切りの URL を設定できます ドメインリストを属性値として使用しています。ワイルドカード サブドメインもサポートされています。

(省略可)後続の UX を中間 iframe でレンダリングする

ログインのレスポンスでは、どのような HTML コードでも返すことができます。 エンドユーザーが目にするコンテンツです。たとえば、追加のプロフィール情報を要求したり、 または利用規約に同意します。ページを送信すると、以降のページを表示できます。 たとえば、支払いや定期購入などです。

中間 iframe のサイズを変更できます。

<script src="https://accounts.google.com/gsi/intermediatesupport"></script>
<script>
  google.accounts.id.intermediate.notifyParentResize(320);
</script>

まとめると、中間 iframe を使用すると、ログインまたは登録の UX フロー全体を実行できるので、 組み込み UX として実装できます。

ワンタップ UX の後の最初のページでは、notifyParentResize() を呼び出す必要があります。 メソッドを 2 回呼び出す必要があります。

  1. ワンタップ UX が完了すると、中間 iframe が非表示に設定されます。

  2. 要素の offsetHeight 属性値は、非表示の場合は 0 です。

最初の呼び出しで、iFrame の高さを 1 ピクセルにサイズ変更して、 表示されます。offsetHeight 属性値が使用可能になった後、次の処理を行うことができます。 適切な高さにサイズ変更します

次のサンプルコードは、親オリジンを検証し、 ワンタップ UX の後の UI 用中間 iframe

<script>
window.onload = () => {
  google.accounts.id.intermediate.verifyParentOrigin(
    ["https://example.com","https://example-com.cdn.ampproject.org"],
    () => {
      google.accounts.id.intermediate.notifyParentResize(1);
      window.setTimeout(() => {
        let h = document.getElementById('container').offsetHeight;
        google.accounts.id.intermediate.notifyParentResize(h);
      }, 200);
    },
    () => {
      document.getElementById('container').style.display = 'none';
      document.getElementById('warning').innerText = 'Warning: the page is displayed in an unexpected domain!';
    }
  );
};
</script>

UX の中間 iframe を削除完了

次の場合は、親コンテンツ ページに中間 iframe を削除するよう通知する必要があります。 UX フローは完了ですそのためには、次のコード スニペットを 入力します。

<script src="https://accounts.google.com/gsi/intermediatesupport"></script>
<script>
  google.accounts.id.intermediate.notifyParentDone();
</script>

UX フローがスキップされた場合は、notifyParentClose メソッドを呼び出す必要があります。 してください。

中間 iframe を HTML ページに埋め込む

Google One Tap を追加する HTML ページに次のコード スニペットを配置します 表示します。

<script src="https://accounts.google.com/gsi/intermediate"></script>
<div id="g_id_intermediate_iframe"
     data-src="https://example.com/onetap_iframe.html">
</div>

data-src 属性は中間 iframe の URI です。