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

In diesem Leitfaden wird beschrieben, wie du ein natives C- oder C++-Spielprojekt zur Verwendung des Play-Spieldienste v2 Native SDK und integriere das Anmeldedienst: Die Anmeldeintegration ist erforderlich, um um andere Funktionen der Play-Spieldienste zu integrieren und die Play-Spieldienste in dein Spiel zu integrieren, Back-End-Spieleserver.

Unterstützte Funktionen

Das native SDK der Play-Spieldienste v2 befindet sich in der Betaphase und unterstützt den Anmeldedienst. Andere Play-Spieldienste werden noch nicht unterstützt Funktionen.

API-Referenzdokumentation

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

Voraussetzungen

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

  • Dein Spielprojekt und deine Entwicklungsumgebung müssen Gradle Systemeinrichtung zu erstellen.

Vorbereitung

Du musst Play-Spieldienste einrichten in Google Play Console

Spielprojekt einrichten

Führe die folgenden Schritte aus, um dein Spielprojekt einzurichten.

CMakeLists.txt aktualisieren

Fügen Sie der Datei CMakeLists.txt 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)

build.gradle aktualisieren

Gehe in der Datei build.gradle auf App-Ebene so vor:

  • Achten Sie darauf, dass die Build-Funktion prefab aktiviert ist.

  • Fügen Sie die Abhängigkeit für das native SDK der Play-Spieldienste v2 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. Definiere in der Datei AndroidManifest.xml dein Play-Spieldienste-Projekt. ID. Fügen Sie dazu die folgenden Zeilen in die Datei ein:

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

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. Entwickeln und testen Sie Ihr Spiel. Wenn du dein Spiel erfolgreich startest, wird eine Aufforderung zur Anmeldung oder ein Banner für eine erfolgreiche Anmeldung angezeigt.

Spieler-ID abrufen

Dein Spiel kann auf Spielerinformationen eines angemeldeten Spielers zugreifen, indem es seine Spieler-ID. Du kannst eine Spieler-ID abrufen, indem du die GetPlayerID aufrufst die im folgenden Beispiel gezeigt wird.

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

Starten Sie die Anmeldeaufforderung noch einmal.

Wenn ein Spieler die anfängliche Anmeldeaufforderung für die Play-Spieldienste ablehnt, automatisch angezeigt, wenn dein Spiel veröffentlicht wird, kann der Nutzer seine Meinung ändern während der Spielsitzung. Sie können die Anmeldeaufforderung neu starten, indem Sie PgsGamesSignInClient_signIn, solange keine Spieler angemeldet sind.

Gameserver-Autorisierung

Sobald sich ein Spieler in den Play-Spieldiensten erfolgreich angemeldet hat, kann einen Serverautorisierungscode anfordern, den dein Backend-Spieleserver für Folgendes verwenden kann: sicher mit den Play-Spieldiensten kommunizieren können. So kann Ihr Gameserver Daten für den angemeldeten Player abrufen, aktualisieren und speichern. Sie können die Server-Autorisierungscode durch Aufrufen der Methode PgsGamesSignInClient_requestServerSideAccess.

Weitere Informationen finden Sie in der Leitfaden für den Serverzugriff