# Correção para Abertura de Aplicativos Externos no Android ## Problema Identificado No Android, quando o usuário clicava nos botões de WhatsApp e Waze, recebia as mensagens: - "Erro não foi possível abrir o aplicativo" - "Erro Não foi possível abrir o WhatsApp" ## Causa do Problema O Android 11+ introduziu restrições mais rigorosas para abrir aplicativos externos através do sistema de "Package Visibility". A partir desta versão, os apps precisam declarar explicitamente quais aplicativos externos podem ser abertos. ## Soluções Implementadas ### 1. Atualização do AndroidManifest.xml Adicionadas as seguintes configurações no `android/app/src/main/AndroidManifest.xml`: ```xml ``` ### 2. Melhoria nas Funções de Abertura de Apps #### WhatsApp (`openWhatsApp`) - **URLs mais abrangentes**: Adicionadas múltiplas variações de URLs - **Protocolos alternativos**: Incluídos `intent://` para Android - **Fallback para Play Store**: Se o app não estiver instalado, oferece instalação - **Timeout**: Implementado timeout de 5 segundos para evitar travamentos ```typescript const whatsappUrls = [ // URLs com protocolo whatsapp:// (mais confiáveis) `whatsapp://send?phone=${cleanNumber}&text=${encodeURIComponent(message)}`, `whatsapp://send?phone=${cleanNumber.replace('+', '')}&text=${encodeURIComponent(message)}`, // URLs com https://wa.me/ (fallback web) `https://wa.me/${cleanNumber.replace('+', '')}?text=${encodeURIComponent(message)}`, `https://wa.me/${cleanNumber}?text=${encodeURIComponent(message)}`, // URLs alternativas para Android `intent://send/${cleanNumber.replace('+', '')}#Intent;scheme=smsto;package=com.whatsapp;S.sms_body=${encodeURIComponent(message)};end`, `intent://send/${cleanNumber}#Intent;scheme=smsto;package=com.whatsapp;S.sms_body=${encodeURIComponent(message)};end`, // URLs com formato mais simples `whatsapp://send?phone=${cleanNumber.replace('+', '')}`, `whatsapp://send?phone=${cleanNumber}`, ]; ``` #### Navegação (`openNavigationApp`) - **Múltiplas URLs por app**: Cada app de navegação tem várias opções de URL - **Protocolos específicos**: `waze://`, `geo:`, `maps://` - **Intent URLs**: URLs com formato `intent://` para Android - **Fallback inteligente**: Se o app não estiver instalado, oferece instalação ```typescript // Exemplo para Waze urls = [ // URLs com protocolo waze:// (mais confiáveis) `waze://?q=${encodedAddress}&navigate=yes`, `waze://?ll=${latitude},${longitude}&navigate=yes`, // URLs com https://waze.com/ (fallback web) `https://waze.com/ul?q=${encodedAddress}&navigate=yes`, `https://waze.com/ul?ll=${latitude},${longitude}&navigate=yes`, // URLs com intent:// para Android `intent://waze.com/ul?q=${encodedAddress}&navigate=yes#Intent;scheme=https;package=com.waze;end`, `intent://waze.com/ul?ll=${latitude},${longitude}&navigate=yes#Intent;scheme=https;package=com.waze;end`, ]; ``` ### 3. Tratamento de Erros Melhorado - **Timeout**: Implementado timeout de 5 segundos para evitar travamentos - **Fallback para Play Store**: Se o app não estiver instalado, oferece instalação - **Logs detalhados**: Logs para debug de cada tentativa - **Alertas informativos**: Mensagens claras para o usuário ### 4. Correção de Linter - **Propriedades faltantes**: Adicionadas `latFrom` e `lngFrom` no tipo `Delivery` - **Compatibilidade**: Garantida compatibilidade com a interface `Delivery` ## Como Testar ### 1. Build de Produção ```bash npx expo run:android --variant release ``` ### 2. Cenários de Teste - **WhatsApp instalado**: Deve abrir o WhatsApp com a mensagem - **WhatsApp não instalado**: Deve oferecer instalação na Play Store - **Waze instalado**: Deve abrir o Waze com a rota - **Waze não instalado**: Deve oferecer instalação na Play Store - **Google Maps**: Deve abrir o Google Maps com a rota ### 3. Logs de Debug Os logs detalhados ajudarão a identificar qual URL funcionou: ``` === DEBUG: ABRINDO WHATSAPP === Número original: +55 91 99999-9999 Número formatado: +5591999999999 URLs para tentar: [...] Tentativa 1: whatsapp://send?phone=+5591999999999&text=... URL 1 suportada: whatsapp://send?phone=+5591999999999&text=... ``` ## Compatibilidade - ✅ Android 11+ - ✅ Android 10 e anteriores - ✅ iOS (mantida compatibilidade) - ✅ Expo SDK 53 ## Referências - [Android Package Visibility](https://developer.android.com/training/package-visibility) - [React Native Linking](https://reactnative.dev/docs/linking) - [WhatsApp Business API](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/phone-numbers) - [Waze URL Scheme](https://developers.google.com/waze/deep-links)