Não existe modo dry-run
O Notti não tem flag test nem dry_run em POST /v1/apps/{app_id}/notifications - todo envio tenta uma entrega real via FCM ou APNs. Se você procura uma forma de "simular" um envio sem que ele chegue a um dispositivo, isso não existe hoje. Testar significa enviar uma notificação real para um dispositivo de teste real e registrado, e verificar o resultado.
O ciclo de teste
- Registre um dispositivo real - instale seu app em um dispositivo físico ou em um simulador/emulador com credenciais de push reais, obtenha um token do FCM/APNs e chame
POST /v1/apps/{app_id}/devicescom ele, usando a chave de cliente. - Envie - chame
POST /v1/apps/{app_id}/notificationssegmentando oiddesse dispositivo (target_type: "device_ids"). - Verifique o resultado -
GET /v1/apps/{app_id}/notifications/{id}/deliveriesretorna uma entrega por dispositivo segmentado, com seu próprio statussent/failed/pendingelast_errorquando algo deu errado. Faça polling nesse endpoint em vez de assumir que o201do passo 2 significa que o push de fato chegou - essa resposta apenas confirma que a notificação foi aceita, não que foi entregue.
iOS: builds de sandbox vs produção
As credenciais APNs de um App carregam um único valor environment - "sandbox" ou "production" - definido em POST /v1/apps/{app_id}/credentials/apns. O Notti envia todos os pushes desse App pelo gateway que corresponde a esse único valor armazenado; ele não inspeciona o token nem infere o ambiente por dispositivo.
Isso significa: um token de dispositivo de um build de debug/executado pelo Xcode só é válido no gateway sandbox da Apple. Se o environment do seu App estiver definido como "production" (o padrão quando omitido), enviar para o token de um dispositivo com build de debug falha com BadDeviceToken - não porque o token esteja errado, mas porque você está testando no gateway errado para aquela credencial. Defina environment: "sandbox" no App que você usa para desenvolvimento/testes e use um App separado (ou conjunto de credenciais) com "production" para builds de TestFlight/App Store.
Android/FCM
O FCM não tem um conceito separado de sandbox - um token de dispositivo de um build de debug funciona no mesmo endpoint do FCM que um build de release, desde que o google-services.json/service account corresponda ao pacote do app usado para gerar o cliente. Não há campo de ambiente para configurar nas credenciais do FCM.
O que "não chegou" geralmente significa
Se uma entrega aparece como sent mas nada apareceu no dispositivo, o problema quase sempre está no lado do dispositivo (permissões de notificação do SO, Não Perturbe, app fora do primeiro plano em algumas skins de OEMs Android que encerram a entrega em segundo plano) - algo que a API do Notti não expõe. Se a entrega aparece como failed, veja Solução de problemas para entender o que os valores comuns de last_error significam.