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 de jogo e o ambiente de desenvolvimento precisam ter o sistema de build do Gradle configurado.
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.
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>
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>
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.