Introdução aos serviços relacionados a jogos do Google Play para C e C++

Este guia descreve como configurar um projeto de jogo nativo em C ou C++ para usar o SDK nativo dos serviços relacionados a jogos do Google Play v2 e integrar o serviço de login. A integração do login é necessária para integrar outros recursos dos serviços relacionados a jogos do Google Play bem como esses mesmos serviços ao seu servidor de back-end de jogos.

Recursos com suporte

O SDK nativo dos serviços relacionados a jogos do Google Play v2 está na versão Beta e oferece suporte apenas ao serviço de login. Ele ainda não oferece suporte a outros recursos dos serviços relacionados a jogos do Google Play.

Documentação de referência da API

Os arquivos principais do SDK contêm a documentação de referência das APIs. Os arquivos de cabeçalho estão localizados na pasta include nos arquivos do SDK, que vão estar disponíveis depois que você sincronizar seu projeto com o repositório do SDK.

Requisitos

  • Um projeto de jogo que usa C ou C++ nativo como a linguagem de programação principal.

  • O projeto do jogo e o ambiente de desenvolvimento precisam ter as Gradle (em inglês) e a configuração do sistema de build.

Antes de começar

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

Configurar o projeto do jogo

Conclua as etapas abaixo para configurar o projeto do jogo.

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 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 dos serviços relacionados a jogos do Google Play v2:

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

Confira um exemplo:

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

Atualizar o AndroidManifest.xml.

  1. No arquivo AndroidManifest.xml, defina o ID do projeto dos serviços relacionados a jogos do Google Play. Você pode fazer isso adicionando estas linhas de código ao arquivo:

    <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, será mostrada 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 conectado, extraindo o ID do jogador. Você pode extrair o ID do jogador chamando a função GetPlayerID, que é mostrada no exemplo abaixo.

#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 conectado no momento.

Autorização do servidor de jogos

Seu cliente de jogos pode pedir um código de autorização de servidor assim que um usuário faz login. O backend do seu servidor de jogos usa esse código para se comunicar com segurança aos serviços relacionados a jogos do Google Play. Isso permite que o servidor de jogos extraia, atualize e armazene dados para o jogador conectado. É 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.