MobileTeclado, input e câmera

Teclado, input e câmera

Peculiaridades de input nativo que a web nunca enfrenta. Estas são questões de configuração da shell (Capacitor + manifests nativos), documentadas aqui para que as telas se comportem de forma previsível.

O teclado deve redimensionar a view

Por padrão, o teclado virtual se sobrepõe à WebView, cobrindo os botões de ação de diálogos centralizados (por exemplo, modais de PIX, onde o botão OK desaparece). Corrija isso no nível da shell para que os diálogos se reposicionem acima do teclado.

  • O Keyboard.resize: 'native' do Capacitor redimensiona a WebView/janela quando o teclado aparece. 'body' não move diálogos com position: fixed; 'none' não faz nada.
  • O Android adicionalmente precisa de android:windowSoftInputMode="adjustResize" na activity principal para que o resize tenha efeito.

Regra prática: um diálogo centralizado com um input perto da base deve manter seu botão principal visível durante a digitação. Se não mantiver, o resize do teclado está mal configurado.

Câmera e leitura de QR

O leitor de QR do PIX acessa a câmera pela WebView (getUserMedia). O sistema operacional bloqueia a câmera por completo sem uma declaração de uso:

  • iOS: NSCameraUsageDescription no Info.plist.
  • Android: <uses-permission android:name="android.permission.CAMERA" /> (e um uses-feature opcional, não obrigatório).

Sem isso, o leitor falha silenciosamente no dispositivo. Não há nada a corrigir no código web.

Colar vs escanear

O leitor oferece dois pontos de entrada que devem permanecer distintos:

  • Escanear QR → abre a câmera (em um dispositivo) / campo de colagem (no desktop, sem câmera).
  • Colar / Colar → sempre abre o campo de colagem manual, nunca a câmera.

Um único handler de “abrir leitor” que decide câmera-vs-colagem puramente pelo dispositivo faz o botão de colar abrir a câmera nos celulares. Passe um forcePasteOnly explícito para a ação de colar.

PIX estático vs dinâmico

O parser suporta BR Codes estáticos (a chave PIX fica embutida no subcampo 26.01). Códigos dinâmicos “QR de cobrança” carregam uma URL no subcampo 26.25 e exigem buscar o payload assinado no PSP, o que ainda não é suportado, exibido como uma mensagem clara de “dinâmico não suportado” em vez de um erro genérico.

Higiene de input no nativo

  • Defina o inputMode / type correto para que o teclado certo apareça (decimal para dinheiro, email, tel).
  • Mantenha o botão de envio alcançável acima do teclado; confie no resize descrito acima em vez de gambiarras de scroll customizadas.
  • Use estados de pressão active:; não há hover no toque.