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 integrare il servizio di accesso. L'integrazione dell'accesso è necessaria per integrare altre funzionalità dei servizi per i giochi di Play nel tuo gioco e per integrare i servizi per i giochi di Play nel tuo server di gioco di backend.

Funzionalità supportate

L'SDK nativo dei servizi per i giochi di Play v2 è in versione beta e supporta soltanto il servizio Accedi. Non supporta ancora altre funzionalità dei servizi per i giochi di Play.

Documentazione di riferimento API

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

Requisiti

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

  • Per il progetto di gioco e l'ambiente di sviluppo deve essere configurato il sistema di build di Gradle.

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 tuo progetto di gioco.

Aggiorna 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, procedi nel seguente modo:

  • Assicurati che la funzionalità di compilazione prefabbricata sia attivata.

  • 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 l'ID progetto dei servizi per i giochi di Play. Per farlo, aggiungi le seguenti righe al file:

    <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. In questo modo il tuo gioco potrà accedere all'ID al momento della creazione. 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. In caso di esito positivo, quando avvii il gioco viene visualizzata una richiesta di accesso o un banner di accesso riuscito.

Recuperare l'ID player

Il gioco può accedere alle informazioni di un giocatore che ha eseguito l'accesso recuperando il suo ID giocatore. Puoi recuperare un ID player chiamando la funzione GetPlayerID, come mostrato nell'esempio seguente.

#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 iniziale di accesso ai servizi per i giochi di Play che viene visualizzata automaticamente all'avvio del gioco, potrebbe cambiare idea durante la sessione di gioco. Puoi riavviare la richiesta di accesso chiamando il numero PgsGamesSignInClient_signIn, purché non ci siano giocatori collegati.

Autorizzazione del 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 modo sicuro con i servizi per i giochi di Play. Il server di gioco potrà recuperare, aggiornare e archiviare i dati del giocatore che ha eseguito l'accesso. Puoi recuperare il codice di autorizzazione del server chiamando la funzione PgsGamesSignInClient_requestServerSideAccess.

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