Teste de áudio longo — iOS

Mede o que um web app entrega de áudio de 25+ min, e o que não entrega.

Não está instalada na tela de início. Os testes 4 e 7 dependem disso. No Safari: botão Compartilhar → Adicionar à Tela de Início → abrir pelo ícone.

Reprodução

--:-- / --:--
Parado
Wake Lock: nada solicitado

O áudio fala “minuto N” a cada minuto. Se parar, você ouve onde parou — e o log diz o segundo exato.

1Baseline: tela bloqueada, SEM Wake Lock

O número que importa: o áudio morre no bloqueio? Em que segundo?

  1. Toque em Iniciar teste 1 e confirme que o áudio começou.
  2. Aperte o botão lateral para bloquear a tela.
  3. Deixe o telefone parado 26 minutos. Não abra nada.
  4. Desbloqueie, volte ao app e toque em Parar e fechar a run.
  5. O veredito aparece em “Runs medidas”, embaixo.

2O mesmo COM Wake Lock

O Wake Lock impede a tela de apagar sozinha. Ele não impede o botão lateral, e o sistema libera o sentinel quando a página fica oculta — por isso o app o repede ao voltar. Rode as duas variantes:

  1. Variante A — deixar apagar sozinha: inicie, apoie o telefone e não toque em nada. Se o Wake Lock funciona, a tela fica acesa a sessão inteira.
  2. Variante B — bloquear à mão: inicie e aperte o botão lateral. Mede se o áudio sobrevive mesmo com o Wake Lock pedido.

O Safari não expõe a Battery API — por isso é à mão. É o custo do Wake Lock que você vai pesar contra o benefício.

3Botão físico de silencioso

JS não lê o botão. Você declara o estado, toca, e diz se ouviu.

Nada declarado

Com o estado declarado, inicie um áudio (teste 1 ou 2) e responda:

Alternativa: a Web Audio API às vezes ignora o botão de silencioso. Se ignorar, é uma mitigação real para o produto.

4Media Session — controles na tela de bloqueio

Não aplicado
  1. Inicie um áudio e bloqueie a tela.
  2. Olhe a tela de bloqueio: aparece o título “Teste de áudio — 27 min”?
  3. Toque em pausar, voltar e avançar na tela de bloqueio.
  4. Volte ao app: cada controle que respondeu está contado aqui.

Runs medidas

5Cota real de armazenamento

Não medido

O que o estimate() diz é promessa; o que a gravação consegue é fato. O teste grava blocos de 5 MB no IndexedDB até dar erro de cota, e refina para 1 MB e 256 KB perto do limite.

Se bater no teto em vez de dar erro, o limite real é maior que o número medido — o resumo diz isso com essas palavras. Apague os blocos quando terminar.

6Baixar como Blob e tocar sem rede

Esse é o padrão do plano: o áudio fica no IndexedDB como Blob, fora do service worker. O teste confere o que o player precisa — tocar, ler a duração e dar seek (retomar a sessão no meio).

Nada baixado
  1. Toque em Baixar e espere terminar.
  2. Ligue o modo avião nos Ajustes.
  3. Volte e toque em Tocar do blob. O resumo registra se a rede estava desligada — se estiver ligada, o teste não vale como offline.

7Web push em PWA instalada

É o mecanismo de retenção do protocolo de 21 dias. No iOS só funciona na PWA instalada na tela de início.

Permissão não pedida

O passo 3 testa se um agendamento local sobrevive ao app em segundo plano — provavelmente não, e é exatamente isso que prova que o lembrete diário precisa vir do servidor. O passo 4 cria a inscrição real com chave VAPID: se ela nasce, o aparelho aceita push.

8Sobrevive a 7 dias sem abrir?

Instrumentado agora, conferido depois. Grava 4 MB no IndexedDB e 4 MB no Cache Storage — a alegação dos 7 dias é sobre o Cache Storage, então vale medir os dois lado a lado.

Nenhum marco criado
  1. Toque em Criar marco hoje.
  2. Não abra este app por mais de 7 dias.
  3. Depois, abra e toque em Verificar. O resumo diz o que sobreviveu.

Log persistente (IndexedDB)

Gravado com timestamp a cada evento. Sobrevive ao bloqueio, ao descarte da aba e ao fechamento do app.

Resumo para reportar

Gerado a partir do que foi medido. Copie e me mande.

Aparelho e APIs