Partilhar: WhatsApp
aulify · Sebenta
UC · Unidade de Competência · UC02210

Criar e desenvolver conteúdos para dispositivos móveis

Sebenta · Design mobile-first, performance, notificações e testes
25h · 2.25 pontos crédito Curso: T. Multimédia ↗ Referencial oficial SNQ
Índice

Apresentação

UC02210 (25h) capacita os formandos para criar conteúdos digitais optimizados para dispositivos móveis — desde os princípios de design e escrita até à performance técnica, notificações push e processos de teste. O mobile é hoje o contexto principal de consumo de conteúdo digital em Portugal e no mundo.


1. Design para mobile

1.1 A thumb zone

O polegar é o principal ponto de contacto com um smartphone segurado com uma mão. O design mobile-first deve considerar quais as zonas do ecrã mais e menos acessíveis ao polegar.

Mapeamento de zonas:

O ecrã de um smartphone médio divide-se em três zonas de acessibilidade quando segurado com a mão direita:

Estudos de comportamento: pesquisas da UX designer Hoober (2017) mostram que mais de 75% dos utilizadores seguram o telefone com uma mão na maioria do tempo. O design deve assumir uso a uma mão como caso base.

Implicações práticas: - Navigation bar no fundo do ecrã (iOS pattern) em vez de tab bar no topo. - CTA principal na metade inferior do ecrã. - Acções destrutivas (eliminar, sair) longe da zona de polegar natural.

1.2 Touch targets

Tamanho mínimo: os guias de estilo das duas plataformas principais definem tamanhos mínimos diferentes mas próximos: - Apple Human Interface Guidelines: 44 × 44 pt (pontos CSS). - Google Material Design: 48 × 48 dp (density-independent pixels).

Na prática: 44-48px é o mínimo absoluto para qualquer elemento interactivo (botão, link, ícone). Elementos mais pequenos causam erros de toque e frustração.

Espaçamento entre targets: pelo menos 8px entre elementos interactivos adjacentes para evitar activação acidental.

Exemplo em CSS:

.btn-mobile {
  min-height: 44px;
  min-width: 44px;
  padding: 12px 20px;
  /* Não usar padding < 8px em botões mobile */
}

1.3 Viewport e responsive

Viewport meta tag:

<meta name="viewport" content="width=device-width, initial-scale=1">

Sem esta tag, o browser mobile renderiza a página como se fosse um desktop de 980px (ou similar) e depois faz zoom out para caber no ecrã. O resultado é texto ilegível e elementos minúsculos.

Breakpoints comuns (CSS):

/* Mobile first: estilos base para mobile */
.container { width: 100%; padding: 0 16px; }

/* Tablet */
@media (min-width: 768px) {
  .container { max-width: 960px; padding: 0 24px; }
}

/* Desktop */
@media (min-width: 1024px) {
  .container { max-width: 1200px; }
}

Mobile-first approach: escrever primeiro os estilos para mobile, depois adicionar media queries para viewport maior. O inverso (desktop-first) resulta em CSS mais complexo e frequentemente em problemas de performance em mobile.

1.4 Gestos

Os gestos são o "vocabulário" da interacção mobile. Os padrões estabelecidos pelo iOS e Android criaram expectativas universais.

Gestos standard: - Tap: equivalente ao clique. Activar um elemento. - Double tap: zoom in (Safari, Maps) ou like (Instagram). - Long press: revelar menu de contexto ou acções adicionais. - Swipe horizontal: navegar entre ecrãs/tabs, dismissar notificações, carousel. - Swipe vertical: scroll de página ou lista; puxar para refrescar (pull to refresh). - Pinch: zoom in/out em mapas e imagens. - Swipe up from bottom: home gesture em iOS (substitui o botão home).

Affordances: o utilizador deve ter pistas visuais de que um elemento é deslizável ou tem gesto associado. Indicators de swipe (dots de paginação, bordas visíveis de conteúdo fora do ecrã).


2. Apps vs PWA vs responsive web

2.1 Responsive Web

O website responsivo adapta-se a todos os tamanhos de ecrã usando CSS flexível e media queries.

Quando é suficiente: a maioria dos projectos. Conteúdo informativo, portfolios, blogs, lojas online simples, websites corporativos.

Vantagens: - URL único, partilhável. - SEO completo — indexável pelos motores de busca. - Actualizações imediatas (não precisa de aprovação de app store). - Um único código para todos os dispositivos. - Custo de desenvolvimento mais baixo.

Limitações: - Sem acesso a câmara (limitado), GPS (API disponível mas limitada), sensores. - Sem push notifications (sem PWA ou serviço externo). - Sem funcionamento offline. - Não aparece na App Store/Play Store por defeito.

2.2 PWA (Progressive Web App)

Uma PWA é um website que usa um conjunto de tecnologias web modernas para se comportar como uma app nativa.

Tecnologias-chave: - Service Worker: script JavaScript que corre em background, gere cache e permite funcionamento offline. - Web App Manifest: ficheiro JSON que define ícone, nome, cor de tema e modo de exibição da app quando instalada. - HTTPS: obrigatório para Service Workers.

Capacidades de uma PWA: - Instalável no ecrã inicial (Add to Home Screen). - Cache de recursos para funcionamento offline ou em rede fraca. - Push notifications (suporte completo desde iOS 16.4 Safari, 2023). - Acesso a câmara, microfone, GPS, acelerómetro via APIs web. - Background sync (sincroniza dados quando a rede volta).

Exemplo de Web App Manifest (manifest.json):

{
  "name": "Sabores da Terra",
  "short_name": "SaboresTerra",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#2d7a2d",
  "icons": [
    { "src": "icon-192.png", "sizes": "192x192", "type": "image/png" },
    { "src": "icon-512.png", "sizes": "512x512", "type": "image/png" }
  ]
}

2.3 App nativa

Desenvolvida especificamente para uma plataforma: Swift/SwiftUI para iOS, Kotlin/Jetpack Compose para Android. Ou cross-platform com React Native ou Flutter.

Quando é necessária: - Acesso profundo ao hardware (Bluetooth LE, NFC, sensores específicos). - Performance muito alta (jogos, realidade aumentada, processamento intensivo). - Presença na App Store/Google Play como canal de descoberta. - Experiências offline complexas.

Custo: muito mais alto que web. Requer programadores especializados em cada plataforma (ou em React Native/Flutter para cross-platform).


3. Conteúdo mobile-first

3.1 Padrões de leitura

Padrão F (Nielsen Norman Group, 2006): em conteúdo textual denso, o utilizador lê completamente as primeiras linhas, depois começa a fazer scans horizontais progressivamente mais curtos. O resultado é uma forma de F — o conteúdo mais à esquerda e no topo é mais lido.

Implicação: as primeiras palavras de cada parágrafo são as mais importantes. Colocar informação-chave no início de cada frase e parágrafo.

Padrão Z (Gutenberg Diagram): em páginas com menor densidade de texto e mais elementos visuais, o olho percorre um Z: canto superior esquerdo → direito → diagonal para inferior esquerdo → direito. Usado em landing pages e anúncios.

F pattern em mobile: em ecrãs estreitos, o padrão F torna-se quase um padrão I (leitura vertical do lado esquerdo). Cada linha é tão curta que o utilizador lê apenas o início antes de avançar.

3.2 Princípios de escrita mobile

Brevidade: o utilizador mobile está em movimento, com atenção dividida. Sem parágrafos longos. Cada parágrafo = uma ideia.

Hierarquia visual: usar headings, listas e bullets. O utilizador deve conseguir captar a essência do conteúdo em 5 segundos de scan.

Acção primeiro: colocar o mais importante (a acção, a conclusão, o benefício) no início, não no fim. Estilo jornalístico invertido — pirâmide ao contrário.

Linguagem activa e directa: verbos no início, frases curtas, sem jargão desnecessário.

Labels de botões e CTAs: específicos e accionáveis. Descrição da acção que vai acontecer, não uma instrução genérica.

Exemplos comparativos:

Desktop-verbose Mobile-first
"Para completar a sua encomenda, por favor clique no botão abaixo" "Finalizar compra"
"Gostaríamos de informar que o seu produto foi enviado" "Enviado! Chegará em 2-3 dias"
"Se tiver alguma questão, não hesite em contactar-nos através do formulário" "Falar com suporte"

3.3 Formulários mobile

Os formulários são a maior fonte de fricção em mobile. Cada campo extra reduz as conversões.

Boas práticas: - Usar o tipo correcto de input para abrir o teclado certo: type="email" abre teclado com @; type="tel" abre teclado numérico; type="number" para valores numéricos. - autocomplete attributes para o sistema preencher automaticamente dados guardados. - Validação em tempo real (não só no submit). - Campos obrigatórios marcados claramente (ou melhor: só pedir o estritamente necessário). - Labels acima do campo (não dentro como placeholder — disappear ao escrever, confunde).


4. Performance mobile

4.1 Por que a performance é crítica

Dados de impacto: - 53% dos utilizadores abandona um site mobile que demora mais de 3 segundos a carregar (Google, 2018). - Cada segundo adicional de carregamento reduz as conversões em ~7% (Akamai). - O Google usa Core Web Vitals como sinal de ranking de SEO desde 2021 (mobile-first indexing).

Contexto mobile vs desktop: - Rede: 4G (50-100 Mbps teórico, 10-30 Mbps real) vs fibra doméstica (100-1000 Mbps). - CPU/RAM: muito mais limitados que desktop. - Bateria: JavaScript pesado drain rápido. - Contexto: o utilizador usa o telemóvel em contextos de atenção curta e pode estar em movimento.

4.2 Core Web Vitals

LCP (Largest Contentful Paint): mede o tempo até o maior elemento visível no viewport ser renderizado. Frequentemente uma imagem de hero ou um heading grande. - Bom: < 2.5s. - Precisa de melhorar: 2.5-4s. - Mau: > 4s.

INP (Interaction to Next Paint): substituiu o FID em 2024. Mede o tempo entre uma interacção do utilizador (click, tap, teclado) e o próximo frame visual de resposta. - Bom: < 200ms. - Precisa de melhorar: 200-500ms. - Mau: > 500ms.

CLS (Cumulative Layout Shift): acumulação de deslocamentos de layout inesperados durante o carregamento. - Bom: < 0.1. - Precisa de melhorar: 0.1-0.25. - Mau: > 0.25.

4.3 Optimizações de performance para mobile

Imagens: - Formato WebP (25-34% mais pequeno que JPEG). - srcset para servir tamanhos adequados ao viewport. - loading="lazy" para imagens abaixo da dobra. - width e height definidos para prevenir CLS. - Preload da imagem LCP.

JavaScript: - Minificação e tree-shaking. - Code splitting — carregar apenas o JS necessário para a página actual. - Diferir scripts não críticos: <script defer> ou <script async>.

CSS: - Critical CSS inline no <head> para renderização inicial. - CSS não crítico carregado depois.

Cache: - Service Worker para caching de assets estáticos (PWA). - HTTP cache headers correctos. - CDN para assets estáticos.


5. Push notifications e engagement

5.1 O poder e o risco das notificações

Push notifications têm o CTR (Click-Through Rate) mais alto de qualquer canal digital — em média 7-10%, comparado com 1-3% do email. Mas são profundamente intrusivas.

O problema: as apps que abusam de notificações são desinstaladas ou têm as notificações desactivadas. Uma vez que o utilizador desactiva, raramente reactiva.

Permissão: o utilizador deve dar permissão explícita para receber notificações. Pedir permissão imediatamente ao abrir a app (sem contexto) resulta em 90%+ de rejeição. Pedir após o utilizador ter visto valor da app resulta em 50%+ de aceitação.

5.2 Quando usar notificações

Uso justificado: - Evento urgente ou com prazo: "A tua promoção expira em 2 horas". - Evento personalizado que o utilizador esperava: "A tua encomenda foi enviada". - Acção de outro utilizador que requer atenção: "João comentou no teu post". - Alerta de segurança: "Login de novo dispositivo detectado". - Conteúdo de alta relevância pessoal: "Saiu novo episódio de [série seguida]".

Uso não justificado: - Marketing genérico sem personalização. - "Estás com saudades de nós!" (apps de jogos/social que perderam utilizadores). - Múltiplas notificações por dia sem razão clara. - Replicar email marketing em notificações.

5.3 Copywriting de notificações

Estrutura: - Título (50 chars max): o quê/quem. Específico e relevante. - Corpo (100 chars max): contexto e motivo para clicar. Inclui o benefício ou a urgência. - CTA implícito: o utilizador deve saber o que vai acontecer ao clicar.

Deep linking: a notificação deve abrir directamente no contexto relevante da app, não na homepage. Uma notificação sobre uma encomenda deve abrir no estado dessa encomenda, não no menu principal.

5.4 A/B testing de notificações

O A/B testing em notificações testa variantes para maximizar o CTR e a conversão.

O que testar: - Copy do título. - Timing (hora do dia, dia da semana). - Personalização vs genérico. - Emojis vs sem emojis. - Urgência vs benefício.

Processo: 1. Definir a métrica de sucesso (CTR? conversão após abrir?). 2. Criar duas versões (A e B) com uma variável diferente. 3. Enviar a cada metade da audiência aleatoriamente. 4. Aguardar volume suficiente (mínimo 1000 envios por variante para significância estatística). 5. Implementar o vencedor.


6. Testes em dispositivos

6.1 Chrome DevTools Device Mode

O DevTools do Chrome inclui um modo de emulação de dispositivos (F12 → ícone de telemóvel).

Capacidades: - Simular viewport de qualquer dimensão. - Simular densidades de ecrã (1x, 2x, 3x para Retina). - Throttling de rede (Fast 4G, Slow 3G, Offline) — simula performance em redes móveis. - Throttling de CPU (4×, 6× lento) — simula performance de hardware móvel. - Simular touch events.

Limitações: - Não simula a performance real de hardware móvel. - Não simula comportamentos específicos de browsers mobile (Safari iOS tem muitas particularidades). - Não testa gestos multi-toque.

6.2 Dispositivos reais

Para testes de qualidade antes de lançamento, testar em pelo menos: - iPhone com versão de iOS mais recente (Safari). - iPhone com versão de iOS popular mais antiga (Safari iOS tem bugs específicos por versão). - Android com Chrome. - Android de gama média (não apenas flagship — a maioria dos utilizadores tem hardware mais lento).

6.3 BrowserStack e ferramentas de cloud testing

BrowserStack: plataforma de nuvem com acesso a centenas de dispositivos reais. Permite testar em qualquer combinação de dispositivo + SO + browser sem possuir o hardware.

Plano gratuito: limitado em tempo e dispositivos. Suficiente para testes ocasionais.

Outros: LambdaTest, Sauce Labs, Perfecto.

6.4 Remote Debugging

Chrome Remote Debugging (Android): 1. Android: Definições → Sobre o telefone → tocar 7× em "Número de compilação" para activar Opções de Programador. 2. Opções de Programador → USB Debugging → activar. 3. Ligar com cabo USB ao computador. 4. Chrome desktop: chrome://inspect → aguardar o dispositivo aparecer. 5. Clicar "inspect" em qualquer tab aberto no Chrome mobile. 6. DevTools completo abre, com acesso à consola, DOM inspector, Network, e performance do dispositivo real.

Safari Web Inspector (iOS): 1. iPhone/iPad: Definições → Safari → Avançado → Web Inspector → activar. 2. Ligar com cabo USB ao Mac. 3. Safari no Mac: menu Develop → [nome do dispositivo] → [tab ou app aberta]. 4. Web Inspector abre para o contexto do dispositivo iOS.


Glossário

Breakpoint: ponto de mudança no CSS onde o layout se adapta a um novo tamanho de ecrã.

CLS: Cumulative Layout Shift — estabilidade visual durante o carregamento.

CTR: Click-Through Rate — taxa de cliques sobre impressões.

Deep linking: link que abre uma localização específica dentro de uma app.

INP: Interaction to Next Paint — tempo de resposta a interacções do utilizador.

LCP: Largest Contentful Paint — tempo de carregamento do maior elemento visível.

Mobile-first: abordagem de design que começa pelo ecrã móvel e expande para maior.

PWA: Progressive Web App — website com capacidades de app nativa.

Service Worker: script JavaScript em background que gere cache e notificações.

Thumb zone: área de ecrã acessível confortavelmente ao polegar em uso a uma mão.

Touch target: área interactiva mínima de 44-48px para interacção táctil.

Viewport: área visível do browser — varia conforme o dispositivo e orientação.

Web App Manifest: ficheiro JSON que define como uma PWA se comporta quando instalada.