Setelah penghentian penggunaan API Login dengan Google, kami akan menghapus SDK game v1 pada tahun 2026. Setelah Februari 2025, Anda tidak akan dapat memublikasikan
judul yang baru diintegrasikan dengan SDK game v1, di Google Play. Sebaiknya gunakan SDK game v2.
Meskipun game lama dengan integrasi game v1 sebelumnya akan terus berfungsi selama
beberapa tahun, sebaiknya Anda
bermigrasi ke v2
mulai Juni 2025.
Panduan ini ditujukan untuk penggunaan SDK Layanan game Play v1. Untuk mengetahui informasi
tentang versi SDK terbaru, lihat
dokumentasi v2.
Untuk mengakses fungsi Layanan game Google Play, game Anda harus menyediakan akun pemain yang login. Jika pemain tidak diautentikasi, game Anda mungkin mengalami error saat melakukan panggilan ke API Layanan game Google Play. Dokumentasi ini menjelaskan cara menerapkan pengalaman login yang lancar di game Anda.
Menerapkan login pemain
Class GoogleSignInClient
adalah titik entri utama untuk mengambil akun pemain yang saat ini
login, dan untuk login pemain jika mereka belum melakukannya sebelumnya di aplikasi Anda di
perangkat.
Untuk membuat klien login, ikuti langkah-langkah berikut:
Buat klien login melalui objek
GoogleSignInOptions
, seperti yang ditunjukkan dalam cuplikan kode berikut. DiGoogleSignInOptions.Builder
untuk mengonfigurasi login, Anda harus menentukanGoogleSignInOptions.DEFAULT_GAMES_SIGN_IN
.GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
Jika Anda ingin menggunakan
SnapshotsClient
, tambahkan.requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)
keGoogleSignInOptions.Builder
seperti yang ditunjukkan dalam cuplikan kode berikut:GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS) .build();
Panggil metode
GoogleSignIn.getClient()
dan teruskan opsi yang Anda konfigurasi pada langkah sebelumnya. Jika panggilan berhasil, Google Sign-In API akan menampilkan instanceGoogleSignInClient
.
Memeriksa apakah pemain sudah login
Anda dapat memeriksa apakah akun sudah login
di perangkat saat ini menggunakan GoogleSignIn.getLastSignedInAccount()
dan apakah akun ini sudah memiliki izin yang diperlukan menggunakan
GoogleSignIn.hasPermissions()
.
Jika kedua kondisi benar—yaitu, getLastSignedInAccount()
menampilkan nilai
non-null dan hasPermissions()
menampilkan true
—Anda dapat menggunakan
akun yang ditampilkan dari getLastSignedInAccount()
dengan aman, meskipun perangkat sedang
offline.
Melakukan login otomatis
Anda dapat memanggil silentSignIn()
untuk mengambil akun pemain yang saat ini login,
dan mencoba membuat pemain login tanpa menampilkan antarmuka pengguna jika mereka telah
berhasil login ke aplikasi Anda di perangkat lain.
Metode silentSignIn()
menampilkan Task<GoogleSignInAccount>
. Setelah tugas selesai,
Anda menetapkan kolom GoogleSignInAccount
yang Anda deklarasikan sebelumnya ke akun login yang ditampilkan tugas
sebagai hasil, atau ke null
, yang menunjukkan bahwa tidak ada pengguna yang login.
Jika upaya login otomatis gagal, Anda dapat secara opsional mengirimkan maksud login untuk menampilkan antarmuka pengguna login, seperti yang dijelaskan dalam Melakukan login interaktif.
Karena status pemain yang login dapat berubah saat aktivitas tidak berada di latar depan, sebaiknya panggil silentSignIn()
dari metode
onResume()
aktivitas.
Untuk melakukan login secara diam-diam, ikuti langkah-langkah berikut:
- Panggil metode
silentSignIn()
diGoogleSignInClient
untuk memulai alur login senyap. Panggilan ini menampilkan objekTask<GoogleSignInAccount>
yang berisiGoogleSignInAccount
jika login diam berhasil. - Tangani keberhasilan atau kegagalan login pemain dengan mengganti
OnCompleteListener
.- Jika tugas login berhasil, dapatkan objek
GoogleSignInAccount
dengan memanggilgetResult()
. - Jika login tidak berhasil, Anda dapat mengirimkan intent login untuk meluncurkan alur login interaktif.
Untuk mengetahui daftar pemroses panggilan balik tambahan yang dapat Anda gunakan, lihat
Panduan developer Tasks API
dan referensi API
Task
.
- Jika tugas login berhasil, dapatkan objek
Cuplikan kode berikut menunjukkan cara aplikasi Anda melakukan login senyap:
private void signInSilently() { GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN; GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); if (GoogleSignIn.hasPermissions(account, signInOptions.getScopeArray())) { // Already signed in. // The signed in account is stored in the 'account' variable. GoogleSignInAccount signedInAccount = account; } else { // Haven't been signed-in before. Try the silent sign-in first. GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOptions); signInClient .silentSignIn() .addOnCompleteListener( this, new OnCompleteListener<GoogleSignInAccount>() { @Override public void onComplete(@NonNull Task<GoogleSignInAccount> task) { if (task.isSuccessful()) { // The signed in account is stored in the task's result. GoogleSignInAccount signedInAccount = task.getResult(); } else { // Player will need to sign-in explicitly using via UI. // See [sign-in best practices](http://developers.google.com/games/services/checklist) for guidance on how and when to implement Interactive Sign-in, // and [Performing Interactive Sign-in](http://developers.google.com/games/services/android/signin#performing_interactive_sign-in) for details on how to implement // Interactive Sign-in. } } }); } } @Override protected void onResume() { super.onResume(); signInSilently(); }
Jika upaya login senyap gagal, Anda dapat memanggil
getException()
untuk
mendapatkan ApiException
dengan kode status yang mendetail. Kode status CommonStatusCodes.SIGN_IN_REQUIRED
menunjukkan bahwa pemutar perlu melakukan tindakan eksplisit untuk login. Dalam hal ini, aplikasi Anda harus
meluncurkan alur login interaktif seperti yang dijelaskan di bagian berikutnya.
Melakukan login interaktif
Untuk login dengan interaksi pemain, aplikasi Anda perlu meluncurkan intent login. Jika berhasil,
Google Sign-In API akan menampilkan antarmuka pengguna yang meminta pemain memasukkan kredensialnya
untuk login. Pendekatan ini menyederhanakan pengembangan aplikasi Anda, karena aktivitas login menangani
skenario seperti perlu mengupdate layanan Google Play atau menampilkan dialog izin, atas nama
aplikasi Anda. Hasilnya ditampilkan melalui
callback
onActivityResult
.
Untuk melakukan login secara interaktif, ikuti langkah-langkah berikut:
Panggil
getSigninIntent()
diGoogleSignInClient
untuk mendapatkan maksud login, lalu panggilstartActivity()
dan teruskan maksud tersebut. Cuplikan kode berikut menunjukkan cara aplikasi Anda dapat meluncurkan alur login interaktif:private void startSignInIntent() { GoogleSignInClient signInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN); Intent intent = signInClient.getSignInIntent(); startActivityForResult(intent, RC_SIGN_IN); }
Dalam callback
onActivityResult()
, tangani hasil dari intent yang ditampilkan.- Jika hasil login berhasil, dapatkan objek
GoogleSignInAccount
dariGoogleSignInResult
. - Jika hasil login tidak berhasil, Anda harus menangani error login (misalnya, dengan menampilkan pesan error dalam pemberitahuan). Cuplikan kode berikut menunjukkan cara aplikasi Anda menangani hasil login pemain:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { // The signed in account is stored in the result. GoogleSignInAccount signedInAccount = result.getSignInAccount(); } else { String message = result.getStatus().getStatusMessage(); if (message == null || message.isEmpty()) { message = getString(R.string.signin_other_error); } new AlertDialog.Builder(this).setMessage(message) .setNeutralButton(android.R.string.ok, null).show(); } } }
- Jika hasil login berhasil, dapatkan objek
Mengambil informasi pemain
GoogleSignInAccount
yang ditampilkan Google Sign-In API tidak berisi informasi
pemain. Jika game Anda menggunakan informasi pemain, seperti nama tampilan pemain dan ID pemain,
Anda dapat mengikuti langkah-langkah berikut untuk mengambil informasi ini.
- Dapatkan objek
PlayersClient
dengan memanggil metodegetPlayersClient()
, dan teruskanGoogleSignInAccount
sebagai parameter. - Gunakan metode
PlayersClient
untuk memuat objekPlayer
yang berisi informasi pemain secara asinkron. Misalnya, Anda dapat memanggilgetCurrentPlayer()
untuk memuat pemain yang login saat ini. Jika tugas menampilkanApiException
dengan kode statusSIGN_IN_REQUIRED
, hal ini menunjukkan bahwa pemain perlu diautentikasi ulang. Untuk melakukannya, panggilGoogleSignInClient.getSignInIntent()
untuk membuat pemain login secara interaktif. - Jika tugas berhasil menampilkan objek
Player
, Anda kemudian dapat memanggil metode objekPlayer
untuk mengambil detail pemain tertentu (misalnya,getDisplayName()
ataugetPlayerId()
.
Menyediakan tombol login
Untuk menyediakan tombol login dengan Google standar di game Anda, Anda dapat menggunakan salah satu pendekatan berikut:
- Sertakan
com.google.android.gms.common.SignInButton
pada tata letak aktivitas utama; atau - Desain tombol login kustom sesuai dengan pedoman branding Login dengan Google.
Saat pengguna mengklik tombol login, game Anda harus memulai alur login dengan mengirimkan intent login, seperti yang dijelaskan dalam Melakukan login interaktif.
Cuplikan kode ini menunjukkan cara menambahkan tombol login di metode onCreate()
untuk aktivitas Anda.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_in); findViewById(R.id.sign_in_button).setOnClickListener(this); findViewById(R.id.sign_out_button).setOnClickListener(this); }
Cuplikan kode berikut menunjukkan cara Anda dapat mengirim intent login saat pengguna mengklik tombol login.
@Override public void onClick(View view) { if (view.getId() == R.id.sign_in_button) { // start the asynchronous sign in flow startSignInIntent(); } else if (view.getId() == R.id.sign_out_button) { // sign out. signOut(); // show sign-in button, hide the sign-out button findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); findViewById(R.id.sign_out_button).setVisibility(View.GONE); } }
Menampilkan pop-up game
Anda dapat menampilkan tampilan pop-up di game menggunakan class GamesClient
. Misalnya, game Anda
dapat menampilkan pop-up “Selamat datang kembali” atau “Pencapaian dibuka”. Untuk mengizinkan Layanan game Google Play
meluncurkan pop-up dalam tampilan di game Anda, panggil metode
setViewForPopups()
. Anda dapat menyesuaikan lebih lanjut tempat pop-up muncul di layar dengan memanggil
setGravityForPopups()
.
Membuat pemain logout
Logout dilakukan dengan memanggil metode signOut()
di GoogleSignInClient
.
private void signOut() { GoogleSignInClient signInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN); signInClient.signOut().addOnCompleteListener(this, new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // at this point, the user is signed out. } }); }