Siri Remote e Bluetooth Controllers para tvOS no Xamarin

Os usuários do seu aplicativo Xamarin.tvOS não interagirão com sua interface diretamente, como no iOS, onde tocam em imagens na tela do dispositivo, mas indiretamente do outro lado da sala usando o Siri Remote.

Se o seu aplicativo for um jogo, você também poderá criar suporte para controladores de jogo Bluetooth Made For iOS (MFI) 3rd party em seu aplicativo.

O controle remoto Bluetooth e o controle de jogo

Este artigo descreve os botões Siri Remote, Touch Surface Gestures e Siri Remote e mostra como trabalhar com eles por meio de gestos e storyboards, gestos e código e manipulação de eventos de baixo nível. Finalmente, ele discute Trabalhando com controladores de jogo em um aplicativo Xamarin.tvOS.

O controle remoto Siri

A principal maneira que os usuários estarão interagindo com a Apple TV, e seu aplicativo Xamarin.tvOS, é através do Siri Remote incluído. A Apple projetou o controle remoto para diminuir a distância entre o usuário sentado no sofá e a interface do usuário da Apple TV exibida em toda a sala na tela da TV.

Seu desafio como desenvolvedor de aplicativos tvOS é criar uma interface de usuário rápida, fácil de usar e visualmente atraente que aproveita a superfície de toque, o acelerômetro, o giroscópio e os botões do Siri Remote.

O controle remoto Siri

O Siri Remote tem os seguintes recursos e usos esperados em seu aplicativo tvOS:

Recurso Uso geral do aplicativo Uso do aplicativo de jogo
Superfície tátil
Passe o dedo para navegar, pressione para selecionar e segure para menus contextuais.
Toque/Deslize
Navegação da interface do usuário entre itens focalizáveis.

Clicar
Ativa o item selecionado (em foco).
Toque/Deslize
Depende do design do jogo e pode ser usado como um D-Pad tocando nas bordas.

Clicar
Execute a função de botão principal.
Menu
Pressione para retornar à tela ou menu anterior.
Retorna à tela anterior e sai para a tela inicial da Apple TV na tela principal do aplicativo. Pause e retome a jogabilidade, retorne à tela anterior e saia para a tela inicial da Apple TV na tela principal do aplicativo.
Siri/Pesquisa
Em países com Siri, pressione e segure para o controle de voz, em todos os outros países, exibe a tela de pesquisa.
N/D N/D
Reproduzir/Pausar
Reproduzir e pausar mídia ou fornece uma função secundária em aplicativos.
Inicia a reprodução de mídia e pausa/retoma a reprodução. Executa a função de botão secundário ou ignora o vídeo de introdução (se existir).
Início
Pressione para retornar à tela inicial, clique duas vezes para exibir aplicativos em execução, pressione e segure o dispositivo de suspensão.
N/D N/D
Volume
Controla o volume do equipamento de áudio/vídeo anexado.
N/D N/D

Gestos de toque no Surface

O Touch Surface do Siri Remote é capaz de detectar uma variedade de gestos com um único dedo que você pode responder em seu aplicativo Xamarin.tvOS:

Passar o dedo Clique Toque
Move a seleção Ativa o item selecionado Botões direcionais
Move a seleção (foco) entre os elementos da interface do usuário na tela (para cima, para baixo, para a esquerda, para a direita). O gesto de percorrer pode ser usado para percorrer grandes listas de conteúdo rapidamente usando a inércia. Ativa o item selecionado (em foco) ou age como o botão principal em um jogo. Clicar e segurar pode ativar menus contextuais ou funções secundárias. Tocar levemente na superfície de toque nas bordas funciona como botões direcionais em um D-Pad, movendo o foco para cima, para baixo, para a esquerda ou para a direita, dependendo da área tocada. Dependendo do aplicativo, pode ser usado para revelar controles ocultos.

A Apple fornece as seguintes sugestões para trabalhar com gestos do Touch Surface:

  • Diferenciar entre Cliques e Toques - Clicar é uma ação intencional do usuário e é bem adequado para seleção, ativação e o botão principal de um jogo. O toque é mais sutil e deve ser usado com moderação porque o usuário geralmente está segurando o Siri Remote na mão e pode ativar acidentalmente um evento Tap facilmente.
  • Não redefinir gestos padrão - O usuário tem uma expectativa de que gestos específicos executarão ações específicas, você não deve redefinir o significado ou a função desses gestos em seu aplicativo. A única exceção é um aplicativo de jogo durante o jogo ativo.
  • Definir novos gestos com moderação - Novamente, o usuário tem uma expectativa de que gestos específicos executarão ações específicas. Você deve evitar definir gestos personalizados para executar ações padrão. E, novamente, os jogos são a exceção mais comum, onde gestos personalizados podem adicionar diversão e imersão ao jogo.
  • Se apropriado, Responder a toques do D-Pad - Tocar levemente nas bordas dos cantos do Touch Surface reagirá como um D-Pad em um controle de jogo movendo o foco ou a direção para cima, para baixo, para a esquerda ou para a direita. Se apropriado, você deve responder a esses gestos em seu aplicativo ou jogo.

Botões do Siri Remote

Além dos gestos no Touch Surface, a sua aplicação pode responder ao utilizador a clicar no Touch Surface ou a premir o botão Reproduzir/Pausar. Se você estiver acessando o Siri Remote usando o Game Controller Framework, também poderá detectar o botão Menu sendo pressionado.

Além disso, os pressionamentos de botão de menu podem ser detectados usando um Reconhecedor de Gestos com elementos padrão UIKit . Se você interceptar o botão Menu que está sendo pressionado, você será responsável por fechar o View and View Controller atual e retornar ao anterior.

Importante

Você deve sempre atribuir uma função ao botão Reproduzir/Pausar no controle remoto. Ter um botão não funcional pode fazer com que seu aplicativo pareça quebrado para o usuário final. Se não tiver uma função válida para este botão, atribua a mesma função que o botão principal (toque em Clique no Surface).

Gestos e Storyboards

A maneira mais fácil de trabalhar com o Siri Remote em seu aplicativo Xamarin.tvOS é adicionar Reconhecedores de Gestos às suas exibições no Designer de Interface.

Para adicionar um Reconhecedor de Gestos, faça o seguinte:

  1. No Gerenciador de Soluções, clique duas vezes no arquivo e abra-o Main.storyboard para editar o Designer de Interface.

  2. Arraste um Reconhecedor de gestos de toque da Biblioteca e solte-o na Exibição:

    Um reconhecedor de gestos de toque

  3. Marque Selecionar na seção Botão do Inspetor de Atributos:

    Verificar Selecione

  4. Selecionar significa que o gesto responderá ao usuário clicando no Touch Surface no Siri Remote. Você também tem a opção de responder aos botões Menu, Play/Pause, Up, Down, Left e Right .

  5. Em seguida, conecte uma Ação do Reconhecedor de gestos de toque e chame-a:TouchSurfaceClicked

    Uma ação do Reconhecedor de gestos de toque

  6. Salve suas alterações e retorne ao Visual Studio para Mac.

Edite o arquivo View Controller (exemplo FirstViewController.cs) e adicione o seguinte código para manipular o gesto que está sendo disparado:

using System;
using UIKit;

namespace tvRemote
{
    public partial class FirstViewController : UIViewController
    {
        ...

        #region Custom Actions
        partial void TouchSurfaceClicked (Foundation.NSObject sender) {
            // Handle click here
            ...
        }
        #endregion
    }
}

Para obter mais informações sobre como trabalhar com Storyboards, consulte nosso Guia de Início Rápido Olá, tvOS. Especificamente as seções Criando a interface do usuário e Escrevendo o código com saídas e ações .

Gestos e Código

Opcionalmente, você pode criar gestos diretamente no código C# e adicioná-los a exibições em sua interface do usuário. Por exemplo, para adicionar uma série de Reconhecedores de gestos de passar o dedo, edite o controlador de exibição e adicione o seguinte código:

using System;
using UIKit;

namespace tvRemote
{
    public partial class SecondViewController : UIViewController
    {
        #region Constructors
        public SecondViewController (IntPtr handle) : base (handle)
        {
        }
        #endregion

        #region Override Methods
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            // Wire-up gestures
            var upGesture = new UISwipeGestureRecognizer (() => {
                RemoteView.ArrowPressed = "Up";
                ButtonLabel.Text = "Swiped Up";
            }) {
                Direction = UISwipeGestureRecognizerDirection.Up
            };
            this.View.AddGestureRecognizer (upGesture);

            var downGesture = new UISwipeGestureRecognizer (() => {
                RemoteView.ArrowPressed = "Down";
                ButtonLabel.Text = "Swiped Down";
            }) {
                Direction = UISwipeGestureRecognizerDirection.Down
            };
            this.View.AddGestureRecognizer (downGesture);

            var leftGesture = new UISwipeGestureRecognizer (() => {
                RemoteView.ArrowPressed = "Left";
                ButtonLabel.Text = "Swiped Left";
            }) {
                Direction = UISwipeGestureRecognizerDirection.Left
            };
            this.View.AddGestureRecognizer (leftGesture);

            var rightGesture = new UISwipeGestureRecognizer (() => {
                RemoteView.ArrowPressed = "Right";
                ButtonLabel.Text = "Swiped Right";
            }) {
                Direction = UISwipeGestureRecognizerDirection.Right
            };
            this.View.AddGestureRecognizer (rightGesture);
        }
        #endregion
    }
}

Tratamento de eventos de baixo nível

Se você estiver criando um tipo personalizado com base em UIKit seu aplicativo Xamarin.tvOS (por exemplo UIView), você também tem a capacidade de fornecer manipulação de baixo nível de pressionamento de botão por meio UIPress de eventos.

Um UIPress evento é para tvOS o que um UITouch evento é para iOS, exceto UIPress retorna informações sobre pressionamentos de botão no Siri Remote ou em outros dispositivos Bluetooth conectados (como um Game Controller). UIPress eventos descrevem o botão que está sendo pressionado e seu estado (Iniciado, Cancelado, Alterado ou Encerrado).

Para botões analógicos em dispositivos como Bluetooth Game Controllers, UIPress também retorna a quantidade de força que está sendo aplicada ao botão. A Type propriedade do UIPress evento define qual botão físico alterou o estado, enquanto o restante das propriedades descreve a alteração que ocorreu.

O código a seguir mostra um exemplo de manipulação de eventos de baixo nível UIPress para um UIView:

using System;
using Foundation;
using UIKit;

namespace tvRemote
{
    public partial class EventView : UIView
    {
        #region Computed Properties
        public override bool CanBecomeFocused {
            get {
                return true;
            }
        }
        #endregion

        #region
        public EventView (IntPtr handle) : base (handle)
        {
        }
        #endregion

        #region Override Methods
        public override void PressesBegan (NSSet<UIPress> presses, UIPressesEvent evt)
        {
            base.PressesBegan (presses, evt);

            foreach (UIPress press in presses) {
                // Was the Touch Surface clicked?
                if (press.Type == UIPressType.Select) {
                    BackgroundColor = UIColor.Red;
                }
            }
        }

        public override void PressesCancelled (NSSet<UIPress> presses, UIPressesEvent evt)
        {
            base.PressesCancelled (presses, evt);

            foreach (UIPress press in presses) {
                // Was the Touch Surface clicked?
                if (press.Type == UIPressType.Select) {
                    BackgroundColor = UIColor.Clear;
                }
            }
        }

        public override void PressesChanged (NSSet<UIPress> presses, UIPressesEvent evt)
        {
            base.PressesChanged (presses, evt);
        }

        public override void PressesEnded (NSSet<UIPress> presses, UIPressesEvent evt)
        {
            base.PressesEnded (presses, evt);

            foreach (UIPress press in presses) {
                // Was the Touch Surface clicked?
                if (press.Type == UIPressType.Select) {
                    BackgroundColor = UIColor.Clear;
                }
            }
        }
        #endregion
    }
}

Assim como acontece com UITouch os eventos, se você precisar implementar qualquer uma das substituições de UIPress evento, deverá implementar todas as quatro.

Controladores de jogo Bluetooth

Além do Siri Remote padrão que acompanha a Apple TV, os controladores de jogos Bluetooth Made For iOS (MFI) podem ser emparelhados com a Apple TV e usados para controlar o aplicativo Xamarin.tvOS.

Controladores de jogo Bluetooth

Os Controladores de Jogo podem ser usados para melhorar a jogabilidade e proporcionar uma sensação de imersão em um jogo. Eles também podem ser usados para controlar a interface padrão da Apple TV para que o uso não precise alternar entre o controle remoto e o controle.

Importante

Os Controladores de Jogos Bluetooth são uma compra opcional que os usuários finais podem fazer, seu aplicativo não pode forçar o usuário a comprar um. Se o seu aplicativo for compatível com Controladores de Jogo, ele também deverá suportar o Siri Remote para que o jogo possa ser usado por todos os usuários da Apple TV.

Um Controlador de Jogo tem os seguintes recursos e usos esperados em seu aplicativo tvOS:

Recurso Uso geral do aplicativo Uso do aplicativo de jogo
D-Almofada Navega pelos elementos da interface do usuário (altera o foco). Depende do jogo.
A Ativa o item selecionado (em foco). Executa a função de botão principal e confirma as ações da caixa de diálogo.
B Retorna à tela anterior ou sai para a tela inicial se estiver na tela principal do aplicativo. Executa a função de botão secundário ou retorna à tela anterior.
X Inicia a reprodução de mídia ou pausa/retoma a reprodução. Depende do jogo.
Y N/D Depende do jogo.
Menu Retorna à tela anterior ou sai para a tela inicial se estiver na tela principal do aplicativo. Pausar/retomar a jogabilidade, retornar à tela anterior ou sair para a tela inicial se estiver na tela principal do aplicativo.
Botão do ombro esquerdo Navega para a esquerda. Depende do jogo.
Gatilho esquerdo Navega para a esquerda. Depende do jogo.
Botão do ombro direito Navega à direita. Depende do jogo.
Gatilho direito Navega à direita Depende do jogo.
Polegar esquerdo Navega pelos elementos da interface do usuário (altera o foco). Depende do jogo.
Polegar direito N/D Depende do jogo.

A Apple fornece as seguintes sugestões para trabalhar com controladores de jogos:

  • Confirme as conexões do Game Controller - Seu aplicativo tvOS pode ser iniciado e interrompido a qualquer momento pelo usuário final. Você deve sempre verificar a presença de um Controlador de Jogo nos horários de início ou vigília do aplicativo e tomar as medidas necessárias.
  • Certifique-se de que seu aplicativo funcione no Siri Remote e nos Controladores de Jogo - Não exija que os usuários alternem entre o Siri Remote e um Game Controller para usar seu aplicativo. Teste seu aplicativo com frequência com ambos os tipos de controladores, garantindo que tudo seja fácil de navegar e funcione conforme o esperado.
  • Fornecer um caminho de volta - Pressionar o botão Menu deve sempre retornar à tela anterior. Se o usuário estiver na tela principal do aplicativo, o botão Menu deve retorná-lo à tela inicial da Apple TV. Durante o jogo, o botão Menu deve exibir um alerta dando ao usuário a capacidade de pausar/retomar a jogabilidade ou retornar ao menu principal.

Trabalhando com controladores de jogos

Como dito acima, além do Siri Remote padrão que acompanha a Apple TV, o usuário pode opcionalmente anexar um 3rd party, Made For iOS (MFI) Bluetooth Game Controllers e usá-lo para controlar seu aplicativo Xamarin.tvOS.

Se o seu aplicativo exigiu entrada de controlador de baixo nível, você pode usar o Game Controller Framework da Apple, que tem as seguintes modificações para tvOS:

  • O perfil do Micro Game Controller (GCMicroGamepad) foi adicionado para direcionar o Siri Remote.
  • A nova GCEventViewController classe pode ser usada para rotear eventos do controlador de jogo por meio de seu aplicativo. Consulte a seção Determinando a entrada do controlador de jogo abaixo para obter mais detalhes.

Requisitos de suporte do controlador de jogo

A Apple tem vários requisitos específicos que devem ser atendidos se o aplicativo Xamarin.tvOS for compatível com Controladores de Jogos:

  • Você deve suportar o Siri Remote - Você deve sempre suportar o Siri Remote. Seu jogo não pode exigir um Controlador de Jogo 3rd party para ser jogável.
  • Você deve oferecer suporte ao layout de controle estendido - Todos os controladores de jogo do tvOS são controladores estendidos não conformes.
  • Os jogos devem ser jogáveis com controles autônomos - Se seu aplicativo oferecer suporte a um Controlador de Jogo Estendido, ele deverá ser jogável somente com esse Controlador de Jogo.
  • Você deve suportar o botão Reproduzir/Pausar - Durante o jogo, se o usuário pressionar o botão Reproduzir/Pausar, você deve exibir um alerta dando ao usuário a capacidade de pausar/retomar a jogabilidade ou retornar ao menu principal.

Ativando o suporte ao controlador de jogo

Para habilitar o suporte ao Game Controller em seu aplicativo Xamarin.tvOS, clique duas vezes no Info.plist arquivo no Gerenciador de Soluções para abri-lo para edição:

O editor Info.plist

Na seção Controlador de Jogo, marque Ativar Controladores de Jogo e verifique todos os tipos de Controlador de Jogo que serão suportados pelo aplicativo.

Usando o Siri Remote como um controlador de jogo

O Siri Remote que vem com a Apple TV pode ser usado como um controlador de jogo limitado. Como outros Controladores de Jogo, ele aparece no Game Controller Framework como um GCController objeto e suporta os GCMotion perfis e os GCMicroGamepad perfis.

O Siri Remote tem as seguintes características ao ser usado como um controlador de jogo:

  • O Touch Surface pode ser usado como um D-pad que fornece dados de entrada analógica.
  • O controle remoto pode ser usado em uma orientação retrato ou paisagem e seu aplicativo decide se o objeto de perfil deve inverter os dados de entrada automaticamente.
  • Clicar no Touch Surface é como premir o botão A num Comando de Jogo.
  • O botão Reproduzir/Pausar funciona como o botão X em um Controlador de Jogo.
  • O botão Menu deve exibir um alerta dando ao usuário a capacidade de pausar/retomar a jogabilidade ou retornar ao menu principal.

Determinando a entrada do controlador de jogo

Ao contrário do iOS, onde os eventos do Game Controller podem ser recebidos em paralelo com os eventos Touch, o tvOS processa todos os eventos de baixo nível para entregar eventos de alto nível UIKit . Como resultado, se você precisar acessar os eventos do Game Controller de baixo nível, precisará desativar UIKito comportamento padrão do .

No tvOS, quando você deseja processar a entrada do Game Controller diretamente, você precisa usar uma GCEventViewController (ou uma subclasse) para exibir a Interface do Usuário do jogo. Sempre que um for o Primeiro Respondente, a entrada do Controlador de GCEventViewController Jogo será capturada e entregue ao seu aplicativo por meio da Estrutura do Controlador de Jogo.

Você pode usar a UserInteractionEnabled propriedade da classe para alternar como os GCEventViewController eventos são processados e manipulados.

Para obter informações sobre como implementar o suporte ao Game Controller, consulte a seção Trabalhando com controladores de jogo da Apple no Guia de programação de aplicativos para tvOS e Guia de programação de controladores de jogos.

Resumo

Este artigo abordou o novo Siri Remote que acompanha os botões Apple TV, Touch Surface e Siri Remote. Em seguida, abordou o trabalho com gestos e Storyboards, gestos e código e eventos de baixo nível. Finalmente, se discutido o trabalho com controladores de jogo.