Inizia a utilizzare i 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 Google Play Game ed è rivolto agli sviluppatori che hanno già un'implementazione C++ del loro gioco.

Attualmente, l'SDK implementa i seguenti servizi:

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

Concetti

A livello generale, puoi utilizzare l'SDK procedendo nel seguente modo:

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

    • Accedi (se l'autorizzazione non va a buon fine): StartAuthorizationUI()
    • Sblocca obiettivi: Achievements().Unlock()
    • Mostra gli obiettivi utilizzando l'interfaccia utente integrata: Achievements().ShowAllUI()
    • Invia un miglior punteggio: Leaderboards().SubmitScore()
    • Esci: SignOut()
  4. Quando hai finito di utilizzare l'oggetto GameServices, reimpostalo o eliminalo.

A un livello più dettagliato:

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

    // 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. Crea un oggetto GameServices: questo è il punto di ingresso principale per Funzionalità dei servizi per i giochi di Google Play. GameServices istanze create con GameServices::Builder.

    Nella maggior parte delle implementazioni, un determinato oggetto GameServices continuerà a esistere finché il tuo ambiente C; non occorre reinizializzarla quando Android Activity viene messo in pausa e riprende.

    // 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 il tuo oggetto GameServices. È possibile accedere ai gestori da una funzionalità correlata all'istanza e al gruppo GameServices in sinergia. Esempi includono i gestori degli obiettivi e della classifica. Non contengono elementi visibili all'utente dichiarano il proprio stato. I gestori vengono restituiti per riferimento e le L'istanza GameServices controlla il proprio ciclo di vita. Il tuo cliente non dovrebbe mai su un riferimento di Manager. Il tuo cliente dovrebbe invece rimanere GameServices istanza.

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

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. Quando hai finito di utilizzare l'oggetto GameServices, esegui la pulizia entro chiamando reset() sul unique_ptr di proprietà oppure consentendo unique_ptr lo elimina automaticamente quando esce dall'ambito.

Modello di thread

Se non diversamente indicato, tutti i metodi GameServices e Manager hanno a implementazioni asincrone senza thread. Possono essere chiamate in qualsiasi thread senza il blocco esterno ed eseguite in un ordine coerente con la relativa chiamata ordine.

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

// 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 degli utenti vengono attivati in un thread di callback dedicato. Questo thread è potenzialmente distinto da qualsiasi concetto di piattaforma di "thread principale" oppure "UI thread". Dovresti anche cercare di assicurarti che i callback dell'utente vengano eseguiti rapidamente; un thread di callback bloccato potrebbero causare problemi visibili all'utente (ad esempio, un ritardo nel completamento di una disconnessione richiesta).

Informazioni specifiche della piattaforma

Per iniziare a utilizzare l'SDK Play Giochi C++ su Android, continua con guida rapida.

Per approfondire

Assicurati di leggere la documentazione del corso fornita nel gioco di Google Play. C++ SDK per ulteriori dettagli e dai un'occhiata alla esempi che dimostrano come utilizzare l'SDK.

Se il gioco utilizza un server di backend, consulta Attivazione dell'accesso lato server ai servizi per i giochi di Google Play