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:
- Imposta una configurazione della piattaforma per Android.
- Usa un
GameServices::Builder
per configurare e creare unGameServices
. L'oggettoGameServices
tenta automaticamente di accedere e restituisce il risultato tramite un callbackOnAuthActionFinished()
. 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. Dopo aver ricevuto il risultato di
OnAuthActionFinished()
, puoi utilizzareGameServices
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()
- Accedi (se l'autorizzazione non va a buon fine):
Quando hai finito di utilizzare l'oggetto
GameServices
, reimpostalo o eliminalo.
A un livello più dettagliato:
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);
Crea un oggetto
GameServices
: questo è il punto di ingresso principale per Funzionalità dei servizi per i giochi di Google Play.GameServices
istanze create conGameServices::Builder
.Nella maggior parte delle implementazioni, un determinato oggetto
GameServices
continuerà a esistere finché il tuo ambiente C; non occorre reinizializzarla quando AndroidActivity
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);
Utilizza le classi Manager per gestire il tuo oggetto
GameServices
. È possibile accedere ai gestori da una funzionalità correlata all'istanza e al gruppoGameServices
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'istanzaGameServices
controlla il proprio ciclo di vita. Il tuo cliente non dovrebbe mai su un riferimento di Manager. Il tuo cliente dovrebbe invece rimanereGameServices
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();
Quando hai finito di utilizzare l'oggetto
GameServices
, esegui la pulizia entro chiamandoreset()
sulunique_ptr
proprietario oppure consentendo alunique_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