Buka konsol

Melakukan Autentikasi Menggunakan Layanan Google Play Game di Android

Anda dapat menggunakan layanan Google Play Game untuk menyediakan fitur login bagi pemain untuk masuk ke game Android yang dibangun di Firebase. Untuk menggunakan fitur login layanan Google Play Game dengan Firebase, pemain harus login terlebih dahulu dengan Google Play Game dan meminta kode autentikasi OAuth 2.0. Kemudian, teruskan kode autentikasi ke PlayGamesAuthProvider untuk membuat kredensial Firebase yang dapat Anda gunakan untuk melakukan autentikasi dengan Firebase.

Sebelum memulai

Menyiapkan project Android Studio Anda

  1. Tambahkan Firebase ke project Android.
  2. Tambahkan dependensi untuk layanan Firebase Authentication dan Google Play ke file build.gradle tingkat aplikasi Anda:
    implementation 'com.google.firebase:firebase-auth:16.1.0'
    implementation 'com.google.android.gms:play-services-auth:16.0.1'
    

Menyiapkan project Firebase Anda

  1. Tetapkan sidik jari SHA-1 game Anda dari halaman Setelan di Firebase console.

    Anda bisa mendapatkan sidik jari SHA-1 kunci Anda dengan perintah keytool:

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

  2. Aktifkan Google Play Game sebagai penyedia login:

    1. Temukan ID klien dan rahasia klien server web project Anda. ID klien server web mengidentifikasi project Firebase Anda ke server autentikasi Google Play.

      Untuk menemukan nilai ini:

      1. Buka project Firebase Anda di halaman kredensial konsol Google API.
      2. Di bagian ID klien OAuth 2.0, buka halaman detail Klien web (dibuat secara otomatis oleh Layanan Google). Halaman ini mencantumkan ID dan rahasia klien server web Anda.
    2. Kemudian, di Firebase console, buka bagian Authentication.

    3. Pada tab Metode login, aktifkan penyedia login Play Game. Anda perlu menetapkan ID klien dan rahasia klien server web project Anda, yang Anda dapatkan dari konsol API.

  1. Buka konsol Google Play lalu klik Layanan game.
  2. Klik Tambahkan game baru. Pada dialog game baru, klik Saya sudah menggunakan Google API di game saya, lalu klik nama project Firebase Anda pada daftar. Pilih kategori game, lalu klik Lanjutkan untuk membuka halaman Detail Game.
  3. Di akhir halaman Detail Game, pastikan semua API yang diperlukan sudah diaktifkan.
  4. Selanjutnya, buka halaman Aplikasi yang ditautkan dan klik Android. Tentukan nama package game Anda, dan klik Simpan dan lanjutkan. Konsol akan menampilkan ID klien Android Anda. Anda dapat mengabaikan nilai ini.
  5. Di halaman Pengujian, beri akses kepada alamat email pengguna yang perlu login ke game Anda sebelum dirilis di Play Store.

Integrasikan fitur login Play Game ke game Anda

Pertama, integrasikan fitur login Play Game ke aplikasi Anda. Lihat Login ke Game Android untuk petunjuk selengkapnya.

Dalam integrasi Anda, ketika Anda membuat objek GoogleSignInOptions, gunakan konfigurasi DEFAULT_GAMES_SIGN_IN dan panggil requestServerAuthCode:

Java
Android

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build();

Kotlin
Android

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build()

Anda harus meneruskan ID klien server web Anda ke metode requestServerAuthCode. Ini adalah ID yang Anda berikan saat mengaktifkan fitur login Play Game di Firebase Console.

Autentikasi dengan Firebase

Setelah menambahkan login Play Game ke aplikasi Anda, siapkan Firebase untuk menggunakan kredensial akun Google yang Anda dapatkan saat pemain berhasil login dengan Play Game.

  1. Pertama-tama, di metode onCreate aktivitas login Anda, dapatkan instace bersama dari objek FirebaseAuth:

Java
Android

private FirebaseAuth mAuth;// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();

Kotlin
Android

private lateinit var auth: FirebaseAuth// ...
// Initialize Firebase Auth
auth = FirebaseAuth.getInstance()
  1. Saat menginisialisasi Aktivitas Anda, periksa apakah pemain sudah login dengan Firebase atau belum:

Java
Android

@Override
public void onStart() {
    super.onStart();
    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    updateUI(currentUser);
}

Kotlin
Android

public override fun onStart() {
    super.onStart()
    // Check if user is signed in (non-null) and update UI accordingly.
    val currentUser = auth.currentUser
    updateUI(currentUser)
}
If the player isn't signed in, present the player with your game's
signed-out experience, including the option to sign in.
  1. Setelah pemain berhasil login dengan Play Game, baik secara diam-diam maupun interaktif, dapatkan kode autentikasi dari objek GoogleSignInAccount, tukarkan dengan kredensial Firebase, lalu lakukan autentikasi dengan Firebase menggunakan kredensial Firebase:

Java
Android

// Call this both in the silent sign-in task's OnCompleteListener and in the
// Activity's onActivityResult handler.
private void firebaseAuthWithPlayGames(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.getId());

    final FirebaseAuth auth = FirebaseAuth.getInstance();
    AuthCredential credential = PlayGamesAuthProvider.getCredential(acct.getServerAuthCode());
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = auth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(MainActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }

                    // ...
                }
            });
}

Kotlin
Android

// Call this both in the silent sign-in task's OnCompleteListener and in the
// Activity's onActivityResult handler.
private fun firebaseAuthWithPlayGames(acct: GoogleSignInAccount) {
    Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.id!!)

    val auth = FirebaseAuth.getInstance()
    val credential = PlayGamesAuthProvider.getCredential(acct.serverAuthCode!!)
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCredential:success")
                    val user = auth.currentUser
                    updateUI(user)
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInWithCredential:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }

                // ...
            }
}

Jika pemanggilan signInWithCredential berhasil, Anda dapat menggunakan metode getCurrentUser untuk mendapatkan data akun pengguna.

Langkah berikutnya

Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan terhubung ke ID Play Game miliknya. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project Anda.

Dalam game Anda, UID Firebase pengguna dapat diperoleh dari objek FirebaseUser:

Java
Android

FirebaseUser user = mAuth.getCurrentUser();
String playerName = user.getDisplayName();

// The user's Id, unique to the Firebase project.
// Do NOT use this value to authenticate with your backend server, if you
// have one; use FirebaseUser.getIdToken() instead.
String uid = user.getUid();

Kotlin
Android

val user = auth.currentUser
user?.let {
    val playerName = user.displayName

    // The user's Id, unique to the Firebase project.
    // Do NOT use this value to authenticate with your backend server, if you
    // have one; use FirebaseUser.getIdToken() instead.
    val uid = user.uid
}

Dalam Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID unik milik pengguna yang login dari variabel auth, dan menggunakannya untuk mengontrol data yang dapat diakses pengguna.

Untuk mendapatkan informasi pemain Play Game milik pengguna atau untuk mengakses layanan Play Game, gunakan API yang diberikan oleh Google Play Game SDK.

Agar pengguna logout, panggil FirebaseAuth.signOut():

Java
Android

FirebaseAuth.getInstance().signOut();

Kotlin
Android

FirebaseAuth.getInstance().signOut()