Menyiapkan C atau C++ Native v2

Dokumen ini membantu Anda menyiapkan project C++ untuk C atau C++ Native v2 dan memverifikasi layanan autentikasi.

Sebelum memulai

Anda harus menyiapkan Layanan game Play di Konsol Google Play.

Prasyarat aplikasi

Pastikan bahwa file build aplikasi Anda menggunakan nilai berikut:

  • minSdkVersion dari 19 atau yang lebih tinggi
  • compileSdkVersion dari 28 atau yang lebih tinggi

Menyiapkan project game Anda

Selesaikan langkah-langkah berikut untuk menyiapkan project game Anda.

Mengupdate build.gradle

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

  • Pastikan fitur build prefab diaktifkan.

  • Tambahkan dependensi untuk SDK Native v2 (beta):

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

Berikut contohnya:

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

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 AndroidManifest.xml

  1. Untuk menentukan project ID Layanan game Play di file AndroidManifest.xml Anda, tambahkan baris berikut:

    <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 diautentikasi dengan mengambil ID pemainnya. Anda dapat mengambil ID pemain dengan memanggil fungsi GetPlayerId, seperti 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 diautentikasi.

Otorisasi server game

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

Untuk mendapatkan informasi lebih lanjut, lihat panduan akses server.