Melakukan Autentikasi di Unity Menggunakan Layanan Google Play Game

Anda dapat menggunakan layanan game Google Play untuk memproses login pemain ke game Android yang dibuat di Firebase dan Unity. Untuk menggunakan fitur login layanan game Google Play dengan Firebase, pertama-tama proses login pemain dengan Google Play Game, dan minta kode auth OAuth 2.0 saat melakukannya. Lalu, teruskan kode auth ke PlayGamesAuthProvider untuk membuat kredensial Firebase yang bisa digunakan untuk mengautentikasi dengan Firebase.

Sebelum memulai

Menyiapkan project Unity Anda

  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 paket 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 kunci Anda dengan perintah keytool:

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

    Atau, Anda bisa mendapatkan hash SHA dari sertifikat penandatanganan dengan perintah signingReport gradle:

    gradlew signingReport

    APK Anda harus ditandatangani dengan kunci ini, termasuk selama pengembangan.

  3. Aktifkan Google Play Game sebagai penyedia login:

    1. Di Firebase console, buka bagian Authentication.

    2. Buat dan dapatkan client ID dan rahasia klien server web project Anda:

      1. Dalam tab Sign in method, aktifkan penyedia login Google.

      2. Salin client ID dan rahasia server web dari penyedia login Google.

    3. Dalam tab Sign in method, aktifkan penyedia login Play Game, lalu tentukan client ID dan rahasia klien server web project yang Anda dapatkan pada langkah terakhir.

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 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 ke tempat yang praktis. Anda memerlukan cuplikan tersebut untuk menyiapkan plugin layanan Google Play Game.

    Cuplikan 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 Penguji, 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

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

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

  3. Siapkan plugin Play Game:

    1. Klik Window > 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 client ID server web, yang Anda berikan saat mengaktifkan fitur login Play Game di Firebase console, ke kolom Client ID.
    4. Klik Setup.
  4. Di 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. Lalu, 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 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.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.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.

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

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
  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;
}

Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik 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.

Untuk memproses logout pengguna, panggil SignOut():

auth.SignOut();