Inizia a utilizzare i servizi per i giochi di Play per C e C++

Questa guida descrive come configurare un progetto di gioco nativo C o C++ per utilizzare l'SDK nativo dei servizi per i giochi di Play v2 e Servizio di accesso. L'integrazione dell'accesso è obbligatoria nell'ordine indicato per integrare altre funzionalità dei servizi per i giochi di Play nel tuo gioco e integrare i servizi per i giochi di Play server di gioco backend.

Funzionalità supportate

L'SDK nativo dei servizi per i giochi di Play v2 è in versione beta e supporta solo il servizio di accesso. Non supporta ancora altri servizi per i giochi di Play caratteristiche.

documentazione di riferimento dell'API

I file di intestazione per l'SDK contengono la documentazione di riferimento per le API. La i file di intestazione si trovano nella cartella include dei file dell'SDK, che sono disponibili dopo la sincronizzazione del progetto con il repository di SDK.

Requisiti

  • Un progetto di gioco che utilizza il linguaggio C o C++ nativo come linguaggio di programmazione principale.

  • Il progetto di gioco e l'ambiente di sviluppo devono disporre Gradle la configurazione del sistema di compilazione.

Prima di iniziare

Devi configurare i servizi per i giochi di Play in Google Play Console.

Configura il progetto di gioco

Completa i seguenti passaggi per configurare il progetto di gioco.

Aggiornamento CMakeLists.txt

Nel file CMakeLists.txt, aggiungi il seguente codice:

  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)

Aggiorna build.gradle

Nel file build.gradle a livello di app:

  • Assicurati che la funzionalità di build prefab sia abilitata.

  • Aggiungi la dipendenza per l'SDK nativo dei servizi per i giochi di Play v2:

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

Ecco un esempio:

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

Aggiorna AndroidManifest.xml

  1. Nel file AndroidManifest.xml, definisci il progetto dei servizi per i giochi di Play ID. Per farlo, aggiungi al file le righe seguenti:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. Crea una risorsa stringa per l'ID progetto. Il gioco potrà accedere all'ID al momento della build. Per creare la risorsa, crea il file project_root/app/src/main/res/values/games-ids.xml, e aggiungi quanto segue:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. Crea e testa il tuo gioco. Se l'operazione ha esito positivo, all'avvio del gioco mostra una richiesta di accesso o un banner di accesso riuscito.

Recuperare l'ID giocatore

Il tuo gioco può accedere alle informazioni di un giocatore che ha eseguito l'accesso recuperando l'ID giocatore. Puoi recuperare un ID giocatore chiamando il GetPlayerID , che è dimostrato nell'esempio che segue.

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

Riavvia la richiesta di accesso.

Se un giocatore rifiuta la richiesta di accesso iniziale ai servizi per i giochi di Play, che mostrati automaticamente all'avvio del gioco, potrebbero cambiare idea. durante la sessione di gioco. Puoi riavviare la richiesta di accesso chiamando PgsGamesSignInClient_signIn, purché nessun giocatore abbia eseguito l'accesso.

Autorizzazione server di gioco

Quando un giocatore accede ai servizi per i giochi di Play, il client di gioco può richiedere un codice di autorizzazione del server che il server di gioco di backend può utilizzare per comunicare in sicurezza con i servizi per i giochi di Play. In questo modo il server di gioco recuperare, aggiornare e archiviare i dati relativi al player a cui è stato eseguito l'accesso. Puoi recuperare di autorizzazione del server richiamando il metodo Funzione PgsGamesSignInClient_requestServerSideAccess.

Per ulteriori informazioni, consulta guida all'accesso al server.