v2 네이티브 C 또는 C++ 설정

이 문서는 v2 네이티브 C 또는 C++용 C++ 프로젝트를 설정하고 인증 서비스를 확인하는 데 도움이 됩니다.

시작하기 전에

Google Play Console에서 Play 게임즈 서비스를 설정해야 합니다.

앱 기본 요건

앱의 빌드 파일이 다음 값을 사용하는지 확인합니다.

  • minSdkVersion 19 이상
  • compileSdkVersion 28 이상

게임 프로젝트 설정

다음 단계에 따라 게임 프로젝트를 설정할 수 있습니다.

build.gradle 업데이트

앱 수준 build.gradle 파일에서 다음을 실행합니다.

  • prefab 빌드 기능이 사용 설정되어 있는지 확인합니다.

  • v2 네이티브 SDK (베타)의 종속 항목을 추가합니다.

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

예를 들면 다음과 같습니다.

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

CMakeLists.txt 업데이트

CMakeLists.txt 파일에서 다음 코드를 추가하세요.

  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 업데이트

  1. AndroidManifest.xml 파일에서 Play 게임즈 서비스 프로젝트 ID를 정의하려면 다음 줄을 추가합니다.

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. 프로젝트 ID용 문자열 리소스를 만듭니다. 이렇게 하면 빌드 시간에 게임에서 ID에 액세스할 수 있습니다. 리소스를 만들려면 project_root/app/src/main/res/values/games-ids.xml 파일을 만들고 다음을 추가합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. 게임을 빌드하고 테스트합니다. 성공하는 경우 게임 실행 시 게임에 로그인 메시지 또는 로그인 성공 배너가 표시됩니다.

플레이어 ID 가져오기

게임에서 플레이어 ID를 검색하여 인증된 플레이어의 플레이어 정보에 액세스할 수 있습니다. 다음 예와 같이 GetPlayerId 함수를 호출하여 플레이어 ID를 검색할 수 있습니다.

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

로그인 메시지 다시 실행

플레이어가 게임 실행 시 자동으로 표시되는 Play 게임즈 서비스 초기 로그인 메시지를 거부했다가 게임 세션 중에 마음이 바뀔 수도 있습니다. 인증된 플레이어가 없는 경우 PgsGamesSignInClient_signIn을 호출하여 로그인 메시지를 다시 실행할 수 있습니다.

게임 서버 승인

플레이어가 Play 게임즈 서비스에 인증되면 게임 클라이언트는 백엔드 게임 서버가 Play 게임즈 서비스와 안전하게 통신하는 데 사용할 수 있는 서버 승인 코드를 요청할 수 있습니다. 그러면 게임 서버가 인증된 플레이어의 데이터를 검색하고 업데이트 및 저장할 수 있습니다. PgsGamesSignInClient_requestServerSideAccess 함수를 호출하여 서버 승인 코드를 검색할 수 있습니다.

자세한 내용은 서버 액세스 가이드를 참고하세요.