Login untuk game Android

Untuk mengakses fungsi Layanan game Google Play, game Anda harus menyediakan akun pemain yang login. Dokumentasi ini menjelaskan cara menerapkan pengalaman login yang lancar di game Anda.

SDK Layanan game Play v2 menghadirkan sejumlah peningkatan yang meningkatkan jumlah pengguna yang login ke game Anda, dan mempermudah pengembangan:

  • Peningkatan untuk pengguna:
    • Setelah memilih akun default, pengguna akan login tanpa perlu berinteraksi dengan perintah.
    • Pengguna tidak perlu lagi mendownload Aplikasi Play Game untuk login dengan Layanan game Play atau membuat akun baru.
    • Pengguna kini dapat mengelola akun Layanan game Play untuk beberapa game dari satu halaman.
  • Peningkatan untuk developer:
    • Kode klien tidak lagi diperlukan untuk menangani alur login atau logout, karena proses login otomatis dipicu saat game dimulai, dan pengelolaan akun ditangani di setelan OS.

Integrasi klien baru

Bagian ini menunjukkan cara melakukan integrasi klien baru dengan Login Layanan game Play v2.

Menambahkan dependensi

Tambahkan dependensi SDK Layanan game Play ke file build.gradle level root aplikasi Anda. Jika menggunakan Gradle, Anda dapat menambahkan atau mengupdate dependensi sebagai berikut:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Menentukan project ID

Untuk menambahkan project ID SDK Layanan game Play ke aplikasi Anda, selesaikan langkah-langkah berikut:

  1. Di file AndroidManifest.xml aplikasi Anda, tambahkan elemen dan atribut <meta-data> berikut ke elemen <application>:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    Tentukan referensi resource String @string/game_services_project_id menggunakan project ID layanan Game milik game Anda sebagai nilai. Project ID layanan Game Anda dapat ditemukan pada bagian nama game di halaman Konfigurasi di Konsol Google Play.

  2. Dalam file res/values/strings.xml Anda, tambahkan referensi resource string dan tetapkan project ID sebagai nilai. Di Konsol Google Play, Anda dapat menemukan project ID dengan nama game Anda di halaman Konfigurasi. Contoh:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game’s project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

Menginisialisasi SDK

Lakukan inisialisasi SDK Play Game di callback onCreate(..) dari class Application Anda.

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Mendapatkan hasil login

Saat diluncurkan, game akan selalu mencoba membuat pengguna login. Untuk mengautentikasi pengguna, Anda harus memverifikasi bahwa pengguna berhasil login, lalu mendapatkan ID Pemainnya.

Untuk memverifikasi upaya login, panggil GamesSignInClient.isAuthenticated() dan gunakan addOnCompleteListener untuk mengambil hasilnya. Contoh:

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());

gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
  boolean isAuthenticated =
    (isAuthenticatedTask.isSuccessful() &&
     isAuthenticatedTask.getResult().isAuthenticated());

  if (isAuthenticated) {
    // Continue with Play Games Services
  } else {
    // Disable your integration with Play Games Services or show a
    // login button to ask  players to sign-in. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

Jika pengguna memilih untuk tidak login saat game diluncurkan, Anda dapat secara opsional memilih untuk terus menampilkan tombol dengan ikon Play Game, dan mencoba untuk membuat pengguna login lagi dengan memanggil GamesSignInClient.signIn() jika pengguna menekan tombol.

Setelah memverifikasi bahwa pengguna sudah login, Anda dapat mengambil ID Pemain untuk mengidentifikasi pengguna. Contoh:

PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
    // Get PlayerID with mTask.getResult().getPlayerId()
  }
);

Bermigrasi ke Login Layanan game Play v2

Bagian ini menjelaskan cara memigrasikan kode klien dari Layanan game Play v1 ke v2.

SDK yang baru berisi empat perubahan besar untuk meningkatkan keberhasilan login yang harus Anda ketahui:

  1. Login dipicu otomatis saat game diluncurkan. Daripada menggunakan GoogleSignInClient GoogleSignIn SDK untuk login, Anda dapat menggunakan GamesSignInClient.isAuthenticated() untuk mengambil hasil upaya login otomatis.
  2. Class Client Factory tidak perlu lagi meneruskan objek GoogleSignInAccount. Cakupan OAuth tambahan tidak dapat diminta (GAMES_LITE akan diminta secara otomatis).
  3. Token autentikasi sekarang disediakan menggunakan GamesSignInClient.requestServerSideAccess() dalam SDK Layanan game Play.
  4. Metode logout dihapus, dan kita tidak lagi memerlukan tombol dalam game untuk login atau logout dari Layanan game Play.

Selain itu, game Anda akan mengalami login tambahan karena login otomatis saat game diluncurkan. Akibatnya, Anda harus meninjau topik pengelolaan kuota untuk memastikan bahwa game Anda tidak melebihi kuota permintaan login.

Menargetkan repositori Maven SDK yang baru

Jika Anda menggunakan sistem build Gradle, hal ini dapat dilakukan dengan mengubah dependensi Anda ke artefak com.google.android.gms:play-services-games-v2:+ dalam file build.gradle modul Anda. Contoh:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Menginisialisasi SDK

Lakukan inisialisasi SDK Play Game di callback onCreate(..) dari class Application Anda. Contoh:

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Menghapus panggilan login dan logout

Jika Anda tidak menetapkan cakupan tambahan, migrasi kasus penggunaan seharusnya mudah dilakukan.

  1. Hapus panggilan login menggunakan GoogleSignIn API. Login akan selalu dilakukan saat game diluncurkan. Sebagai gantinya, proses hasil upaya login otomatis menggunakan GamesSignInClient.isAuthenticated().

    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
    
    gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
      boolean isAuthenticated =
        (isAuthenticatedTask.isSuccessful() &&
         isAuthenticatedTask.getResult().isAuthenticated());
    
      if (isAuthenticated) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a
        // login button to ask  players to sign-in. Clicking it should
        // call GamesSignInClient.signIn().
      }
    });
    
  2. Hapus semua panggilan untuk logout, karena pengelolaan akun kini dimuat dalam setelan aplikasi OS dan Play Game.

  3. Jika pemain berhasil login, hapus tombol login Play Game dari game Anda. Jika pengguna memilih untuk tidak login saat game diluncurkan, Anda dapat memilih secara opsional untuk terus menampilkan tombol dengan ikon Play Game, dan memicu proses login dengan GamesSignInClient.signIn().

  4. Setelah memverifikasi bahwa pengguna sudah login, Anda dapat mengambil ID Pemain untuk mengidentifikasi pengguna.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. Hapus dependensi Anda di GoogleSignIn API, jika tidak digunakan lagi.

Mengupdate nama class klien

Saat membuat klien (misalnya LeaderboardsClient atau AchievementsClient), gunakan PlayGames.getFooClient(), bukan Games.getFooClient().

Meminta akses sisi server

Saat meminta akses sisi server, gunakan GamesSignInClient.requestServerSideAccess(), bukan GoogleSignInAccount.getServerAuthCode().

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
  .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
                           /*forceRefreshToken=*/ false)
  .addOnCompleteListener( task -> {
    if (task.isSuccessful()) {
      String serverAuthToken = task.getResult();
      // Send authentication code to the backend game server to be
      // exchanged for an access token and used to verify the
      // player via the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

Menghapus cakupan tambahan

Dengan Layanan game Play v2, Anda tidak dapat meminta cakupan tambahan apa pun. Jika Anda masih perlu meminta cakupan tambahan, sebaiknya gunakan SDK Login dengan Google bersama dengan Layanan game Play.

Migrasi dari GoogleApiClient

Untuk integrasi lama, game Anda mungkin bergantung pada variasi GoogleApiClient API dari SDK Layanan game Play. Perangkat ini tidak digunakan lagi pada akhir 2017 dan digantikan oleh klien “tanpa koneksi”. Untuk bermigrasi, Anda dapat mengganti class GoogleApiClient dengan yang setara “tanpa koneksi”. Anda juga harus mengikuti panduan di atas untuk memigrasikan game dari v1 ke v2. Di bawah ini adalah pemetaan class umum:

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes