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 composition: 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:
NSCameraUsageDescriptionnoInfo.plist. - Android:
<uses-permission android:name="android.permission.CAMERA" />(e umuses-featureopcional, 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/typecorreto para que o teclado certo apareça (decimalpara 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.