Servizi per i giochi di Play per C++

L'SDK C++ dei servizi per i giochi di Google Play fornisce un'API C++ da utilizzare con i servizi per i giochi di Google Play ed è destinato agli sviluppatori che hanno già un'implementazione C++ del proprio gioco.

Attualmente, l'SDK implementa i seguenti servizi:

  • Autorizzazione
  • Obiettivi
  • Classifiche
  • Eventi
  • Partite salvate
  • Connessioni nelle vicinanze (solo Android)
  • Statistiche giocatore

Concetti

In linea generale, per utilizzare l'SDK devi seguire questi passaggi:

  1. Configura una configurazione della piattaforma per Android.
  2. Utilizza un GameServices::Builder per configurare e creare un oggetto GameServices. L'oggetto GameServices tenta automaticamente di accedere e restituisce il risultato tramite un callback OnAuthActionFinished(). Prendi nota del risultato restituito dal callback. Se il tentativo di accesso automatico non va a buon fine, puoi mostrare un pulsante per consentire agli utenti di accedere.
  3. Dopo aver ricevuto il risultato OnAuthActionFinished(), puoi utilizzare l'oggetto GameServices e i relativi gestori secondari per effettuare chiamate ai servizi Play Giochi, tra cui:

    • Accedi (dopo il fallimento dell'autorizzazione): StartAuthorizationUI()
    • Sbloccare obiettivi: Achievements().Unlock()
    • Mostrare gli obiettivi utilizzando l'interfaccia utente integrata: Achievements().ShowAllUI()
    • Invia un punteggio alto: Leaderboards().SubmitScore()
    • Uscire: SignOut()
  4. Quando hai finito di utilizzare l'oggetto GameServices, reimpostalo o distruggilo.

A un livello più dettagliato:

  1. Inizializza una configurazione della piattaforma: si tratta di un oggetto che contiene informazioni di inizializzazione specifiche della piattaforma. Su Android, la configurazione della piattaforma contiene la VM Java e un puntatore all'Activity corrente:

    // In android_main(), create a platform configuration
    // and bind the object activity.
    // Alternately, attach the activity in JNI_Onload().
    gpg::AndroidPlatformConfiguration platform_configuration;
    platform_configuration.SetActivity(state->activity->clazz);
    
  2. Costruisci un oggetto GameServices: questo oggetto è il punto di contatto principale per la funzionalità dei servizi per i giochi di Google Play. Le istanze GameServices vengono create con GameServices::Builder.

    Nella maggior parte delle implementazioni, un determinato oggetto GameServices rimarrà invariato per tutto il tempo in cui è attivo il tuo ambiente C. Non è necessario reinizializzarlo quando GameServices di Android viene messo in pausa e ripreso.Activity

    // Creates a GameServices object that has lambda callbacks.
    game_services_ = gpg::GameServices::Builder()
            .SetDefaultOnLog(gpg::LogLevel::VERBOSE)
            .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) {
                is_auth_in_progress_ = true;
                started_callback(op);
            })
            .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op,
                                                         gpg::AuthStatus status) {
                LOGI("Sign in finished with a result of %d", status);
                is_auth_in_progress_ = false;
                finished_callback(op, status);
            })
            .Create(pc);
    
  3. Utilizza le classi Manager per gestire l'oggetto GameServices. I gestori sono accessibili da un'istanza GameServices e da funzionalità correlate al gruppo. Alcuni esempi sono i gestori di obiettivi e classifiche. Non contengono stati visibili dall'utente. I gestori vengono restituiti per riferimento e l'istanza GameServices contenente ne controlla il ciclo di vita. Il cliente non deve mai conservare un riferimento al gestore. Il cliente deve invece conservare l'istanzaGameServices.

    I gestori restituiscono i dati tramite oggetti di tipo di valore immutabili. Questi valori riflettono una visione coerente dei dati sottostanti al momento in cui è stata eseguita la query.

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. Al termine dell'utilizzo dell'oggetto GameServices, esegui la pulizia chiamando reset() sull'oggetto unique_ptr che lo possiede o consentendo all'oggetto unique_ptr di distruggerlo automaticamente quando esce dall'ambito.

Modello di threading

Salvo indicazione contraria, tutti i metodi GameServices e Manager hanno implementazioni asincrone e sicure per i thread. Possono essere chiamati su qualsiasi thread senza bloccaggio esterno e verranno eseguiti in un ordine coerente con l'ordine di chiamata.

I metodi di accesso (quelli che leggono lo stato) sono disponibili in due varianti principali. Il primo tipo di metodo (con nomi come FetchProperty()) fornisce i risultati in modo asincrono a un callback fornito; il secondo (con nomi come FetchPropertyBlocking()) restituisce i risultati in modo sincrono al thread chiamante.

// Blocking callback
gpg::AchievementManager::FetchAllResponse fetchResponse =
        game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));

// Non-blocking callback
game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,
    [] (gpg::AchievementManager::FetchAllResponse response) {
    LogI("Achievement response status: %d", response.status);});

Tutti i callback utente vengono richiamati in un thread di callback dedicato. Questo thread è potenzialmente distinto da qualsiasi concetto di piattaforma di un "thread principale" o "thread UI". Inoltre, devi assicurarti che i callback utente vengano eseguiti rapidamente. Un thread di callback bloccato può causare problemi visibili all'utente (ad esempio, il completamento ritardato di una richiesta di logout).

Informazioni specifiche della piattaforma

Per iniziare a utilizzare l'SDK Play Games C++ su Android, vai alla guida rapida.

Continua a leggere

Per ulteriori dettagli, leggi la documentazione della classe fornita nell'SDK C++ dei servizi per i giochi di Google Play e consulta gli esempi che mostrano come utilizzare l'SDK.

Se il tuo gioco utilizza un server di backend, consulta Attivare l'accesso lato server ai servizi per i giochi di Google Play.