Pierwsze kroki z usługami gier Play w C i C++

Z tego przewodnika dowiesz się, jak skonfigurować natywny projekt gry w C lub C++, aby używać Natywny pakiet SDK usług gier Play w wersji 2 i zintegruj Usługa logowania. Aby można było skorzystać z integracji logowania, do integracji innych funkcji usług gier Play. z grą i do integracji usług gier Play serwera gry backendu.

Obsługiwane funkcje

Natywny pakiet SDK usług gier Play w wersji 2 jest w wersji beta i obsługuje tylko z usługi logowania. Nie obsługuje jeszcze innych usług gier Play funkcje.

dokumentacja API

Pliki nagłówka pakietu SDK zawierają dokumentację interfejsów API. pliki nagłówka znajdują się w folderze include w plikach SDK, które są dostępne po zsynchronizowaniu projektu z repozytorium SDK.

Wymagania

  • Projekt gry, który jako główny język programowania używa natywnego języka C lub C++.

  • Projekt gry i środowisko programistyczne muszą mieć plik Gradle trzeba skonfigurować system kompilacji.

Zanim rozpoczniesz

Musisz skonfigurować usługi gier Play w Konsola Google Play.

Konfigurowanie projektu gry

Aby skonfigurować projekt gry, wykonaj te czynności.

Zaktualizuj plik 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:

  • Upewnij się, że funkcja prefab kompilacji jest włączona.

  • Dodaj zależność z natywnym pakietem 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"
  }

Zaktualizuj plik AndroidManifest.xml

  1. W pliku AndroidManifest.xml zdefiniuj projekt usług gier Play ID. Aby to zrobić, dodaj te wiersze:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. Utwórz zasób ciągu znaków identyfikatora projektu. Dzięki temu gra może uzyskiwać dostęp do identyfikatora w momencie kompilacji. Aby utworzyć zasób, utwórz plik project_root/app/src/main/res/values/games-ids.xml, i dodaj następujące elementy:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. Stwórz i przetestuj grę. Jeśli gra się uda, po uruchomieniu wyświetli prośbę o zalogowanie się lub baner z prośbą o zalogowanie się.

Uzyskiwanie identyfikatora gracza

Twoja gra może uzyskać dostęp do informacji o zalogowanym graczu, pobierając identyfikator gracza. Aby uzyskać identyfikator gracza, wywołaj GetPlayerID , co zostało zaprezentowane 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);
}

Ponownie uruchom prośbę o zalogowanie się

Jeśli gracz odrzuci prośbę o zalogowanie się w usługach gier Play, automatycznie wyświetlane po uruchomieniu gry, użytkownicy mogą zmienić zdanie podczas sesji gry. Aby ponownie uruchomić prośbę o zalogowanie się, zadzwoń PgsGamesSignInClient_signIn pod warunkiem, że nie jest zalogowany żaden gracz.

Autoryzacja serwera gry

Gdy gracz zaloguje się w usługach gier Play, klient Twojej gry może zażądać kodu autoryzacji serwera, którego może użyć serwer gier backendu bezpiecznie komunikować się z usługami gier Play, Dzięki temu serwer gry będzie mógł pobierać, aktualizować i przechowywać dane zalogowanego odtwarzacza. Możesz pobrać przez wywołanie metody PgsGamesSignInClient_requestServerSideAccess.

Więcej informacji: przewodnika po dostępie do serwera.