Reprodução
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?
- Toque em Iniciar teste 1 e confirme que o áudio começou.
- Aperte o botão lateral para bloquear a tela.
- Deixe o telefone parado 26 minutos. Não abra nada.
- Desbloqueie, volte ao app e toque em Parar e fechar a run.
- 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:
- 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.
- 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.
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
- Inicie um áudio e bloqueie a tela.
- Olhe a tela de bloqueio: aparece o título “Teste de áudio — 27 min”?
- Toque em pausar, voltar e avançar na tela de bloqueio.
- Volte ao app: cada controle que respondeu está contado aqui.
Runs medidas
5Cota real de armazenamento
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).
- Toque em Baixar e espere terminar.
- Ligue o modo avião nos Ajustes.
- 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.
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.
- Toque em Criar marco hoje.
- Não abra este app por mais de 7 dias.
- 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.