Cómo comenzar con los servicios de juego de Play para C++

El SDK C++ de los servicios de juego de Google Play proporciona una API de C++ para usar con los servicios de juego de Google Play y está orientado a desarrolladores que ya poseen una implementación de su juego en C++.

Actualmente, el SDK implementa los siguientes servicios:

  • Autorización
  • Logros
  • Tablas de clasificación
  • Multijugador por turnos
  • Multijugador en tiempo real
  • Eventos y misiones
  • Juegos guardados
  • Conexiones cercanas (solo Android)
  • Estadísticas del jugador

Conceptos

En un nivel superior, para utilizar el SDK debes seguir estos pasos:

  1. Establece una configuración de plataforma para Android.
  2. Usa un GameServices::Builder para configurar y generar un objeto GameServices. El objeto GameServices intenta acceder de forma automática y devuelve el resultado mediante una devolución de llamada OnAuthActionFinished(). Anota el resultado de la devolución de llamada. Si falla el intento de acceso automático, puedes mostrar un botón que permita a los usuarios acceder.
  3. Después de recibir el resultado de OnAuthActionFinished(), puedes usar el objeto GameServices y sus administradores secundarios para realizar llamadas a los servicios de juego de Play, incluidas las siguientes:

    • Acceso (después de que falla la autorización): StartAuthorizationUI()
    • Desbloqueo de logros: Achievements().Unlock()
    • Presentación de logros con una IU integrada: Achievements().ShowAllUI()
    • Envío de una puntuación alta: Leaderboards().SubmitScore()
    • Salida de la cuenta: SignOut()
  4. Cuando termines de usar el objeto GameServices, restablécelo o destrúyelo.

En un nivel más detallado:

  1. Inicializa una configuración de plataforma. El objeto contiene información de inicialización específica para la plataforma. En Android, la configuración de plataforma contiene la VM de Java y un puntero a la Activity actual:

    // 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. Construye un objeto GameServices. Este objeto es el punto de entrada principal para la funcionalidad de los servicios de juego de Google Play. Se crearán instancias de GameServices con GameServices::Builder.

    En la mayoría de las implementaciones, un objeto GameServices determinado persistirá lo que dure tu entorno C; no es necesario que lo reinicies cuando se pause y reanude la Activity de Android.

    // 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. Usa las clases de administrador para gestionar tu objeto GameServices. El acceso a los administradores se obtiene desde una instancia de GameServices y estos agrupan la funcionalidad relacionada. Algunos ejemplos incluyen los administradores de logros y tablas de posiciones. Estos no poseen estados visibles para el usuario. Los administradores se devuelven como referencia y la instancia de GameServices que contienen controla su ciclo de duración. El cliente nunca debe aferrarse a una referencia de administrador. En cambio, debe aferrarse a la instancia de GameServices.

    Los administradores devuelven datos mediante objetos de valor invariable. Esos valores reflejan una vista constante de los datos subyacentes en el momento en que se realizó la consulta.

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. Cuando termines de usar el objeto GameServices, límpialo mediante una llamada a reset() en el unique_ptr al que pertenece o deja que el unique_ptr lo destruya automáticamente cuando esté fuera de alcance.

Modelo de subprocesos

A menos que se indique lo contrario, todos los métodos de GameServices y del administrador tienen implementaciones asíncronas y seguras para subprocesos. Se los puede llamar en cualquier subproceso sin bloqueo externo y se ejecutarán en un orden coherente con el orden de invocación.

Los métodos de descriptores de acceso (aquellos que leen el estado) se encuentran disponibles en dos variantes principales. El primer tipo de método (con nombres como FetchProperty()) suministra de forma asíncrona sus resultados a una devolución de llamada proporcionada; el segundo (con nombres como FetchPropertyBlocking()) devuelve de forma asíncrona sus resultados al subproceso que realizó la llamada.

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

Todas las devoluciones de llamada del usuario se invocan en un subproceso de devolución de llamada exclusivo. Este subproceso es potencialmente distinto a cualquier concepto de plataforma de un "subproceso principal" o "subproceso de IU". También debes tratar de asegurarte de que las devoluciones de llamada del usuario se ejecuten rápidamente; la interrupción de un subproceso de devolución de llamada puede provocar problemas visibles para el usuario (por ejemplo, demoras en la ejecución de una solicitud de salida de la cuenta).

Información específica de la plataforma

Para comenzar a usar el SDK de C++ para Play Juegos en Android, continúa a la guía de inicio rápido.

Lecturas adicionales

Asegúrate de leer la documentación de clase que incluye el SDK de C++ de los servicios de juego de Google Play para obtener más detalles y consulta las muestras que indican cómo usar el SDK.