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 game Google Play dengan Firebase, buat pemain login dengan Google Play Game terlebih dahulu, lalu minta kode autentikasi OAuth 2.0. Selanjutnya, teruskan kode autentikasi ke PlayGamesAuthProvider untuk menghasilkan kredensial Firebase, yang bisa Anda gunakan untuk melakukan autentikasi dengan Firebase.

Sebelum memulai

Menyiapkan project Android Anda

  1. Tambahkan Firebase ke project Android jika Anda belum melakukannya.

  2. Dalam file Gradle modul (level aplikasi) (biasanya <project>/<app-module>/build.gradle.kts atau <project>/<app-module>/build.gradle), tambahkan dependensi untuk library Android Firebase Authentication. Sebaiknya gunakan Firebase Android BoM untuk mengontrol pembuatan versi library.

    Selain itu, sebagai bagian dari penyiapan Firebase Authentication, Anda perlu menambahkan SDK layanan Google Play ke aplikasi Anda.

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth-ktx")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:20.7.0")
    }

    Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perlu diperhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth-ktx:22.1.2")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:20.7.0")
    }

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:20.7.0")
    }

    Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perlu diperhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth:22.1.2")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:20.7.0")
    }

Menyiapkan project Firebase

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

    Anda bisa mendapatkan hash SHA sertifikat penandatanganan dengan perintah signingReport:

    ./gradlew signingReport

  2. Aktifkan Google Play Game sebagai penyedia login:

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

      Untuk menemukan nilai ini:

      1. Buka project Firebase Anda di halaman kredensial Google APIs console.
      2. Di bagian OAuth 2.0 Client IDs, buka halaman detail Web client (auto created by Google Service). Halaman ini mencantumkan client ID dan secret server web Anda.
    2. Selanjutnya, di Firebase console, buka bagian Authentication.

    3. Pada tab Sign in method, aktifkan penyedia login Play Game. Anda perlu menetapkan client ID dan rahasia klien server web project Anda, yang didapatkan dari konsol API.

Mengonfigurasi Layanan game Play dengan informasi aplikasi Firebase

  1. Di Konsol Google Play, buka aplikasi Google Play atau buat aplikasi.

  2. Di bagian Grow, klik Layanan game Play > Penyiapan & Pengelolaan > Konfigurasi.

  3. Klik Ya, game saya sudah menggunakan Google API, pilih project Firebase Anda dari daftar, lalu klik Use.

  4. Di halaman konfigurasi Layanan game Play, klik Tambahkan Kredensial.

    1. Pilih jenis Game server.
    2. Di kolom OAuth client, pilih client ID web project Anda. Pastikan ini adalah client ID yang sama dengan yang Anda tetapkan saat mengaktifkan login dengan Play Game.
    3. Simpan perubahan Anda.
  5. Masih di halaman konfigurasi Layanan game Play, klik Tambahkan Kredensial kembali.

    1. Pilih jenis Android.
    2. Di kolom OAuth client, pilih client ID Android project Anda. (Jika client ID Android tidak muncul, pastikan Anda menyetel sidik jari SHA-1 game di Firebase console.)
    3. Simpan perubahan Anda.
  6. Di halaman Testers, tambahkan alamat email pengguna yang harus login ke game Anda sebelum game tersebut dirilis di Play Store.

Mengintegrasikan fitur login dengan Play Game ke game Anda

Pertama-tama, integrasikan login dengan Play Game ke aplikasi Anda. Baca Login ke Game Android untuk mengetahui petunjuk lengkapnya.

Dalam integrasi Anda, ketika mem-build objek GoogleSignInOptions, gunakan konfigurasi DEFAULT_GAMES_SIGN_IN dan panggil requestServerAuthCode:

Kotlin+KTX

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

Java

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

Anda harus meneruskan client ID server web Anda ke metode requestServerAuthCode. Ini adalah ID yang Anda berikan saat mengaktifkan login dengan Play Game di Firebase console.

Melakukan Autentikasi dengan Firebase

Setelah menambahkan login dengan 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, dalam metode onCreate aktivitas login, dapatkan instance bersama objek FirebaseAuth:

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth

Java

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

Kotlin+KTX

override fun onStart() {
    super.onStart()
    // Check if user is signed in (non-null) and update UI accordingly.
    val currentUser = auth.currentUser
    updateUI(currentUser)
}

Java

@Override
public void onStart() {
    super.onStart();
    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    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 login dengan Play Game baik secara otomatis maupun interaktif, dapatkan kode autentikasi dari objek GoogleSignInAccount, tukarkan dengan kredensial Firebase, lalu lakukan autentikasi dengan Firebase menggunakan kredensial tersebut:

Kotlin+KTX

// 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 = Firebase.auth
    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)
            }

            // ...
        }
}

Java

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

                    // ...
                }
            });
}

Jika panggilan ke 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.

Di game, Anda bisa mendapatkan UID Firebase pengguna dari objek FirebaseUser:

Kotlin+KTX

val user = auth.currentUser
user?.let {
    val playerName = it.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 = it.uid
}

Java

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();

Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna 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 game Play, gunakan API yang diberikan oleh Google Play Game SDK.

Untuk memproses logout pengguna, panggil FirebaseAuth.signOut():

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();