Premiers pas avec les services de jeux Play pour C et C++

Ce guide explique comment configurer un projet de jeu en C ou C++ natif afin d'utiliser le SDK natif des services de jeux Play v2 et d'intégrer le service de connexion. L'intégration de la connexion est nécessaire pour intégrer d'autres fonctionnalités de services de jeux Play dans votre jeu et pour inclure les services de jeux Play dans le serveur de jeu backend.

Fonctionnalités compatibles

La version 2 du SDK natif des services de jeux Play est en version bêta et n'est compatible qu'avec le service de connexion. Elle ne prend pas encore en charge les autres fonctionnalités des services de jeux Play.

Documentation de référence sur les API

Les fichiers d'en-tête du SDK contiennent la documentation de référence des API. Ces fichiers d'en-tête se trouvent dans le dossier include parmi les fichiers du SDK, qui sont disponibles après la synchronisation du projet avec le dépôt du SDK.

Conditions requises

  • Le projet de jeu doit utiliser le langage natif C ou C++ comme langage de programmation principal.

  • Le système de compilation Gradle doit être configuré pour votre projet de jeu et votre environnement de développement.

Avant de commencer

Vous devez configurer les services de jeux Play dans la Google Play Console.

Configurer votre projet de jeu

Pour configurer votre projet de jeu, procédez comme suit :

Mettre à jour le fichier CMakeLists.txt

Dans le fichier CMakeLists.txt, ajoutez le code suivant :

  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)

Mettre à jour le fichier build.gradle

Dans le fichier build.gradle au niveau de l'application, procédez comme suit :

  • Assurez-vous que la fonctionnalité de compilation prefab est activée.

  • Ajoutez la dépendance pour la version 2 du SDK natif des services de jeux Play :

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

Exemple :

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

Mettre à jour le fichier AndroidManifest.xml

  1. Dans le fichier AndroidManifest.xml, définissez l'ID de votre projet de services de jeux Play. Pour ce faire, ajoutez les lignes suivantes au fichier :

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. Créez une ressource de chaîne pour l'ID de votre projet. Votre jeu pourra ainsi accéder à l'ID au moment de la compilation. Pour générer la ressource, créez le fichier project_root/app/src/main/res/values/games-ids.xml et ajoutez les éléments suivants :

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. Créez et testez votre jeu. Si l'opération réussit, lorsque vous lancez le jeu, une invite de connexion ou une bannière confirmant que la connexion a réussi s'affiche.

Obtenir l'ID du joueur

Votre jeu peut accéder aux informations d'un joueur connecté en récupérant son ID. Pour récupérer l'ID d'un joueur, appelez la fonction GetPlayerID, comme illustré dans l'exemple suivant.

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

Relancer l'invite de connexion

Si un joueur refuse l'invite initiale de connexion aux services de jeux Play qui s'affiche automatiquement au lancement du jeu, il peut changer d'avis pendant la session. Pour relancer l'invite de connexion, vous pouvez appeler PgsGamesSignInClient_signIn si aucun joueur n'est connecté.

Autorisation du serveur de jeu

Une fois qu'un joueur s'est connecté aux services de jeux Play, votre client de jeu peut demander un code d'autorisation du serveur, que votre serveur de jeu backend peut utiliser afin de communiquer de manière sécurisée avec les services de jeux Play. Le serveur de jeu pourra ainsi récupérer, mettre à jour et stocker les données du joueur connecté. Pour obtenir le code d'autorisation du serveur, appelez la fonction PgsGamesSignInClient_requestServerSideAccess.

Pour en savoir plus, consultez le guide d'accès au serveur.