Aumentando a imersão do seu App com Haptic Feedback

Comunicação é a chave para muitas coisas. Seja em uma conversa com amigos para combinar algo, na reunião de trabalho para estabelecer entregas, ou até mesmo em Apps, para comunicar ao usuário o que está acontecendo.

Existem diversas formas de trazer este retorno ao usuário, como alertas sonoros ou uma boa tela apresentando visualmente a confirmação de uma ação. Mas você já se deparou com Apps que aparentam responder fisicamente através de uma simples vibração? Este recurso se chama Haptic Feedback.

Haptic Feedback

Haptic Feedback é o recurso que possibilita trazer um retorno físico (e as vezes até sonoro) ao usuário, para comunicar determinado acontecimento no App de acordo com a ação estabelecida.

Exemplos

Ao baixar um aplicativo na App Store, é possível utilizar o FaceID ou a biometria para realizar uma aquisição. Perceba que existem 2 momentos.

  1. Quando o FaceID/Biometria é requisitado:
Imagem com Face ID requisitado para confirmar a compra do App na App Store.

2. Momento de confirmação destes dados:

Imagem com Face ID confirmado, concluindo a etapa de verificação de dados.

Ao aparecer “OK”, uma breve vibração acontece, parecendo que o próprio celular disse “OK”. Isso aumenta a imersão do usuário e deixa mais claro que algo de fato aconteceu.

Como utilizar?

Certo, muito legal tudo isso de imersão, mas como aplicar isso em seu projeto? Por incrível que pareça, é muito simples! Primeiramente, é preciso saber qual feedback passar para o usuário. Para isso, confira o HIG a respeito de Haptics, disponibilizado pela Apple. Após escolher, com poucas linhas de código já teremos resultado. Para facilitar a criação de botões, criei um projeto utilizando Storyboard.

Agora iremos para o passo-a-passo. Adicione um botão na tela do Storyboard utilizando o atalho Command + Shift + L em seu Xcode:

Imagem que representa o botão encontrando com o atalho dito.

No canto direito da tela, abra o Attributes Inspector e troque o Background do botão (apenas para facilitar a visualização mesmo). Caso queira, logo abaixo de Background há o Tint, para mudar a cor do texto.

Imagem que apresenta em qual local da tela se encontram as opções de Background em Attribute Inspector

Agora que temos nosso botão na tela, precisamos inseri-lo no código. Para isso, clique Add Editor on Right. Dessa forma, poderemos ver o Storyboard e o código ao mesmo tempo. “Add Editor on Right” é o botão no canto superior direito do Xcode, abaixo do “+”:

Imagem para mostrar onde o Add Editor on Right está localizado.

Excelente! Agora… temos 2 Storyboards na tela?! Ok, basta clicarmos no Arquivo ao qual nossa View Controller está atrelada. Após isso, teremos 2 ambientes de trabalho:

Imagem para mostrar aparência do Xcode com tela dividida.

É muito importante que tenha selecionado o arquivo correto. Mas, como saber qual é o arquivo correto? Basta ver a qual classe a tela do Storyboard está ligada, e onde essa classe se encontra. Veja clicando no botão de View Controller do Storyboard, acima da tela que você está configurando, e em seguida veja a classe na área de Custom Class do Show the Identity Inspector.

Para atrelar o botão criado ao código, clique e segure no botão criado utilizando também a tecla Control e arraste para o código.

Imagem demosntrando a passagem do Storyboard pro Código.

Logo em seguida, aparecerá o campo de informações deste botão. Deixei o nome de FeedbackButton para facilitar a interpretação. É muito importante que deixe Connection como Action, Object sendo View Controller, Type Any e Arguments Sender. Por fim, clique em Connect para finalizar essa conexão.

Imagem apresentando campo de informações da conexão.

Excelente! Agora podemos mexer em nosso botão através do código. Nossa classe ViewController agora possui uma @IBAction func do nosso botão:

class ViewController: UIViewController {   override func viewDidLoad() {     super.viewDidLoad()     // Do any additional setup after loading the view.   }   //Botão do Storyboard  @IBAction func FeedbackButton(_ sender: Any) {  }}

Agora, tudo irá depender de qual feedback deseja passar. Existe o Notification Feedback, Impact Feedback e Selection Feedback. Lembre-se do HIG dito anteriormente. Farei com as 3 possibilidades. De qualquer forma, já podemos fechar a aba do Storyboard, pois iremos trabalhar apenas com código.

Notification Feedback

Crie uma let que seja igual a UINotificationFeedbackGenerator, para que seja possível atribuir a ela qual tipo de notificação ocorreu, podendo ser (.success), (.error) ou (.warning).

@IBAction func FeedbackButton(_ sender: Any) {  //criar let do tipo UINotificationFeedbackGenerator  let generator = UINotificationFeedbackGenerator()
//atribuir qual tipo de notificação será apresentada generator.notificationOccurred(.success) //.success, .error ou .warning}

Impact Feedback

Crie uma let igual a UIImpactFeedbackGenerator e diga qual o estilo do impacto esperado, podendo ser .heavy, .medium e .light. Em seguida, é preciso realizar um prepare, preparando nossa let para acionar o impacto. Por fim, acione o feedback com impactOcurred.

@IBAction func FeedbackButton(_ sender: Any) {  //criar let do tipo UINotificationFeedbackGenerator  let generator = UIImpactFeedbackGenerator(style: .heavy) //.heavy,     .medium ou .light
//preparar para dar o feedback generator.prepare()
//acionar o impacto desejado generator.impactOccurred()}

Selection Changed

Crie uma let igual a UISelectionFeedbackGenerator e em seguida, atribua o selectionChanged para acionar o Feedback de mudança de seleção.

@IBAction func FeedbackButton(_ sender: Any) {
//criar nossa let do tipo UISelectionFeedbackGenerator let generator = UISelectionFeedbackGenerator()
//aciona feedback de seleção generator.selectionChanged()}

Vale lembrar que este recurso não funciona no simulador do Xcode. Teste em seu dispositivo físico.

Simples e rápido! Particularmente, este é um dos recursos que mais utilizo no desenvolvimento de Apps, pois é muito tranquilo de implementar, e traz um diferencial enorme para experiência do usuário!

Referências

https://developer.apple.com/design/human-interface-guidelines/patterns/playing-haptics/

https://developer.apple.com/documentation/corehaptics

https://www.youtube.com/watch?v=kUBpgFmVdNU

--

--