Parte: 11 — Móvil, consolas y plataformas · Fuente: Documentación de Google Play Games Services y Apple Game Center ⏱️ Duración estimada: 80 min · Nivel: Intermedio
Integrar en un juego de Godot 4 los servicios sociales de las dos grandes plataformas móviles: Google Play Games Services (PGS) en Android y Game Center en iOS. Estos servicios aportan inicio de sesión con la cuenta de la plataforma, logros, tablas de clasificación (leaderboards) y guardado en la nube, y son los que dan a un juego móvil su capa social y de progreso persistente.
Un punto clave que debes interiorizar: estos servicios no son API nativa de Godot. El motor no incluye PGS ni Game Center de fábrica. Se integran mediante plugins externos (por ejemplo, plugins de la comunidad para Android/iOS) que exponen las funciones nativas a GDScript. Al terminar, sabrás diseñar un catálogo de logros, configurar una tabla de clasificación y desbloquear un logro desde tu código a través del plugin.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Panorama PGS vs Game Center | Cada tienda tiene su propio ecosistema social. |
| 2 | Plugins como puente nativo | Godot no trae estos servicios; el plugin los expone. |
| 3 | Sign-in con la cuenta de plataforma | Es la puerta a logros, leaderboards y nube. |
| 4 | Diseño de logros | Un buen catálogo motiva y guía al jugador. |
| 5 | Leaderboards | Comparación social que alarga la vida del juego. |
| 6 | Cloud save | Continuidad entre dispositivos del mismo usuario. |
| 7 | Identificadores estables | Cambiar un ID rompe datos ya publicados. |
| 8 | Manejo de errores y estados sin conexión | El móvil pierde red constantemente. |
Necesitas Godot 4.x, una cuenta de Google Play Console (pago único de registro) y/o una cuenta de Apple Developer Program (suscripción anual). Para Android se usa un plugin de PGS instalado en res://addons/ que añade su .gdap y su AAR al export. Para iOS se usa un plugin equivalente de Game Center. Estos plugins los mantiene la comunidad; verifica siempre que la versión sea compatible con tu versión de Godot.
Consulta la documentación oficial de servicios: PGS https://developers.google.com/games/services y Game Center https://developer.apple.com/game-center/. Para el flujo de plugins Android en Godot 4, revisa https://docs.godotengine.org/en/stable/tutorials/platform/android/android_plugin.html.
Integraremos un logro y una tabla de clasificación, y desbloquearemos el logro desde el juego. Los nombres de método del plugin varían según su versión; aquí se muestra un patrón representativo que envolveremos en un autoload para aislar la dependencia.
En Google Play Console, entra en tu app → Play Games Services → Configuración y gestión → Configuración. Crea la credencial y vincula el juego.
En Logros, crea uno nuevo: nombre visible "Primer salto", tipo standard (desbloqueo). Copia su ID (algo como CgkI...).
En Tablas de clasificación, crea una: nombre "Mejor puntuación", orden mayor es mejor. Copia su ID.
Instala el plugin de PGS en res://addons/ según su README y actívalo en Project → Project Settings → Plugins. En el export de Android, marca el plugin.
Crea un autoload Social (res://autoload/social.gd) que envuelva el plugin:
extends Node
# Envoltorio del plugin de Google Play Games Services.
# Aísla la dependencia externa: el resto del juego solo llama a este autoload.
var _pgs: Object = null
const ID_LOGRO_PRIMER_SALTO := "CgkI_reemplaza_este_id"
const ID_TABLA_PUNTUACION := "CgkI_reemplaza_esta_tabla"
func _ready() -> void:
# El singleton lo publica el plugin al iniciarse en Android.
if Engine.has_singleton("GodotPlayGameServices"):
_pgs = Engine.get_singleton("GodotPlayGameServices")
_pgs.signInWithCredentialsManager() # inicia sesión al arrancar
else:
push_warning("PGS no disponible (¿estás en el editor o sin plugin?).")
func desbloquear_primer_salto() -> void:
if _pgs == null:
return
_pgs.unlockAchievement(ID_LOGRO_PRIMER_SALTO)
func enviar_puntuacion(valor: int) -> void:
if _pgs == null:
return
_pgs.submitScore(ID_TABLA_PUNTUACION, valor)
func _al_saltar_por_primera_vez() -> void:
Social.desbloquear_primer_salto()
Social.enviar_puntuacion(puntos_actuales)
Al aislar el plugin en Social, el resto del código no depende de nombres nativos y puedes ofrecer una implementación vacía en el editor.
mostrar_leaderboard() que abra la tabla de clasificación nativa.Amplía el autoload Social para soportar tres logros (uno de desbloqueo y dos incrementales) y una tabla de clasificación. Conecta cada logro a un evento real del juego y envía la puntuación al terminar una partida. Provee además una implementación falsa (mock) que registre por consola las llamadas cuando el plugin no esté presente.
Criterio de aceptación: en el editor, jugar y terminar una partida imprime en consola las llamadas simuladas sin errores; en un dispositivo Android real, se desbloquea al menos un logro visible y la puntuación aparece en la tabla.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Nada ocurre al desbloquear en el editor | Los servicios solo corren en dispositivo real; usa un mock en editor. |
| "Sign-in failed" o silencio total | La app no está bien vinculada en la consola o falta la huella SHA-1. Revisa la credencial. |
| El logro no aparece | Su ID en código no coincide con el de la consola, o el logro está sin publicar. |
| La tabla rechaza puntuaciones | Enviaste antes de iniciar sesión o el ID de tabla es incorrecto. |
| El plugin no carga en el export | No lo marcaste en el preset de export de Android o la versión es incompatible. |
❓ ¿Godot trae PGS o Game Center de serie? No. Ambos se integran con plugins externos que exponen el código nativo a GDScript; el motor no incluye estos servicios.
❓ ¿Puedo probar los logros en el editor? No de forma real. Envuelve el plugin en un autoload y ofrece un mock para el editor; prueba lo real en un dispositivo físico.
❓ ¿Los IDs de logros se pueden cambiar luego? Evítalo. Una vez publicado, cambiar un ID rompe los datos ya existentes; trátalos como constantes estables.
❓ ¿Necesito ambos servicios? Solo el de cada plataforma en la que publiques: PGS en Android, Game Center en iOS. Conviene abstraerlos tras una interfaz común.
Clase 206 - Monetización móvil: anuncios y compras in-app