Buka konsol

Melakukan Autentikasi di Unity Menggunakan Layanan Google Play Game

Anda dapat menggunakan layanan Google Play Game untuk menyediakan fitur login bagi pemain untuk masuk ke game Android yang dibangun di Firebase dan Unity. 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 Unity

  1. Tambahkan file konfigurasi Firebase dan Firebase Unity SDK ke project Unity Anda, seperti yang dijelaskan dalam Menambahkan Firebase ke project Unity. Ikuti petunjuknya untuk Android.

    Pastikan untuk mengimpor FirebaseAuth.unitypackage.

  2. Di Unity Editor, di bagian Build Settings > Player Settings > Other Settings tetapkan nama package Android untuk game Anda.

  3. Lalu, di bagian Build Settings > Player Settings > Publishing Settings, pilih atau buat keystore dan kunci yang akan digunakan untuk menandatangani package Android Anda. APK Anda harus ditandatangani agar login ke Play Game dapat berfungsi. Persyaratan ini tidak hanya berlaku untuk publikasi, tetapi juga selama pengembangan game.

Menyiapkan project Firebase Anda

  1. Di Firebase console, buka project Firebase, tempat Anda mendaftarkan proyek Unity Anda.

  2. Tetapkan sidik jari SHA-1 game Anda dari halaman Setelan Firebase console, menggunakan kunci yang ditetapkan di Unity.

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

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
    APK Anda harus ditandatangani dengan kunci ini, termasuk selama pengembangan.

  3. 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. Buka lagi halaman Aplikasi yang ditautkan, dan klik Tautkan aplikasi lain > Web. Anda akan menggunakan halaman ini untuk mengizinkan Firebase Auth mengambil token autentikasi dari Google Play.

    Di kolom URL Peluncuran, tentukan semua URL yang Anda kontrol, seperti URL yang menggunakan domain firebaseapp.com: https://myfirebaseproject-1ac49.firebaseapp.com/. URL ini tidak harus valid, tetapi Anda harus menetapkan nilai selain localhost.

    Kemudian, di halaman berikutnya, klik Tampilkan aplikasi dan pilih, lalu pilih ID klien server web Anda. ID klien server web akan memiliki URI pengalihan dengan format seperti https://myfirebaseproject-1ac49.firebaseapp.com/__/auth/handler.

  6. Di halaman Peristiwa, Pencapaian, dan Papan Peringkat, buatlah resource Play Game yang ingin digunakan dengan game (jika tidak ingin segera menggunakannya, Anda dapat membuat entri placeholder). Lalu, di salah satu halaman Peristiwa, Pencapaian, atau Papan Peringkat, klik Dapatkan resource dan salin cuplikan resource Android di tempat yang praktis. Anda memerlukan cuplikan tersebut untuk menyiapkan plugin Layanan Google Play Game.

    Cuplikasi resource terlihat seperti contoh berikut:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. Di halaman Pengujian, berikan akses ke alamat email pengguna yang perlu login ke game Anda sebelum dirilis di Play Store.

Mengintegrasikan fitur login Play Game ke dalam game Anda

  1. Download rilis terbaru plugin Play Game untuk Unity dan ekstrak.

  2. Impor package Unity plugin ke dalam project Unity Anda. Anda dapat menemukan package Unity di direktori current-build pada arsip rilis.

  3. Siapkan plugin Play Game:

    1. Klik Jendela > Google Play Game > Penyiapan > Penyiapan Android untuk membuka layar Konfigurasi Android.
    2. Tempel cuplikan resource Android yang didapatkan dari konsol Play ke kolom Definisi Resource.
    3. Tempel ID klien server web yang Anda berikan saat mengaktifkan fitur login Play Game di Firebase console, ke kolom ID Klien.
    4. Klik Penyiapan.
  4. Dalam game Anda, konfigurasikan klien Play Game dengan setelan RequestServerAuthCode diaktifkan:

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. Kemudian, saat pemain memilih untuk login dengan Play Game, panggil Social.localUser.Authenticate():

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

Melakukan autentikasi dengan Firebase

Setelah Anda menambahkan fitur login Play Game ke game, Anda dapat menggunakan kode autentikasi dari layanan Play Game untuk melakukan autentikasi dengan Firebase.

  1. Setelah pemain berhasil login dengan menggunakan Play Game, di penangan kelanjutan login, dapatkan kode autentikasi untuk akun pemain:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Kemudian, tukarkan kode autentikasi dari layanan Play Game untuk mendapatkan kredensial Firebase, dan gunakan kredensial Firebase tersebut untuk mengautentikasi pemain:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

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 Firebase.Auth.FirebaseUser:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  string 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 User.TokenAsync() instead.
  string uid = user.UserId;
}

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 melalui plugin Play Game.

Agar pengguna logout, panggil SignOut():

auth.SignOut();