Menampilkan Google One Ketuk

Tambahkan perintah Sekali Ketuk ke situs Anda agar pengguna dapat mendaftar atau login ke aplikasi web Anda. Gunakan HTML dan JavaScript untuk merender dan menyesuaikan perintah.

Prasyarat

Ikuti langkah-langkah yang dijelaskan di bagian Penyiapan untuk mengonfigurasi Layar Izin OAuth, mendapatkan client ID, dan memuat library klien.

Tambahkan tombol Login dengan Google ke halaman login Anda.

Rendering perintah

Tempatkan cuplikan kode ke halaman mana pun tempat Anda ingin One Tap ditampilkan.

HTML

Tampilkan perintah Sekali Ketuk, yang menampilkan kredensial JWT ke endpoint login.

<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>

Atribut data-login_uri adalah URI endpoint login aplikasi web Anda. Anda dapat menambahkan atribut data kustom, yang dikirim ke endpoint login bersama dengan token ID yang diterbitkan oleh Google.

Gunakan atribut data-context untuk mengubah teks yang digunakan dalam judul perintah. Misalnya, data-context: "signup" mengubah "Login ke" menjadi "Daftar ke".

Untuk mengetahui daftar lengkap atribut yang didukung, lihat referensi g_id_onload.

JavaScript

Tampilkan perintah Sekali Ketuk, yang menampilkan kredensial JWT ke pengendali callback JavaScript browser.

<script>
  window.onload = function () {
    google.accounts.id.initialize({
      client_id: 'YOUR_GOOGLE_CLIENT_ID',
      callback: 'YOUR_CALLBACK_HANDLER'
    });
    google.accounts.id.prompt();
  }
</script>

Untuk mengonfigurasi perintah Sekali Ketuk di JavaScript, Anda harus memanggil metode initialize() terlebih dahulu. Kemudian, panggil metode prompt() untuk menampilkan UI prompt.

Gunakan kolom context untuk mengubah teks yang digunakan dalam judul perintah. Misalnya, context: 'signup' mengubah "Login ke" menjadi "Daftar ke".

Untuk mengetahui daftar lengkap opsi data, lihat referensi idConfiguration.

Status perintah

Gunakan fungsi callback JavaScript untuk memproses notifikasi status UI prompt.

Notifikasi dikirim untuk momen berikut:

  • Momen tampilan: Ini terjadi setelah metode prompt() dipanggil. Notifikasi ini berisi nilai boolean untuk menunjukkan apakah UI ditampilkan atau tidak.

  • Momen yang dilewati: Hal ini terjadi saat perintah Sekali Ketuk ditutup oleh pembatalan otomatis, pembatalan manual, atau saat Google gagal mengeluarkan kredensial, seperti saat sesi yang dipilih logout dari Google.

    Dalam hal ini, sebaiknya lanjutkan ke penyedia identitas berikutnya, jika ada.

  • Momen ditutup: Hal ini terjadi saat Google berhasil mengambil kredensial, atau pengguna ingin menghentikan alur pengambilan kredensial. Misalnya, saat pengguna mulai memasukkan nama pengguna dan sandi ke dalam dialog login, Anda dapat memanggil metode google.accounts.id.cancel() untuk menutup perintah Sekali Ketuk dan memicu momen yang ditutup.

HTML

Gunakan atribut data-moment_callback untuk menentukan fungsi callback JavaScript. Pengendali callback diperlukan untuk menerima notifikasi.

<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>

Untuk memfasilitasi pengguna login atau mendaftar, Anda dapat berkomunikasi dengan beberapa penyedia identitas untuk menemukan kredensial yang tersedia. Sebaiknya Anda mengetahui status UI perintah kami agar dapat memanggil penyedia identitas berikutnya.

JavaScript

Teruskan pengendali callback Anda sebagai parameter ke google.accounts.id.prompt, di sini fungsi panah digunakan untuk menangani pembaruan notifikasi.

<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>

Tombol dan perintah

Tombol Login dengan Google dan perintah Sekali Ketuk dapat ditampilkan bersama di satu halaman.

HTML

Tampilkan tombol Login dengan Google dan perintah Sekali Ketuk dengan menyertakan elemen g_id_onload dan g_id_signin.

<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

Tampilkan tombol Login dengan Google dan perintah Sekali Ketuk dengan memanggil fungsi renderButton() dan prompt() secara bersamaan.

<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>

Jangan menutupi Sekali Ketuk

Bagian ini hanya berlaku jika FedCM dinonaktifkan. Jika FedCM diaktifkan, browser akan menampilkan perintah pengguna di atas konten halaman.

Untuk memastikan pengguna akhir melihat semua informasi yang ditampilkan, Google One Tap tidak boleh tertutupi oleh konten lain. Jika tidak, jendela pop-up mungkin dipicu dalam beberapa kasus.

Periksa kembali tata letak halaman dan properti z-index elemen, untuk memastikan Google One Tap tidak tertutup oleh konten lain kapan saja. Perubahan alur UX dapat dipicu meskipun hanya satu piksel di batas yang tercakup.

Respons kredensial

JWT yang ditandatangani Google disertakan dalam respons kredensial. Respons ditampilkan ke browser menggunakan fungsi callback JavaScript atau ke platform Anda melalui pengalihan ke endpoint login.

Callback JS

Gunakan HTML atau JavaScript untuk mengonfigurasi callback.

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'
});

Sebagai contoh, handleCredentialResponse mendekode JWT dan mencetak beberapa kolom token ID ke konsol.

<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>

Pengalihan

Untuk menampilkan kredensial ke endpoint login platform Anda, tambahkan URL ke setelan Authorized redirect URI klien web OAuth 2.0 Anda.

Gunakan HTML atau JavaScript untuk mengonfigurasi URI pengalihan.

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'
});