Premiers pas avec les services de jeux Play pour C++

Le SDK C++ des services de jeux Google Play fournit une API C++ à utiliser avec Google Play Game et est destiné aux développeurs qui disposent déjà d'une implémentation C++ de leur jeu.

Actuellement, le SDK implémente les services suivants:

  • Autorisation
  • Réussites
  • Classements
  • Événements
  • Jeux enregistrés
  • Nearby Connections (Android uniquement)
  • Statistiques du joueur

Concepts

De manière générale, pour utiliser le SDK, procédez comme suit:

  1. Définissez une configuration de plate-forme pour Android.
  2. Utiliser un GameServices::Builder pour configurer et construire un GameServices . L'objet GameServices tente automatiquement de se connecter et renvoie le résultat via un rappel OnAuthActionFinished(). Notez le résultat renvoyé par le rappel. Si la tentative de connexion automatique échoue, vous pouvez afficher un bouton permettant aux utilisateurs de se connecter.
  3. Après avoir reçu le résultat OnAuthActionFinished(), vous pouvez utiliser la l'objet GameServices et ses administrateurs enfants pour effectuer des appels aux services de jeux Play ; y compris:

    • Connexion (après échec de l'autorisation): StartAuthorizationUI()
    • Déverrouiller des réussites: Achievements().Unlock()
    • Affichez les réussites à l'aide de l'interface utilisateur intégrée: Achievements().ShowAllUI()
    • Envoyez un record: Leaderboards().SubmitScore()
    • Déconnexion: SignOut()
  4. Lorsque vous avez terminé d'utiliser l'objet GameServices, réinitialisez-le ou détruisez-le.

À un niveau plus détaillé:

  1. Initialiser la configuration d'une plate-forme: il s'agit d'un objet qui contient des informations d'initialisation spécifiques à la plate-forme. Sur Android, la configuration de la plate-forme contient VM Java et un pointeur vers le fichier Activity actuel:

    // 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. Construire un objet GameServices: cet objet est le point d'entrée principal de des services de jeux Google Play. GameServices instance créée avec GameServices::Builder.

    Dans la plupart des implémentations, un objet GameServices donné est conservé tant que votre environnement C ; vous n'avez pas besoin de le réinitialiser Android Activity se met en pause et reprend.

    // 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. Utilisez les classes Manager pour gérer votre objet GameServices. Les gestionnaires sont accessibles depuis une instance GameServices et des fonctionnalités liées aux groupes ensemble. Exemples incluent les gestionnaires de réussite et de classement. Ils ne contiennent aucune information eux-mêmes. Les gestionnaires sont renvoyés par référence. Les conteneurs L'instance GameServices contrôle son cycle de vie. Votre client ne doit jamais tenir sur une référence de responsable. Au lieu de cela, votre client doit conserver Instance GameServices.

    Les gestionnaires renvoient des données via des objets de type valeur immuables. Ces valeurs reflètent une vue cohérente des données sous-jacentes au moment où la requête a été faite.

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. Lorsque vous avez fini d'utiliser l'objet GameServices, effectuez un nettoyage en exécutant la commande suivante : en appelant reset() sur le unique_ptr qui lui appartient, ou en laissant unique_ptr le détruira automatiquement lorsqu'il sortira du champ d'application.

Modèle de threading

Sauf indication contraire, toutes les méthodes GameServices et Manager ont des implémentations asynchrones sécurisées. Elles peuvent être appelées sur n'importe quel thread verrouillage externe, et s'exécutent dans un ordre cohérent avec leur appel commande.

Les méthodes d'accesseur (celles qui lisent l'état) se présentent sous deux variantes principales. Le premier type de méthode (avec des noms tels que FetchProperty()) fournit ses résultats de manière asynchrone à un rappel fourni ; la seconde (avec des noms tels que FetchPropertyBlocking()) renvoie ses résultats de manière synchrone au thread.

// 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);});

Tous les rappels des utilisateurs sont appelés sur un thread de rappel dédié. Ce fil de discussion est potentiellement distinct de tout concept de plate-forme de "thread principal" ou « UI fil de discussion". Vous devez également essayer de vous assurer que les rappels des utilisateurs s'exécutent rapidement : un thread de rappel bloqué peut entraîner des problèmes visibles par l'utilisateur (par exemple, un retard dans la fin de la session de requête).

Informations spécifiques à la plate-forme

Pour commencer à utiliser le SDK Play Jeux C++ sur Android, passez à la guide de démarrage rapide.

Documentation complémentaire

Veillez à lire la documentation de la classe fournie dans le jeu Google Play. pour en savoir plus, et consultez le exemples qui montrent comment utiliser le SDK.

Si votre jeu utilise un serveur backend, consultez Activer l'accès côté serveur aux services de jeux Google Play