Erste Schritte mit den Play-Spieldiensten für C und C++

In diesem Leitfaden wird beschrieben, wie Sie ein natives C- oder C++-Spielprojekt für die Verwendung des Play-Spieldienste v2 Native SDK einrichten und die Plattformauthentifizierung einbinden. Die Integration ist erforderlich, um andere Funktionen der Play-Spieldienste in Ihr Spiel und die Play-Spieldienste in Ihren Backend-Spielserver einzubinden.

Unterstützte Funktionen

Das Native SDK für die Google Play-Spieldienste v2 befindet sich in der Betaphase und unterstützt nur den Anmeldedienst. Andere Funktionen der Play Spiele-Dienste werden noch nicht unterstützt.

API-Referenzdokumentation

Die Headerdateien für das SDK enthalten Referenzdokumentation für die APIs. Die Headerdateien befinden sich im Ordner include in den SDK-Dateien, die verfügbar sind, nachdem Sie Ihr Projekt mit dem SDK-Repository synchronisiert haben.

Voraussetzungen

  • Ein Spielprojekt, in dem natives C oder C++ als primäre Programmiersprache verwendet wird.

  • Für Ihr Spielprojekt und Ihre Entwicklungsumgebung muss das Gradle-Build-System eingerichtet sein.

Vorbereitung

Sie müssen die Play-Spieldienste in der Google Play Console einrichten.

Spielprojekt einrichten

Führen Sie die folgenden Schritte aus, um Ihr Spielprojekt einzurichten.

CMakeLists.txt aktualisieren

Fügen Sie in Ihrer CMakeLists.txt-Datei den folgenden Code hinzu:

  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)

Datei build.gradle aktualisieren

Führen Sie in der Datei build.gradle auf App-Ebene folgende Schritte aus:

  • Prüfen Sie, ob die Build-Funktion Prefab aktiviert ist.

  • Fügen Sie die Abhängigkeit für das Play Games Services V2 Native SDK hinzu:

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

Beispiel:

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

AndroidManifest.xml aktualisieren

  1. Definieren Sie in der Datei AndroidManifest.xml die Projekt-ID Ihres Google Play-Spieldienste-Projekts. Fügen Sie dazu der Datei die folgenden Zeilen hinzu:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. Erstellen Sie eine String-Ressource für Ihre Projekt-ID. So kann Ihr Spiel zur Build-Zeit auf die ID zugreifen. Erstellen Sie die Datei project_root/app/src/main/res/values/games-ids.xml und fügen Sie Folgendes hinzu, um die Ressource zu erstellen:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. Erstellen und testen Sie Ihr Spiel. Wenn die Anmeldung erfolgreich ist, wird beim Starten des Spiels eine Anmeldeaufforderung oder ein Banner mit dem Hinweis angezeigt, dass die Anmeldung erfolgreich war.

Spieler-ID abrufen

Ihr Spiel kann auf Spielerinformationen für einen authentifizierten Spieler zugreifen, indem es seine Spieler-ID abruft. Sie können eine Spieler-ID abrufen, indem Sie die Funktion GetPlayerID aufrufen. Das wird im folgenden Beispiel gezeigt.

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

Anmeldeaufforderung noch einmal starten

Wenn ein Spieler die erste Aufforderung zur Anmeldung bei den Play-Spieldiensten ablehnt, die automatisch beim Start Ihres Spiels angezeigt wird, kann er seine Meinung während der Spielsitzung ändern. Sie können den Anmeldeaufforderung neu starten, indem Sie PgsGamesSignInClient_signIn aufrufen, sofern derzeit keine Spieler authentifiziert sind.

Gameserver-Autorisierung

Sobald sich ein Spieler erfolgreich bei den Play-Spieldiensten authentifiziert hat, kann Ihr Spieleclient einen Serverautorisierungscode anfordern, mit dem Ihr Backend-Gameserver sicher mit den Play-Spieldiensten kommunizieren kann. So kann Ihr Spielserver Daten für den authentifizierten Spieler abrufen, aktualisieren und speichern. Sie können den Serverautorisierungscode abrufen, indem Sie die Funktion PgsGamesSignInClient_requestServerSideAccess aufrufen.

Weitere Informationen finden Sie im Leitfaden für den Serverzugriff.