Configura C o C++ nativo de la versión 2

En este documento, se explica cómo configurar tu proyecto de C++ para C o C++ nativo de la versión 2 y verificar el servicio de autenticación.

Antes de comenzar

Debes configurar los Servicios de juego de Play en Google Play Console.

Requisitos previos de la app

Asegúrate de que el archivo de compilación de tu app use los siguientes valores:

  • Una minSdkVersion de 19 o más
  • Una compileSdkVersion de 28 o más

Cómo configurar tu proyecto de juego

Completa los siguientes pasos para configurar tu proyecto de juego.

Actualiza build.gradle

En el archivo build.gradle a nivel de la app, haz lo siguiente:

  • Asegúrate de que la función de compilación prefab esté habilitada.

  • Agrega la dependencia para el SDK nativo v2 (beta):

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

Por ejemplo:

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

Cómo actualizar CMakeLists.txt

En tu archivo CMakeLists.txt, agrega el siguiente código:

  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)

Cómo actualizar AndroidManifest.xml

  1. Para definir el ID del proyecto de los Servicios de juego de Play en tu archivo AndroidManifest.xml, agrega las siguientes líneas:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. Crea un recurso de cadenas para el ID del proyecto. De esta manera, tu juego podrá acceder al ID durante el tiempo de compilación. Para generar el recurso, crea el archivo project_root/app/src/main/res/values/games-ids.xml y agrega lo siguiente:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. Compila y prueba tu juego. Si se ejecuta correctamente, cuando inicies el juego, aparecerá un mensaje de acceso o un banner de acceso correcto.

Cómo obtener el ID de jugador

Tu juego puede acceder a la información de jugador de un usuario autenticado recuperando su ID. Puedes recuperar un ID de jugador llamando a la función GetPlayerId, como se muestra en el siguiente ejemplo.

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

Cómo volver a lanzar el mensaje de acceso

Si un jugador rechaza el mensaje inicial de acceso de los Servicios de juego de Play que se muestra automáticamente cuando se inicia el juego, es posible que cambie de opinión durante la sesión. Puedes volver a lanzar el mensaje de acceso si llamas a PgsGamesSignInClient_signIn, siempre y cuando no se autentiquen los jugadores.

Autorización del servidor de juegos

Una vez que un jugador se autentica correctamente en los Servicios de juego de Play, tu cliente de juego puede solicitar un código de autorización del servidor que tu servidor de juegos de backend puede usar para comunicarse de forma segura con los Servicios de juego de Play. Esto permite que tu servidor de juegos recupere, actualice y almacene datos del jugador autenticado. Puedes recuperar el código de autorización del servidor si llamas a la función PgsGamesSignInClient_requestServerSideAccess.

Para obtener más información, consulta la guía de acceso al servidor.