Primeiros passos com os serviços relacionados a jogos do Google Play para iOS

Comece a desenvolver jogos para iOS com os serviços relacionados a jogos do Google Play.

O SDK do Play Games fornece serviços relacionados a jogos do Google Play em várias plataformas. Com eles, é possível integrar facilmente recursos muito usados em jogos, como conquistas, placares e opções de multijogador para jogos de tablet e dispositivos móveis.

Este documento descreve as etapas básicas para criar um jogo para iOS usando o SDK do Play Games. Estas instruções substituem a documentação do Login do Google para iOS.

Antes de começar

Criar aplicativos usando o SDK do Play Games exige o seguinte:

  • Xcode versão 6.0 ou posterior
  • Um dispositivo móvel executando iOS 7.0 ou posterior

Etapa 1: ver os jogos de exemplo

Caso ainda não tenha feito isso, faça o download e analise os jogos de exemplo. Eles demonstram o uso adequado de todos os recursos dos serviços relacionados a jogos do Google Play para iOS. Você pode encontrar todos os jogos de exemplo para iOS na página de download de exemplos. Siga as instruções no arquivo README de cada exemplo para ver como inicializar e executar os apps.

Etapa 2: criar ou abrir o projeto Xcode

Crie um novo projeto no Xcode ou abra um projeto existente. Anote o identificador do pacote. Você precisará desse valor na próxima etapa. Geralmente, ele tem esta aparência: com.*your_company*.*your_project*.

Se estiver criando um novo projeto, recomendamos selecionar a opção "Single View Application". Ela cuida da configuração do controlador de visualização do jogo.

Etapa 3: adicionar o jogo ao Google Play Console

Crie uma entrada para o jogo no Google Play Console. Isso ativará os serviços relacionados a jogos do Google Play para seu app e criará um ID de cliente do OAuth 2.0, se você ainda não tiver feito isso.

  1. Para adicionar a entrada do seu jogo para iOS, siga as etapas descritas em Configuração dos serviços relacionados a jogos do Google Play.
  2. Anote o ID de cliente do OAuth 2.0 do seu jogo. Você precisará dele mais tarde.
  3. (Opcional) Para adicionar conquistas e placares ao seu jogo, siga as etapas descritas em Configuração de conquistas e placares de líderes.
  4. Caso queira adicionar contas para que outros membros da sua equipe possam testar o jogo, siga as etapas descritas em Publicação das mudanças em seu jogo.

Etapa 4: instalar os SDKs

Antes de usar as APIs dos serviços relacionados a jogos do Google Play, é preciso instalar as bibliotecas necessárias usando uma destas abordagens.

Opção 1: usar o CocoaPods

Use o CocoaPods, um gerenciador de dependências para instalar bibliotecas do Objective-C. Com o CocoaPods instalado, é possível usá-lo para instalar o SDK do Play Games para iOS seguindo estas etapas:

  1. Crie um Podfile e verifique se ele especifica uma plataforma do ios 7.0 ou posterior.
  2. Adicione o pod GooglePlayGames ao seu Podfile. Um podfile típico terá a seguinte aparência:

    platform :ios, '7.0'
    pod 'GooglePlayGames'
    // Other pods might go here
    
  3. Execute o comando pod install a partir da linha de comando.

  4. Abra o arquivo .xcworkspace gerado para seu app.

  5. Abra seu projeto no Xcode e continue na seção Adicionar botões de login e logout abaixo.

Opção 2: instalação manual

Para instalar o SDK do Play Games para iOS manualmente sem usar o CocoaPods, siga estas etapas:

  1. Faça o download e extraia o SDK do Login do Google mais recente na página de downloads do Login do Google.
  2. Copie para seu projeto os seguintes itens do SDK do Login do Google:
    • GoogleSignIn.bundle
    • GoogleSignIn.framework
  3. Faça o download e extraia o SDK do Google+ mais recente para iOS na página Downloads do Google+.
  4. Copie os seguintes itens do SDK do Google+ para o seu projeto:
    • GoogleOpenSource.framework
  5. Faça o download e extraia o SDK do Play Games para iOS. A versão mais recente está disponível na página de download de SDKs.
  6. Adicione os seguintes itens ao projeto do Xcode:
    • gpg.bundle
    • gpg.framework
  7. Abra as configurações do seu projeto. Na guia Build Phases, seção Link Binary With Libraries, clique no sinal de + e adicione os seguintes frameworks:
    • 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. Adicione a sinalização de vinculação ObjC às configurações de compilação desejadas do app. Nas configurações de compilação, selecione Build Settings > Linking > Other Linker Flags e adicione -ObjC como sinalização.

    Other Linker Flags: -ObjC
    

Etapa 5: adicionar botões de login e logout

No controlador de visualização, adicione botões de login e logout. O botão de login deve estar em conformidade com as diretrizes da promoção de marca do Login do Google. Para facilitar o desenvolvimento, muitas das interfaces de usuário integradas fornecidas pelos serviços relacionados a jogos do Google Play já incluem uma opção de logout, para que não seja preciso adicioná-la manualmente.

Para adicionar os botões de login e de logout:

  1. Com a tecla Ctrl pressionada, arraste esses dois botões para a categoria privada do arquivo .m do controlador de visualização (a seção contida por @interface). Isso criará objetos IBOutlet para esses botões.

    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UIButton *signInButton;
    @property (weak, nonatomic) IBOutlet UIButton *signOutButton;
    @end
    
  2. Em seguida, com a tecla Ctrl pressionada, arraste esses dois botões para a seção @implementation do arquivo .m do controlador de visualização. Isso criará os métodos a seguir para controlar quando o jogador pressiona o botão.

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

Etapa 6: importar o SDK do Play Games e ativar o login

  1. Importe o arquivo de cabeçalho GooglePlayGames. Dica: a maneira mais fácil de fazer isso é abrindo o arquivo .pch do seu app e adicionando a seguinte linha:

    #import <gpg/GooglePlayGames.h>
    

    Ao colocar essa instrução import no arquivo de cabeçalho pré-compilado do app, não será preciso importar esse cabeçalho em todos os outros arquivos.

  2. Defina o ID de cliente no arquivo .m do controlador de visualização ou em um arquivo de constantes separado. Essa é a string que você registrou anteriormente na seção "Adicionar o jogo ao Google Play Console".

    static NSString * const kClientID = @"123456789012.apps.googleusercontent.com";
    
  3. Adicione o código a seguir aos dois métodos buttonWasPressed que você criou anteriormente na seção "Adicionar botões de login e logout".

    - (IBAction)signInButtonWasPressed:(id)sender {
      [[GPGManager sharedInstance] signInWithClientID:kClientID silently:NO];
    }
    
    - (IBAction)signOutButtonWasPressed:(id)sender {
      [[GPGManager sharedInstance] signOut];
    }
    
  4. Quando um jogador faz login no Google, o processo de login ocorre em uma visualização da Web no seu jogo.

    1. Na guia Info das configurações desejadas, role para baixo até a seção URL Types e clique no ícone + para adicionar dois novos tipos de URL. Especifique duas strings únicas nos dois novos campos Identifier. No primeiro tipo de URL, especifique seu ID de cliente em ordem inversa à do campo URL Schemas. No segundo tipo de URL, especifique o identificador do pacote no campo URL Schemas. Para ver mais detalhes sobre como inserir essas informações, consulte o Guia de migração rápida do Login do Google.

      Gráfico que mostra os campos de identificador e esquemas de URL.

    2. No arquivo .m delegado do app, importe o framework do Login do Google.

      #import <GoogleSignIn/GoogleSignIn.h>
      
    3. Chame o manipulador de URL GIDSignIn do manipulador de URL do delegado do app. Esse método manipula o URL que seu app recebe ao final do processo de autenticação.

        [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];
      }
      

Agora você pode testar o aplicativo e conseguir fazer login e logout. Quando os testadores fizerem login, eles usarão uma visualização da Web no app para concluir o processo de login.

[GIDSignIn sharedInstance].uiDelegate = self;

Etapa 7: adicionar um GPGStatusDelegate

Em seguida, adicione o código para que seu app saiba quando o processo de login for concluído.

  1. Na categoria privada viewDidLoad, declare que seu controlador de visualização é um GPGStatusDelegate.

    @interface ViewController () <GPGStatusDelegate>
    
  2. Em seguida, informe a GPGManager que essa classe será a delegada de status dela. É possível fazer isso em várias partes do seu app (como em AppDelegate). O snippet a seguir mostra como fazer isso usando o método viewDidLoad para o controlador de visualização inicial:

    - (void)viewDidLoad {
      [super viewDidLoad];
      [GPGManager sharedInstance].statusDelegate = self;
    }
    
  3. Implemente estes métodos de GPGStatusDelegate: didFinishGamesSignInWithError (para controlar a conclusão do login do jogador) e didFinishGamesSignOutWithError (para controlar a conclusão do logout do jogador).

    - (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. Crie um método vazio para a chamada refreshInterfaceBasedOnSignIn.

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

    Agora, quando os testadores fizerem login ou logout, eles verão a mensagem adequada no registro do console.

  5. Preencha a implementação do método refreshInterfaceBasedOnSignIn. Use a propriedade isSignedIn do GPGManager para determinar que botão mostrar.

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

Agora, quando os testadores terminarem o login, o botão de login será ocultado. Quando eles fizerem logout, o botão de logout será ocultado e o de login aparecerá novamente.

Etapa 8: login automático de jogadores retornando

Você também pode fazer login dos jogadores automaticamente, para que eles não precisem realizar esse processo sempre que abrirem o jogo. O GPGManager fará login automático do jogador quando você especificar silently:YES no método signInWithClientID. Essa chamada será bem-sucedida se todas as condições a seguir forem atendidas:

  • O jogador autorizou seu aplicativo no passado.
  • O jogador não revogou o acesso ao seu aplicativo.
  • O aplicativo não solicita novos escopos desde o último login do jogador.

Com esse comportamento, é possível fazer o login automático do jogador adicionando a chamada signInWithClientID:silently: ao final do método viewDidLoad, com silently definido como YES.

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

Execute o aplicativo e observe que o login será feito automaticamente, a não ser que você tenha feito logout quando usou o app pela última vez.

Etapa 9: adicionar alguns ajustes de interface

Quando o aplicativo inicia o login do jogador automaticamente, há um pequeno atraso entre o momento em que o login inicia e termina. O jogo desativará a IU durante esse tempo. Para fazer isso, use o fato de que o método signInWithClientID:silently retornará YES se estiver tentando fazer login do jogador automaticamente.

  1. Primeiro, adicione uma variável de instância à classe do controlador de visualização para acompanhar se você está ou não fazendo login do jogador silenciosamente:

    @implementation ViewController {
        BOOL _silentlySigningIn;
    }
    
  2. Em seguida, use essa variável para registrar o que é retornado do método signInWithClientID:silently: e chame refreshInterfaceBasedOnSignIn imediatamente.

    - (void)viewDidLoad {
      [super viewDidLoad];
      [GPGManager sharedInstance].statusDelegate = self;
      _silentlySigningIn = [[GPGManager sharedInstance]
              signInWithClientID:kClientID silently:YES];
      [self refreshInterfaceBasedOnSignIn];
    }
    
  3. Adicione as seguintes linhas ao método refreshInterfaceBasedOnSignIn para desativar os botões de login e logout se o jogador estiver fazendo o login silenciosamente:

    self.signInButton.enabled = !_silentlySigningIn;
    self.signOutButton.enabled = !_silentlySigningIn;
    
  4. Por último, defina _silentlySigningIn como NO antes de chamar refreshInterfaceBasedOnSignIn nos dois 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];
    }
    

Agora, quando os testadores executarem o app, eles verão o botão de login, mas ele estará oculto durante o login automático. Quando o login inicial do jogador for concluído, o botão de login será ocultado e um botão de logout aparecerá.

Parabéns! Agora você já pode adicionar ao seu jogo conquistas, placares, missões e outros recursos dos serviços relacionados a jogos do Google Play.