C 및 C++용 Play 게임즈 서비스 시작하기

이 가이드에서는 Play 게임즈 서비스 v2 네이티브 SDK를 사용하고 로그인 서비스를 통합하도록 네이티브 C 또는 C++ 게임 프로젝트를 설정하는 방법을 설명합니다. 다른 Play 게임즈 서비스 기능을 게임에 통합하고 Play 게임즈 서비스를 백엔드 게임 서버에 통합하려면 로그인 통합이 필요합니다.

지원되는 기능

Play 게임즈 서비스 v2 네이티브 SDK는 베타 버전이며 로그인 서비스만 지원합니다. 다른 Play 게임즈 서비스 기능은 아직 지원하지 않습니다.

API 참조 문서

SDK의 헤더 파일에는 API에 관한 참조 문서가 포함되어 있습니다. 헤더 파일은 SDK 파일의 include 폴더에 있으며 프로젝트를 SDK 저장소와 동기화한 후 사용할 수 있습니다.

요구사항

  • 네이티브 C 또는 C++를 기본 프로그래밍 언어로 사용하는 게임 프로젝트

  • 게임 프로젝트 및 개발 환경에는 Gradle 빌드 시스템이 설정되어 있어야 합니다.

시작하기 전에

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

게임 프로젝트 설정

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

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)

build.gradle 업데이트

앱 수준 build.gradle 파일에서 다음을 따르세요.

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

  • Play 게임즈 서비스 v2 네이티브 SDK의 종속 항목을 추가합니다.

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

다음 예를 참고하세요.

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

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 함수를 호출하여 서버 승인 코드를 검색할 수 있습니다.

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