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

Te damos la bienvenida al desarrollo de juegos para iOS con los servicios de juego de Google Play.

El SDK de Play Juegos proporciona servicios de juego de Google Play multiplataforma que te permiten integrar fácilmente las funciones reconocidas de los juegos, como logros, tablas de clasificación y el modo multijugador en tus juegos para tablets y dispositivos móviles.

Este documento describe los pasos básicos que se requieren cuando se crea un juego para iOS mediante el SDK de Play Juegos. Ten en cuenta que estas instrucciones sustituyen la documentación de Acceso con Google para iOS.

Antes de comenzar

Para la creación de aplicaciones con el SDK de Juegos de Google, se requiere lo siguiente:

  • Xcode 6.0 o versiones posteriores
  • Un dispositivo móvil con iOS 7.0 o versiones posteriores

Paso 1: Explora los juegos de muestra

Si todavía no lo hiciste, puede resultarte útil descargar y consultar los juegos de muestra, que ejemplifican el uso adecuado de todas las funciones de los servicios de juego de Google Play en iOS. Puedes encontrar todos estos juegos de muestra en la página de descarga. Sigue las instrucciones que se indican en el archivo README dentro de cada muestra para obtener información sobre su inicialización y ejecución.

Paso 2: Crea (o abre) tu proyecto de Xcode

Crea un nuevo proyecto en Xcode o abre uno existente. Toma nota del identificador de paquete, ya que necesitarás este valor en el siguiente paso. Este suele ser similar a com.*your_company*.*your_project*.

Si estás creando un proyecto nuevo, te recomendamos que selecciones la opción de aplicación con vista única. De esta manera, se configurará el controlador de vistas para tu juego.

Paso 3: Agrega tu juego a Google Play Console

Crea una entrada para tu juego en Google Play Console. De esta manera, se habilitarán los servicios de juego de Google Play para tu aplicación y se creará un ID de cliente de OAuth 2.0, si aún no tienes uno.

  1. Agrega una entrada destinada a tu juego para iOS mediante los pasos que se describen en la sección sobre cómo configurar los servicios de juego de Google Play.
  2. Toma nota del ID de cliente de OAuth 2.0 de tu juego, ya que lo necesitarás más adelante.
  3. Agrega logros y tablas de clasificación a tu juego mediante los pasos que se describen en la sección sobre cómo configurar logros y tablas de clasificación.
  4. Agrega cuentas de otros miembros de tu equipo para probar el juego; para ello, sigue los pasos que se describen en la sección sobre cómo publicar los cambios en los juegos.

Paso 4: Instala los SDK

Antes de usar las API de los servicios de juego de Google Play, debes instalar las bibliotecas obligatorias mediante uno de estos enfoques.

Opción 1: Uso de CocoaPods

CocoaPods es un administrador de dependencias para la instalación de bibliotecas Objective-C. Si tienes instalado CocoaPods, puedes usarlo para instalar el SDK de Play Juegos para iOS mediante estos pasos:

  1. Crea un Podfile y asegúrate de que especifique una plataforma de ios 7.0 o versiones posteriores.
  2. Agrega el pod GooglePlayGames a tu Podfile. Un Podfile típico suele tener el siguiente aspecto:

    platform :ios, '7.0'
    pod 'GooglePlayGames'
    // Other pods might go here
    
  3. Ejecuta pod install desde la línea de comandos.

  4. Abre el archivo .xcworkspace generado para tu app.

  5. Abre tu proyecto en Xcode y continúa desde la sección Agrega botones para acceder y salir que se incluye más abajo.

Opción 2: Instalación manual

Para instalar el SDK de Play Juegos para iOS de forma manual sin usar CocoaPods, sigue estos pasos:

  1. Descarga y extrae el SDK de Acceso con Google más reciente de la página de descargas de Acceso con Google.
  2. Copia los siguientes elementos del SDK de Acceso con Google en tu proyecto:
    • GoogleSignIn.bundle
    • GoogleSignIn.framework
  3. Descarga y extrae el SDK de Google+ para iOS de la página de descargas de Google+.
  4. Copia los siguientes elementos del SDK de Google+ en tu proyecto:
    • GoogleOpenSource.framework
  5. Descarga y extrae el SDK de Play Juegos para iOS. La versión más reciente está disponible en la página de descarga de SDK.
  6. Agrega los siguientes elementos a tu proyecto de Xcode:
    • gpg.bundle
    • gpg.framework
  7. Abre la configuración del proyecto y, en la pestaña Build Phases de la sección Link Binary With Libraries, haz clic en el signo "+" y agrega los siguientes marcos de trabajo:
    • AddressBook.framework
    • AssetsLibrary.framework
    • CoreData.framework
    • CoreLocation.framework
    • CoreMotion.framework
    • CoreTelephony.framework
    • CoreText.framework
    • Foundation.framework
    • MediaPlayer.framework
    • QuartzCore.framework
    • SafariServices
    • Security.framework
    • StoreKit
    • Security.framework
    • SystemConfiguration.framework
    • libc++.dylib
    • libz.dylib
  8. Agrega el marcador del vinculador ObjC a la configuración de la compilación de destino de la app. En la configuración de destino, selecciona Build Settings > Linking > Other Linker Flags y, luego, agrega -ObjC como marcador.

    Other Linker Flags: -ObjC
    

Paso 5: Agrega botones para acceder y salir

En el controlador de vistas, agrega un botón para acceder y otro para salir. Asegúrate de que el botón para acceder cumpla con los lineamientos de desarrollo de la marca para el Acceso con Google. Para reducir el esfuerzo de desarrollo, muchas de las interfaces de usuario integradas que proporcionan los servicios de juego de Google Play ya incluyen una opción para salir, de modo que no tienes que agregarla de forma manual.

A fin de agregar los botones para acceder y salir, sigue estos pasos:

  1. Mantén presionada la tecla Control mientras arrastras los dos botones a la categoría privada del archivo .m del controlador de vistas (la sección que se encuentra en @interface). De esta manera, se crearán objetos IBOutlet para estos botones.

    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UIButton *signInButton;
    @property (weak, nonatomic) IBOutlet UIButton *signOutButton;
    @end
    
  2. Luego, mantén presionada la tecla Control mientras arrastras los dos botones a la sección @implementation del archivo .m del controlador de vistas. De esta manera, se crean los siguientes métodos para controlar cuándo presiona los botones el jugador.

    - (IBAction)signInButtonWasPressed:(id)sender {
      // handle the sign-in button press
    }
    
    - (IBAction)signOutButtonWasPressed:(id)sender {
      // handle the sign-out button press
    }
    

Paso 6: Importa el SDK de Play Juegos y habilita el acceso

  1. Importa el archivo de encabezado GooglePlayGames. Sugerencia: La forma más simple de hacer esto es abrir el archivo .pch de la aplicación y agregar la siguiente línea:

    #import <gpg/GooglePlayGames.h>
    

    Si colocas esta instrucción de importación en el archivo de encabezado previamente compilado de la aplicación, no es necesario que importes el encabezado en todos los demás archivos.

  2. En el archivo .m del controlador de vistas, o en un archivo de constantes aparte, establece tu ID de cliente. Este es el string que registraste antes en la sección "Agrega tu juego a Google Play Console".

    static NSString * const kClientID = @"123456789012.apps.googleusercontent.com";
    
  3. Agrega el siguiente código a los dos métodos buttonWasPressed que creaste anteriormente en la sección "Agrega botones para acceder y salir".

    - (IBAction)signInButtonWasPressed:(id)sender {
      [[GPGManager sharedInstance] signInWithClientID:kClientID silently:NO];
    }
    
    - (IBAction)signOutButtonWasPressed:(id)sender {
      [[GPGManager sharedInstance] signOut];
    }
    
  4. Cuando un jugador acceda a Google, el proceso de acceso se llevará a cabo en una vista web dentro del juego.

    1. En la pestaña Info de la configuración de destino, desplázate hasta la sección URL Types y haz clic en el ícono + para agregar dos nuevos tipos de URL. Especifica dos strings únicos en los dos campos Identifier nuevos. Para el primer tipo de URL, especifica el ID de cliente en orden inverso en el campo URL Schemes. Para el segundo tipo de URL, especifica el identificador de paquete de tu app en el campo URL Schemes. Para obtener más detalles sobre cómo ingresar esta información, consulta la Guía de migración rápida de Acceso con Google.

      Gráfico que muestra los campos Identifier y URL Schemes.

    2. En el archivo .m del delegado de la app, importa el marco de trabajo de Acceso con Google.

      #import <GoogleSignIn/GoogleSignIn.h>
      
    3. Llama al controlador de direcciones URL GIDSignIn desde el controlador de direcciones URL del delegado de tu app. Este método controla la URL que recibe tu aplicación al final del proceso de autenticación.

        [super application:application
            openURL:url
            sourceApplication:sourceApplication
            annotation:annotation];
      - (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            sourceApplication:(NSString *)sourceApplication
            annotation:(id)annotation {
        return [[GIDSignIn sharedInstance] handleURL:url sourceApplication:sourceApplication annotation:annotation];
      }
      

Ahora puedes probar tu aplicación con las funciones para acceder y salir. Cuando accedan los verificadores, usarán una vista web dentro de tu aplicación para completar el proceso de acceso.

[GIDSignIn sharedInstance].uiDelegate = self;

Paso 7: Agrega un GPGStatusDelegate

A continuación, agrega el código para permitir que tu app sepa cuándo se completa el proceso de acceso.

  1. En tu categoría privada de viewDidLoad, declara que tu controlador de vistas es GPGStatusDelegate:

    @interface ViewController () <GPGStatusDelegate>
    
  2. Luego, indícale a GPGManager que esta clase será su delegado de estado. Puedes hacer esto en muchos elementos de tu aplicación (como AppDelegate). En el siguiente fragmento, se muestra cómo puedes hacer esto desde el método viewDidLoad para el controlador de vistas inicial:

    - (void)viewDidLoad {
      [super viewDidLoad];
      [GPGManager sharedInstance].statusDelegate = self;
    }
    
  3. Implementa estos métodos GPGStatusDelegate: didFinishGamesSignInWithError (para controlar la finalización del acceso del jugador) y didFinishGamesSignOutWithError (para controlar la salida de la cuenta del jugador).

    - (void)didFinishGamesSignInWithError:(NSError *)error {
      if (error) {
          NSLog(@"Received an error while signing in %@", [error localizedDescription]);
      } else {
          NSLog(@"Signed in!");
      }
      [self refreshInterfaceBasedOnSignIn];
    }
    
    - (void)didFinishGamesSignOutWithError:(NSError *)error {
      if (error) {
          NSLog(@"Received an error while signing out %@", [error localizedDescription]);
      } else {
          NSLog(@"Signed out!");
      }
      [self refreshInterfaceBasedOnSignIn];
    }
    
  4. Crea un método vacío para la llamada refreshInterfaceBasedOnSignIn.

    - (void)refreshInterfaceBasedOnSignIn {
      // We'll be filling this out shortly.
    }
    

    Ahora, cuando los verificadores accedan o salgan de la cuenta, deben ver el mensaje correcto informado en el registro de la consola.

  5. Completa la implementación para el método refreshInterfaceBasedOnSignIn. Usa la propiedad isSignedIn de GPGManager para determinar qué botón mostrar.

    - (void)refreshInterfaceBasedOnSignIn {
      BOOL signedInToGameServices = [GPGManager sharedInstance].isSignedIn;
      self.signInButton.hidden = signedInToGameServices;
      self.signOutButton.hidden = !signedInToGameServices;
    }
    

Ahora, cuando los verificadores terminen el proceso de acceso, se ocultará el botón para acceder. Cuando salgan de la cuenta, se ocultará el botón para salir y volverá a aparecer el botón para acceder.

Paso 8: Permite que los jugadores recurrentes accedan de forma automática

También puedes permitir que los jugadores accedan automáticamente para que no tengan que completar el acceso cada vez que ejecuten tu juego. Cuando especifiques silently:YES en el método signInWithClientID, GPGManager completará el acceso del jugador de forma automática. Esta llamada se realizará correctamente si se cumplen las siguientes condiciones en su totalidad:

  • El jugador autorizó tu aplicación anteriormente.
  • El jugador no revocó el acceso a tu aplicación.
  • La aplicación no solicita nuevos ámbitos desde la última vez que accedió el jugador.

Con este comportamiento, puedes permitir que el jugador acceda de forma automática a tu juego; para ello, agrega la llamada signInWithClientID:silently: al final del método viewDidLoad, con silently establecido como YES.

[[GPGManager sharedInstance] signInWithClientID:kClientID silently:YES];

Ejecuta la aplicación y observa que, a menos que hayas salido de tu cuenta cuando la usaste por última vez, accederás de forma automática.

Paso 9: Agrega algunas mejoras a la interfaz

Cuando la aplicación comienza el proceso de acceso del jugador de forma automática, se produce una pequeña demora entre el instante en que comienza el acceso y el momento en que se completa. El juego debe inhabilitar la IU durante este tiempo. Para ello, ten en cuenta que el método signInWithClientID:silently devuelve YES si intenta completar el acceso del jugador de forma automática.

  1. Primero, agrega una variable de instancia a la clase del controlador de vistas para verificar si el acceso del jugador se lleva a cabo de manera silenciosa:

    @implementation ViewController {
        BOOL _silentlySigningIn;
    }
    
  2. A continuación, usa esa variable para registrar lo que se devuelve del método signInWithClientID:silently: y, luego, llama a refreshInterfaceBasedOnSignIn de inmediato.

    - (void)viewDidLoad {
      [super viewDidLoad];
      [GPGManager sharedInstance].statusDelegate = self;
      _silentlySigningIn = [[GPGManager sharedInstance]
              signInWithClientID:kClientID silently:YES];
      [self refreshInterfaceBasedOnSignIn];
    }
    
  3. Agrega las siguientes líneas a tu método refreshInterfaceBasedOnSignIn a fin de inhabilitar los botones para acceder y salir si el jugador accede de manera silenciosa:

    self.signInButton.enabled = !_silentlySigningIn;
    self.signOutButton.enabled = !_silentlySigningIn;
    
  4. Finalmente, establece _silentlySigningIn como NO antes de llamar a refreshInterfaceBasedOnSignIn en los dos métodos GPGEventDelegate:

    - (void)didFinishGamesSignInWithError:(NSError *)error {
      // Other code goes here...
      _silentlySigningIn = NO;
      [self refreshInterfaceBasedOnSignIn];
    
    }
    
    - (void)didFinishGamesSignOutWithError:(NSError *)error {
      // Other code goes here...
      _silentlySigningIn = NO;
      [self refreshInterfaceBasedOnSignIn];
    }
    

Ahora, cuando los verificadores inicien tu aplicación, deben ver el botón para acceder, pero estará oculto durante el acceso automático. Una vez que finalice el proceso de acceso del jugador inicial, se ocultará el botón para acceder y aparecerá el botón para salir.

Felicitaciones. Ya puedes comenzar a agregar logros, tablas de clasificación, misiones y otras funciones de los servicios de juego de Google Play a tu juego.

Enviar comentarios sobre…

Play Games Services for iOS
Play Games Services for iOS