Configurar o C ou C++ nativo v2

Este documento ajuda você a configurar seu projeto em C++ para C ou C++ nativo v2 e verificar o serviço de autenticação.

Antes de começar

É necessário configurar os serviços relacionados a jogos do Google Play no Google Play Console.

Pré-requisitos do app

O arquivo de compilação do seu app precisa usar os seguintes valores:

  • Uma minSdkVersion 19 ou versões mais recentes.
  • A compileSdkVersion precisa ser definida como 28 ou versões mais recentes.

Configurar o projeto do jogo

Conclua as etapas abaixo para configurar o projeto do jogo.

Atualizar o build.gradle

No arquivo build.gradle no nível do app, faça o seguinte:

  • Verifique se o recurso de build prefab está ativado.

  • Adicione a dependência do SDK nativo v2 (Beta):

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

Veja um exemplo:

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

Atualizar o CMakeLists.txt

No seu arquivo CMakeLists.txt, adicione este 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)

Atualizar o AndroidManifest.xml.

  1. Para definir o ID do projeto dos serviços relacionados a jogos do Google Play no arquivo AndroidManifest.xml, adicione as seguintes linhas:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. Crie um recurso de string para o ID do projeto. Isso permite que seu jogo acesse o ID durante a compilação. Para criar o recurso, crie o arquivo project_root/app/src/main/res/values/games-ids.xml e adicione o seguinte:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. Crie e teste o jogo. Se tudo der certo, ao iniciar o jogo, ele vai mostrar uma solicitação de login ou um banner de login bem-sucedido.

Extrair o ID do jogador

Seu jogo pode acessar informações de um jogador autenticado extraindo o ID do jogador. Você pode extrair o ID do jogador chamando a função GetPlayerId, conforme demonstrado no exemplo a seguir.

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

Reiniciar a solicitação de login

Se um jogador recusa a solicitação de login inicial dos serviços relacionados a jogos do Google Play que é mostrada automaticamente quando o jogo é iniciado, ele pode mudar de ideia durante a sessão. Para reiniciar a solicitação de login, chame PgsGamesSignInClient_signIn, desde que nenhum jogador esteja autenticado.

Autorização do servidor de jogos

Depois que um jogador se autentica nos serviços relacionados a jogos do Google Play, o cliente do jogo pode solicitar um código de autorização do servidor que o servidor de back-end do jogo pode usar para se comunicar com segurança com os serviços relacionados a jogos do Google Play. Isso permite que o servidor de jogos extraia, atualize e armazene dados para o jogador autenticado. É possível extrair o código de autorização do servidor chamando a função PgsGamesSignInClient_requestServerSideAccess.

Para mais informações, consulte o guia de acesso ao servidor.