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:
- Configura una configurazione della piattaforma per Android.
- Utilizza un
GameServices::Builder
per configurare e creare un oggettoGameServices
. L'oggettoGameServices
tenta automaticamente di accedere e restituisce il risultato tramite un callbackOnAuthActionFinished()
. 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. Dopo aver ricevuto il risultato
OnAuthActionFinished()
, puoi utilizzare l'oggettoGameServices
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()
- Accedi (dopo il fallimento dell'autorizzazione):
Quando hai finito di utilizzare l'oggetto
GameServices
, reimpostalo o distruggilo.
A un livello più dettagliato:
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);
Costruisci un oggetto
GameServices
: questo oggetto è il punto di contatto principale per la funzionalità dei servizi per i giochi di Google Play. Le istanzeGameServices
vengono create conGameServices::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 quandoGameServices
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);
Utilizza le classi Manager per gestire l'oggetto
GameServices
. I gestori sono accessibili da un'istanzaGameServices
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'istanzaGameServices
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();
Al termine dell'utilizzo dell'oggetto
GameServices
, esegui la pulizia chiamandoreset()
sull'oggettounique_ptr
che lo possiede o consentendo all'oggettounique_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.