サイトにワンタップ プロンプトを追加して、ユーザーがウェブアプリに登録またはログインできるようにします。HTML と JavaScript を使用してプロンプトをレンダリングし、カスタマイズします。
前提条件
設定の手順に沿って、OAuth 同意画面を構成し、クライアント ID を取得して、クライアント ライブラリを読み込みます。
ログインページに [Google でログイン] ボタンを追加します。
プロンプトのレンダリング
ワンタップを表示するページにコード スニペットを配置します。
HTML
ワンタップ プロンプトを表示し、JWT 認証情報をログイン エンドポイントに返します。
<div id="g_id_onload"
data-client_id="YOUR_GOOGLE_CLIENT_ID"
data-login_uri="https://your.domain/your_login_endpoint"
data-your_own_param_1_to_login="any_value"
data-your_own_param_2_to_login="any_value">
</div>
data-login_uri
属性は、ウェブアプリのログイン エンドポイントの URI です。カスタムデータ属性を追加すると、Google が発行した ID トークンとともにログイン エンドポイントに送信されます。
data-context
属性を使用して、プロンプトのタイトルに使用するテキストを変更します。たとえば、data-context: "signup"
は「ログイン」を「登録」に変更します。
サポートされている属性の一覧については、g_id_onload
リファレンスをご覧ください。
JavaScript
ワンタップ プロンプトを表示し、JWT 認証情報をブラウザの JavaScript コールバック ハンドラに返します。
<script>
window.onload = function () {
google.accounts.id.initialize({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
callback: 'YOUR_CALLBACK_HANDLER'
});
google.accounts.id.prompt();
}
</script>
JavaScript でワンタップ プロンプトを構成するには、まず initialize()
メソッドを呼び出す必要があります。次に、prompt()
メソッドを呼び出してプロンプト UI を表示します。
context
フィールドを使用して、プロンプトのタイトルに使用されるテキストを変更します。たとえば、context: 'signup'
は「ログイン」を「登録」に変更します。
データ オプションの詳細なリストについては、idConfiguration
リファレンスをご覧ください。
メッセージのステータス
JavaScript コールバック関数を使用して、プロンプトの UI ステータス通知をリッスンします。
通知は次のタイミングで送信されます。
表示モメント:
prompt()
メソッドが呼び出された後に発生します。通知には、UI が表示されるかどうかを示すブール値が含まれています。スキップされた瞬間: 自動キャンセルまたは手動キャンセルによってワンタップ プロンプトが閉じられた場合、または Google が認証情報を発行できなかった場合(選択したセッションで Google からログアウトした場合など)に発生します。
この場合は、次の ID プロバイダ(存在する場合)に進むことをおすすめします。
閉じた瞬間: Google が認証情報を正常に取得した場合、またはユーザーが認証情報の取得フローを停止した場合に発生します。たとえば、ユーザーがログイン ダイアログにユーザー名とパスワードの入力を開始したときに、
google.accounts.id.cancel()
メソッドを呼び出してワンタップ プロンプトを閉じ、閉じたモーメントをトリガーできます。
HTML
data-moment_callback
属性を使用して、JavaScript コールバック関数を指定します。通知を受け取るには、コールバック ハンドラが必要です。
<html>
<head>
<script>
function continueWithNextIdp(notification) {
if (notification.isNotDisplayed() || notification.isSkippedMoment()) {
// try Next provider if One Tap is not displayed or skipped
}
}
</script>
</head>
<body>
...
<div id="g_id_onload"
data-client_id="YOUR_GOOGLE_CLIENT_ID"
data-login_uri="https://your.domain/your_login_endpoint"
data-moment_callback="continueWithNextIdp"
</div>
...
</body>
</html>
ユーザーのログインや登録を容易にするために、複数の ID プロバイダと通信して、使用可能な認証情報を探すことができます。次の ID プロバイダを呼び出すために、プロンプトの UI ステータスを確認することもできます。
JavaScript
コールバック ハンドラをパラメータとして google.accounts.id.prompt
に渡します。ここでは、通知の更新を処理するために矢印関数を使用しています。
<script>
window.onload = function () {
google.accounts.id.initialize({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
callback: 'YOUR_CALLBACK_HANDLER'
});
google.accounts.id.prompt((notification) => {
if (notification.isNotDisplayed() || notification.isSkippedMoment()) {
// try next provider if OneTap is not displayed or skipped
}
});
}
</script>
ボタンとプロンプト
[Google でログイン] ボタンとワンタップ プロンプトが 1 つのページに一緒に表示される場合があります。
HTML
g_id_onload
要素と g_id_signin
要素の両方を含めて、[Google でログイン] ボタンとワンタップ プロンプトの両方を表示します。
<div id="g_id_onload"
data-client_id="YOUR_GOOGLE_CLIENT_ID"
data-context="signin"
data-ux_mode="redirect"
data-login_uri="https://your.domain/your_login_endpoint"
data-itp_support="true">
</div>
<div class="g_id_signin"
data-type="standard"
data-shape="rectangular"
data-theme="outline"
data-text="signin_with"
data-size="large"
data-logo_alignment="left">
</div>
JavaScript
renderButton()
関数と prompt()
関数の両方を同時に呼び出して、「Google でログイン」ボタンとワンタップ プロンプトを表示します。
<script>
window.onload = function () {
google.accounts.id.initialize({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
callback: 'YOUR_CALLBACK_HANDLER'
});
const parent = document.getElementById('google_btn');
google.accounts.id.renderButton(parent, {theme: "filled_blue"});
google.accounts.id.prompt();
}
</script>
ワンタップを覆わない
このセクションは、FedCM が無効な場合にのみ適用されます。FedCM が有効になっている場合、ブラウザはページ コンテンツの上にユーザー プロンプトを表示します。
エンドユーザーにすべての情報が表示されるためには、Google One Tap が他のコンテンツで覆われないようにする必要があります。そうしないと、ポップアップ ウィンドウがトリガーされることがあります。
ページ レイアウトと要素の z-index プロパティを再確認し、Google One Tap が他のコンテンツで覆われないようにしてください。境界の 1 つのピクセルだけが覆われていても、UX フロー変更がトリガーされることがあります。
認証情報のレスポンス
認証情報レスポンスには、Google 署名付き JWT が含まれています。レスポンスは、JavaScript コールバック関数を使用してブラウザに返すか、ログイン エンドポイントへのリダイレクトを通じてプラットフォームに返されます。
JS コールバック
HTML または JavaScript を使用してコールバックを構成します。
HTML
<div id="g_id_onload"
data-client_id="YOUR_GOOGLE_CLIENT_ID"
data-callback="YOUR_CALLBACK_HANDLER"
</div>
JavaScript
google.accounts.id.initialize({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
callback: 'YOUR_CALLBACK_HANDLER'
});
たとえば、handleCredentialResponse
は JWT をデコードし、ID トークンの一部のフィールドをコンソールに出力します。
<script>
google.accounts.id.initialize({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
callback: handleCredentialResponse
});
function handleCredentialResponse(response) {
const responsePayload = decodeJwtResponse(response.credential);
console.log("ID: " + responsePayload.sub);
console.log('Full Name: ' + responsePayload.name);
console.log('Given Name: ' + responsePayload.given_name);
console.log('Family Name: ' + responsePayload.family_name);
console.log("Image URL: " + responsePayload.picture);
console.log("Email: " + responsePayload.email);
}
function decodeJwtResponse(token) {
let base64Url = token.split('.')[1];
let base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
let jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
return JSON.parse(jsonPayload);
}
</script>
リダイレクト
認証情報をプラットフォームのログイン エンドポイントに戻すには、OAuth 2.0 ウェブ クライアントの [承認済みリダイレクト URI] 設定に URL を追加します。
HTML または JavaScript を使用してリダイレクト URI を構成します。
HTML
<div id="g_id_onload"
data-client_id="YOUR_GOOGLE_CLIENT_ID"
data-ux_mode="redirect"
data-login-uri="YOUR_LOGIN_URI"
</div>
JavaScript
google.accounts.id.initialize({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
ux_mode: 'redirect',
login_uri: 'YOUR_LOGIN_URI'
});