Credenciais de entrega
O que você precisa ter em mãos antes de disparar o primeiro push — a conta de serviço do Firebase para Android e a chave .p8 do APNs para iOS, campo por campo, com a armadilha do ambiente da Apple.
Credenciais de entrega
O PushMesh não entrega push sozinho: quem coloca a notificação no aparelho é a Google (FCM) no Android e a Apple (APNs) no iOS. Para falar com elas em nome do seu aplicativo, o serviço precisa de uma credencial sua.
Esta é a etapa que trava mais integrações no primeiro dia, e ela tem um sintoma
característico: o disparo responde 200, o recipients vem certo, e a consulta
mostra successful: 0 com remaining: 0. O público existia; a mensagem
nunca teve por onde sair.
O cadastro é feito no painel, em
https://app.pushmesh.io. Não existe rota pública que receba credencial de entrega — nem para gravar, nem para ler. Uma chave de assinatura de push é o tipo de segredo que não deve trafegar por integração automatizada, e por isso ela só entra pela tela.
Esta página existe para você saber o que precisa ter em mãos antes de criar a conta, e para reconhecer a credencial certa quando a vir.
O que cada plataforma exige, em uma tabela
| Plataforma | O que você entrega | Onde nasce |
|---|---|---|
| Android (e WebPush) | o arquivo .json da conta de serviço do Firebase | Console do Firebase |
| Android (opcional) | o google-services.json do app Android | Console do Firebase |
| iOS | a chave .p8 do APNs + Key ID + Team ID + Bundle ID + ambiente | Apple Developer |
Você precisa apenas da plataforma que vai atender. Um aplicativo só de Android nunca precisa tocar em APNs.
1. Android — a conta de serviço do Firebase
O que é (e o que não serve)
O que o serviço aceita é o arquivo JSON de uma conta de serviço do seu projeto Firebase. É o arquivo que o console gera em:
Console do Firebase → Configurações do projeto → Contas de serviço → “Gerar nova chave privada”
A chave de servidor legada não serve. Aquela sequência longa que aplicações antigas guardavam numa variável de ambiente pertence a um protocolo aposentado. Se o que você tem é uma linha de texto, e não um arquivo JSON com chaves e valores, é a credencial errada — gere uma nova pelo caminho acima.
Os campos que são conferidos
O arquivo é validado na hora do cadastro, campo a campo, e cada problema volta nomeado em vez de virar uma falha de entrega semanas depois:
| Campo | O que precisa ser | Erro típico |
|---|---|---|
project_id | uma string preenchida | ausente ⇒ o arquivo não é uma conta de serviço |
client_email | um e-mail (contém @; termina em .iam.gserviceaccount.com) | ausente ou editado à mão |
private_key | um PEM contendo o bloco BEGIN PRIVATE KEY | quebras de linha (\n) removidas ao copiar |
Não edite o arquivo. O erro mais comum aqui é colar a
private_keysem as quebras de linha, ou passá-la por um editor que “arruma” o texto. Cole o conteúdo inteiro, exatamente como o Google o entregou.
Depois de cadastrar
- A credencial é cifrada no servidor. Ela não volta por nenhuma tela e por nenhuma rota.
- O painel oferece um teste de conexão: ele pede um token de acesso ao Google com a sua credencial e mostra o projeto que respondeu. Faça o teste antes do primeiro disparo — é a diferença entre descobrir o problema agora e descobrir no meio de uma campanha.
- Revogar para a entrega na hora. Apagar a credencial do PushMesh interrompe os envios deste aplicativo até você configurar outra; isso não apaga nada no Firebase. Se a chave vazou, revogue nos dois lugares.
Opcional: o google-services.json
Além da conta de serviço (que envia), existe um segundo arquivo que apenas
identifica o projeto para o aplicativo Android. Colando o
google-services.json no painel uma única vez, o seu app deixa de precisar
carregar o arquivo embutido: o SDK busca os valores no servidor, no boot.
Console do Firebase → Configurações do projeto → Seus apps → baixar o
google-services.jsondo app Android
São cinco valores, e eles são públicos por desenho — já vão dentro de todo APK publicado. Não são credencial, e por isso a rota que os serve não pede nenhuma:
curl https://api.pushmesh.io/api/v1/apps/APP_ID/firebase_params
{
"android": {
"project_id": "meu-projeto-firebase",
"sender_id": "123456789012",
"app_id": "1:123456789012:android:abcdef0123456789",
"api_key": "AIza…",
"package_name": "com.exemplo.meuapp"
},
"ios": null
}
Enquanto não estiverem configurados, a mesma rota responde 200 com
"android": null.
Atenção ao nome. O
api_keydentro do blocoandroidé a chave do Firebase, pública, vinda do arquivo do Google. Ela não é a chave do seu aplicativo no PushMesh (pm_live_…), que nunca pode sair do seu servidor. São coisas diferentes com nomes parecidos, e confundi-las é o engano mais caro desta página.
Se o seu projeto Firebase tem mais de um app Android, o painel pede o
package_name para escolher qual deles usar — sem isso, gravar o app errado
faria o SDK inicializar contra outro projeto. O identificador do app Android
tem sempre o formato 1:<número>:android:<hash>.
Detalhes da rota em Aplicativos e chaves.
2. iOS — a chave .p8 do APNs
O iOS exige cinco informações, e todas são conferidas na forma antes de serem gravadas.
| Campo | Formato exigido | Onde pegar |
|---|---|---|
.p8 | conteúdo do arquivo, com o bloco BEGIN PRIVATE KEY | Apple Developer → Certificates, IDs & Profiles → Keys (marque “Apple Push Notifications service”) |
| Key ID | exatamente 10 caracteres alfanuméricos | a mesma tela de Keys |
| Team ID | exatamente 10 caracteres alfanuméricos | Apple Developer → Membership |
| Bundle ID | reverse-dns (com.suaempresa.app) | Xcode / App Store Connect |
| Ambiente | sandbox ou production | é uma escolha sua — leia a seção seguinte |
O
.p8só pode ser baixado uma vez. A Apple entrega o arquivo no momento da criação da chave e nunca mais. Se você não o tem, não há como recuperá-lo: gere outra chave.
Ao gravar, a credencial é cifrada no servidor. O painel oferece um teste de conexão que valida a chave contra a própria Apple e mostra o bundle e o ambiente aceitos.
Revogar apaga a credencial do PushMesh e para os envios iOS na hora, sem mexer em nada no Apple Developer.
A armadilha do ambiente — leia antes de acusar a plataforma
A Apple mantém dois mundos separados, e um token de push de um não vale nada no outro.
Quem decide é o build, não o servidor:
| Como o aplicativo chegou ao aparelho | Ambiente do token |
|---|---|
| rodado direto do Xcode | sandbox |
| publicado na App Store | production |
| distribuído por TestFlight | production |
O TestFlight ser produção é o engano mais comum de todos: a pessoa está testando, então assume sandbox, e nenhum push chega.
A mesma chave .p8 serve nos dois mundos — o que muda é apenas para onde o
serviço envia. Por isso o ambiente é uma configuração do aplicativo que você
troca a qualquer momento no painel, sem reenviar a chave, e a troca vale na
hora.
Quando a chave não é válida no ambiente escolhido, a Apple responde
BadEnvironmentKeyIdInToken, e o erro que chega até você diz exatamente isso:
confira se o ambiente do aplicativo bate com o ambiente para o qual a chave
APNs foi criada.
3. Como saber que ficou certo
Depois de cadastrar, dispare para um aparelho real e leia o resultado. A tabela de leitura é curta:
| O que você vê | O que significa |
|---|---|
recipients bom, successful: 0, remaining: 0 | a credencial de entrega está ausente ou incorreta |
successful bom, failed alto | os tokens estão mortos, ou (no iOS) foram emitidos no outro ambiente |
successful bom, recebidos: 0 | o push saiu; o que não voltou foi a prova — permissão de notificação, aparelho offline, ou cliente próprio que não chama a rota de recibos |
successful bom, recebidos bom | acabou. |
O caminho completo, com os comandos, está em Primeiros passos.
Checklist antes de criar a conta
Android
- Acesso ao Console do Firebase do projeto que já emite os tokens do seu app
- Permissão para gerar uma chave privada de conta de serviço
- (Opcional) O
google-services.jsondo app Android
iOS
- Uma conta Apple Developer com acesso a Keys
- O arquivo
.p8do APNs — ou permissão para gerar um novo - Key ID, Team ID e Bundle ID à mão
- A resposta para “este build vem do Xcode, da App Store ou do TestFlight?”
Veja também
| Assunto | Página |
|---|---|
| do zero ao primeiro push com recibo | Primeiros passos |
| a rota pública dos parâmetros do Firebase | Aplicativos e chaves |
| o que muda ao trocar de provedor | Migrando de outro provedor |
| retenção e dados pessoais | Dados e privacidade |