C ve C++ için Play Games Hizmetleri'ni kullanmaya başlama

Bu rehberde, Play Games Hizmetleri v2 Yerel SDK'yı kullanmak için yerel bir C veya C++ oyun projesinin nasıl oluşturulacağı ve Oturum açma hizmetinin nasıl entegre edileceği açıklanmaktadır. Diğer Play Games Hizmetleri özelliklerini oyununuza entegre etmek ve Play Games Hizmetleri'ni arka uç oyun sunucunuza entegre etmek için oturum açma entegrasyonu gereklidir.

Desteklenen özellikler

Play Games Hizmetleri v2 Yerel SDK beta sürümündedir ve yalnızca Oturum açma hizmetini destekler. Diğer Play Oyun Hizmetleri özellikleri henüz desteklenmemektedir.

API referans dokümanları

SDK'nın başlık dosyaları, API'lerle ilgili referans dokümanları içerir. Başlık dosyaları, SDK deposundaki include klasöründe bulunur ve projeniz, SDK deposuyla senkronize edildikten sonra kullanılabilir.

Şartlar

  • Birincil programlama dili olarak yerel C veya C++ kullanan bir oyun projesi.

  • Oyun projenizde ve geliştirme ortamınızda Gradle derleme sistemi bulunmalıdır.

Başlamadan önce

Google Play Console'da Play Games Hizmetleri'ni kurmanız gerekir.

Oyun projenizi oluşturun

Oyun projenizi oluşturmak için aşağıdaki adımları tamamlayın.

CMakeLists.txt dosyasını güncelle

Aşağıdaki kodu CMakeLists.txt dosyanıza ekleyin:

  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)

build.gradle dosyasını güncelleyin

Uygulama düzeyindeki build.gradle dosyanızda aşağıdakileri yapın:

  • Prefab derleme özelliğinin etkinleştirildiğinden emin olun.

  • Play Games Hizmetleri v2 Yerel SDK'ya bağımlılığı ekleyin:

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

Aşağıda bununla ilgili bir örnek verilmiştir:

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

AndroidManifest.xml dosyasını güncelleyin

  1. AndroidManifest.xml dosyanızda Play Games Hizmetleri proje kimliğinizi tanımlayın. Bunu yapmak için dosyaya aşağıdaki satırları ekleyin:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. Proje kimliğiniz için bir dize kaynağı oluşturun. Bu, oyununuzun oluşturma sırasında kimliğe erişmesine olanak tanır. Kaynağı oluşturmak için project_root/app/src/main/res/values/games-ids.xml dosyasını oluşturup aşağıdaki bilgileri ekleyin:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. Oyununuzu oluşturup test edin. Başarılı olursa, oyununuzu başlattığınızda bir oturum açma istemi veya başarılı bir oturum açma banner'ı görüntülenir.

Oynatıcı kimliğini al

Oyununuz, oturum açmış bir oyuncunun oyuncu bilgilerini alarak oyuncu bilgilerine erişebilir. Aşağıdaki örnekte gösterilen GetPlayerID işlevini çağırarak oynatıcı kimliği alabilirsiniz.

#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);
}

Oturum açma istemini yeniden başlatın

Bir oyuncu, oyununuz başladığında otomatik olarak görüntülenen ilk Play Games Hizmetleri oturum açma istemini reddederse oyun oturumu sırasında fikrini değiştirebilir. Şu anda hiçbir oyuncunun oturumu açık olmadığı sürece PgsGamesSignInClient_signIn adlı cihazı arayarak oturum açma istemini yeniden başlatabilirsiniz.

Oyun sunucusu yetkilendirmesi

Oyuncu, Play Games Hizmetleri'nde başarıyla oturum açtıktan sonra arka uç oyun sunucunuzun Play Games Hizmetleri ile güvenli bir şekilde iletişim kurmak için kullanabileceği bir sunucu yetkilendirme kodu isteyebilir. Bu şekilde, oyun sunucunuz oturum açmış oyuncuya ait verileri alabilir, güncelleyebilir ve depolayabilir. Sunucu yetkilendirme kodunu PgsGamesSignInClient_requestServerSideAccess işlevini çağırarak alabilirsiniz.

Daha fazla bilgi için sunucu erişim kılavuzuna bakın.