Z tego przewodnika dowiesz się, jak skonfigurować projekt gry w języku C lub C++ na potrzeby korzystania z pakietu SDK usług gier Play w wersji 2 i zintegrować uwierzytelnianie na platformie. Integracja jest wymagana, aby zintegrować z grą inne funkcje usług gier Play oraz zintegrować usługi gier Play z backendowym serwerem gry.
Obsługiwane funkcje
Pakiet SDK usług gier Play w wersji 2 do aplikacji natywnych jest w wersji beta i obsługuje tylko usługę logowania. Nie obsługuje jeszcze innych funkcji usług gier Play.
Dokumentacja API
Pliki nagłówkowe pakietu SDK zawierają dokumentację interfejsów API. Pliki nagłówków znajdują się w folderze include w plikach pakietu SDK, które są dostępne po zsynchronizowaniu projektu z repozytorium SDK.
Wymagania
- Projekt gry, w którym głównym językiem programowania jest natywny C lub C++. 
- W projekcie gry i środowisku programistycznym musi być skonfigurowany system kompilacji Gradle. 
Zanim rozpoczniesz
Musisz skonfigurować usługi gier Play w Konsoli Google Play.
Konfigurowanie projektu gry
Aby skonfigurować projekt gry, wykonaj te czynności.
Aktualizacja pliku CMakeLists.txt
W pliku CMakeLists.txt dodaj ten kod:
  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)
Aktualizacja pliku build.gradle
W pliku build.gradle na poziomie aplikacji wykonaj te czynności:
- Sprawdź, czy funkcja tworzenia gotowymi do użycia pakietami prefab jest włączona. 
- Dodaj zależność dla natywnego pakietu SDK usług gier Play w wersji 2: - com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1
 
Oto przykład:
  android {
    ...
    buildFeatures {
      prefab true
    }
    ...
  }
  dependencies {
    ...
    implementation "com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1"
  }
Aktualizacja pliku AndroidManifest.xml.
- W pliku - AndroidManifest.xmlzdefiniuj identyfikator projektu usług gier Play. Aby to zrobić, dodaj w pliku te wiersze:- <manifest> <application> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id"/> </application> </manifest>
- Dla identyfikatora projektu utwórz zasób w postaci ciągu znaków. Dzięki temu gra będzie miała dostęp do identyfikatora w momencie kompilacji. Aby utworzyć zasób, utwórz plik - project_root/app/src/main/res/values/games-ids.xmli dodaj do niego te informacje:- <?xml version="1.0" encoding="utf-8"?> <resources> <string name="game_services_project_id" translatable="false">add your Project ID here</string> </resources>
- Stwórz i przetestuj grę. Jeśli się to uda, po uruchomieniu gry pojawi się prośba o zalogowanie lub baner informujący o pomyślnym zalogowaniu. 
Uzyskiwanie identyfikatora gracza
Twoja gra może uzyskać dostęp do informacji o uwierzytelnionym graczu, pobierając jego identyfikator. Identyfikator gracza możesz pobrać, wywołując funkcję GetPlayerID, co pokazujemy w przykładzie poniżej.
#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);
}
Ponowne wyświetlenie prośby o zalogowanie
Jeśli gracz odrzuci początkowy monit o zalogowanie się w usługach gier Play, który wyświetla się automatycznie po uruchomieniu gry, może zmienić zdanie podczas sesji. Możesz ponownie wyświetlić prośbę o zalogowanie, wywołując funkcję
PgsGamesSignInClient_signIn, o ile żaden gracz będzie w tym czasie uwierzytelniony.
Autoryzacja serwera gry
Gdy gracz pomyślnie uwierzytelni się w usługach gier Play, klient gry może poprosić o kod autoryzacji serwera, którego serwer backendu gry może używać do bezpiecznej komunikacji z usługami gier Play. Dzięki temu serwer gry może pobierać, aktualizować i przechowywać dane uwierzytelnionego gracza. Kod autoryzacji serwera możesz uzyskać, wywołując funkcję PgsGamesSignInClient_requestServerSideAccess.
Więcej informacji znajdziesz w przewodniku po dostępie do serwera.
