Memulai Layanan game Play untuk C dan C++

Panduan ini menjelaskan cara menyiapkan project game C atau C++ native untuk menggunakan SDK Native Layanan game Play v2 dan mengintegrasikan Layanan login. Integrasi login diperlukan untuk mengintegrasikan fitur Layanan game Play lainnya ke dalam game Anda dan mengintegrasikan Layanan game Play ke server game backend.

Fitur yang didukung

SDK Native Layanan game Play v2 masih dalam versi beta dan hanya mendukung layanan Login. Produk ini belum mendukung fitur Layanan game Play lainnya.

Dokumentasi referensi API

File header untuk SDK berisi dokumentasi referensi untuk API. File header berada di folder include dalam file SDK, yang tersedia setelah Anda menyinkronkan project dengan repositori SDK.

Persyaratan

  • Project game yang menggunakan C atau C++ native sebagai bahasa pemrograman utama.

  • Project dan lingkungan pengembangan game Anda harus sudah menyiapkan sistem build Gradle.

Sebelum memulai

Anda harus menyiapkan Layanan game Play di Konsol Google Play.

Menyiapkan project game Anda

Selesaikan langkah-langkah berikut untuk menyiapkan project game Anda.

Mengupdate CMakeLists.txt

Di file CMakeLists.txt, tambahkan kode berikut:

  find_package(com.google.android.gms.games.v2.c REQUIRED CONFIG)

  // link games_static for -DANDROID_STL=c++_static or default
  // link games_shared for -DANDROID_STL=c++_shared
  target_link_libraries(
    app PUBLIC com.google.android.gms.games.v2.c::games_static)

Mengupdate build.gradle

Di file build.gradle tingkat aplikasi, lakukan hal berikut:

  • Pastikan fitur build prefab diaktifkan.

  • Tambahkan dependensi untuk SDK Native Layanan game Play v2:

    • com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1

Berikut contohnya:

  android {
    ...
    buildFeatures {
      prefab true
    }
    ...
  }
  dependencies {
    ...
    implementation "com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1"
  }

Mengupdate AndroidManifest.xml

  1. Di file AndroidManifest.xml, tentukan project ID Layanan game Play Anda. Anda dapat melakukannya dengan menambahkan baris berikut ke file:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. Buat resource string untuk project ID Anda. Hal ini memungkinkan game Anda mengakses ID pada waktu build. Untuk membuat resource, buat file project_root/app/src/main/res/values/games-ids.xml, lalu tambahkan hal berikut:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. Membangun dan menguji game Anda. Jika berhasil, saat diluncurkan, game Anda akan menampilkan perintah login atau banner login yang berhasil.

Mendapatkan ID pemain

Game Anda dapat mengakses informasi pemain untuk pemain yang login dengan mengambil ID pemainnya. Anda dapat mengambil ID pemain dengan memanggil fungsi GetPlayerID, yang ditunjukkan dalam contoh berikut.

#include <assert.h>
#include "gni/gni.h"
#include "gni/gni_task.h"
#include "pgs/pgs_play_games.h"
#include "pgs/pgs_players_client.h"

// A callback for a GniTask returned from PgsPlayersClient_getCurrentPlayerId.
void OnGetCurrentPlayerIdCompleteCallback(GniTask *task, void *user_data) {

   if (!GniTask_isSuccessful(task)) {
      const char *error_message = nullptr;
      GniTask_getErrorMessage(task, &error_message);

      // Log error message here.

      GniString_destroy(error_message);
      GniTask_destroy(task);
      return;
   }

   const char *result = nullptr;
   PgsPlayersClient_getCurrentPlayerId_getResult(task, &result);

   // Log player id here.

   GniString_destroy(result);
   GniTask_destroy(task);
}

// Gets the player ID.
void GetPlayerId(jobject main_activity) {
   static const PgsPlayersClient *players_client =
           PgsPlayGames_getPlayersClient(main_activity);

   GniTask *get_current_player_id_task =
           PgsPlayersClient_getCurrentPlayerId(players_client);
   assert(get_current_player_id_task != nullptr);
   GniTask_addOnCompleteCallback(get_current_player_id_task,
                                 OnGetCurrentPlayerIdCompleteCallback,
                                 nullptr);
}

// Entry point for our test app
void TestPGSNative(JNIEnv *env, jobject main_activity) {
   JavaVM *java_vm;
   env->GetJavaVM(&java_vm);

   GniCore_init(java_vm, main_activity);

   GetPlayerId(main_activity);
}

Meluncurkan ulang perintah login

Jika pemain menolak perintah login Layanan game Play awal yang otomatis ditampilkan saat game diluncurkan, pemain dapat berubah pikiran selama sesi game. Anda dapat meluncurkan kembali perintah login dengan memanggil PgsGamesSignInClient_signIn selama tidak ada pemain yang login.

Otorisasi server game

Setelah pemain berhasil login ke Layanan game Play, klien game Anda dapat meminta kode otorisasi server yang dapat digunakan server game backend untuk berkomunikasi secara aman dengan Layanan game Play. Hal ini memungkinkan server game Anda mengambil, mengupdate, dan menyimpan data untuk pemain yang login. Anda dapat mengambil kode otorisasi server dengan memanggil fungsi PgsGamesSignInClient_requestServerSideAccess.

Untuk mendapatkan informasi lebih lanjut, lihat panduan akses server.