v2 Native C veya C++'ı ayarlama

Bu belge, C++ projenizi v2 Native C veya C++ için ayarlamanıza ve kimlik doğrulama hizmetini doğrulamanıza yardımcı olur.

Başlamadan önce

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

Uygulama ön koşulları

Uygulamanızın derleme dosyasında aşağıdaki değerlerin kullanıldığından emin olun:

  • 19 veya daha yüksek bir minSdkVersion
  • 28 veya daha yüksek bir compileSdkVersion

Oyun projenizi oluşturma

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

build.gradle dosyasını güncelleme

Uygulama düzeyindeki build.gradle dosyanızda şunları yapın:

  • Prefabrik yapı özelliğinin etkinleştirildiğinden emin olun.

  • v2 Native SDK'sının (beta) bağımlılığını ekleyin:

    • com.google.android.gms:play-services-games-v2-native-c-1.0.0-beta01

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:21.0.0-beta1"
  }

CMakeLists.txt dosyasını güncelleme

CMakeLists.txt dosyanıza aşağıdaki kodu 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)

AndroidManifest.xml dosyasını güncelleyin

  1. AndroidManifest.xml dosyanızda Play Games Hizmetleri proje kimliğinizi tanımlamak için 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 sayede oyununuz, derleme sırasında kimliğe erişebilir. Kaynağı oluşturmak için dosyayı oluşturun project_root/app/src/main/res/values/games-ids.xml, ve aşağıdakileri 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şturun ve test edin. Başarılı olursa oyununuzu başlattığınızda oturum açma istemi veya başarılı oturum açma banner'ı gösterilir.

Oyuncu kimliğini alma

Oyununuz, kimliği doğrulanmış bir oyuncunun oyuncu kimliğini alarak oyuncu bilgilerine erişebilir. Aşağıdaki örnekte gösterildiği gibi, GetPlayerId işlevini çağırarak oyuncu kimliğini 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şlatma

Bir oyuncu, oyununuz başlatıldığında otomatik olarak gösterilen ilk Google Play Games Hizmetleri oturum açma istemini reddederse oyun oturumu sırasında fikrini değiştirebilir. Hiçbir oyuncunun kimliği doğrulanmadığı sürece PgsGamesSignInClient_signIn işlevini çağırarak oturum açma istemini yeniden başlatabilirsiniz.

Oyun sunucusu yetkilendirmesi

Bir oyuncu Play Games Hizmetleri'nde kimliğini başarıyla doğruladıktan sonra oyun istemciniz, 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 sayede oyun sunucunuz, kimliği doğrulanmış oyuncunun verilerini alabilir, güncelleyebilir ve depolayabilir. PgsGamesSignInClient_requestServerSideAccess işlevini çağırarak sunucu yetkilendirme kodunu alabilirsiniz.

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