PushMesh
Entrar Solicitar acesso
Abrir navegação das seções

Índice

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

PlataformaO que você entregaOnde nasce
Android (e WebPush)o arquivo .json da conta de serviço do FirebaseConsole do Firebase
Android (opcional)o google-services.json do app AndroidConsole do Firebase
iOSa chave .p8 do APNs + Key ID + Team ID + Bundle ID + ambienteApple 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:

CampoO que precisa serErro típico
project_iduma string preenchidaausente ⇒ o arquivo não é uma conta de serviço
client_emailum e-mail (contém @; termina em .iam.gserviceaccount.com)ausente ou editado à mão
private_keyum PEM contendo o bloco BEGIN PRIVATE KEYquebras de linha (\n) removidas ao copiar

Não edite o arquivo. O erro mais comum aqui é colar a private_key sem 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.json do 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_key dentro do bloco android é 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.

CampoFormato exigidoOnde pegar
.p8conteúdo do arquivo, com o bloco BEGIN PRIVATE KEYApple Developer → Certificates, IDs & Profiles → Keys (marque “Apple Push Notifications service”)
Key IDexatamente 10 caracteres alfanuméricosa mesma tela de Keys
Team IDexatamente 10 caracteres alfanuméricosApple Developer → Membership
Bundle IDreverse-dns (com.suaempresa.app)Xcode / App Store Connect
Ambientesandbox ou productioné uma escolha sua — leia a seção seguinte

O .p8 só 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 aparelhoAmbiente do token
rodado direto do Xcodesandbox
publicado na App Storeproduction
distribuído por TestFlightproduction

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: 0a credencial de entrega está ausente ou incorreta
successful bom, failed altoos tokens estão mortos, ou (no iOS) foram emitidos no outro ambiente
successful bom, recebidos: 0o 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 bomacabou.

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.json do app Android

iOS

  • Uma conta Apple Developer com acesso a Keys
  • O arquivo .p8 do 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

AssuntoPágina
do zero ao primeiro push com reciboPrimeiros passos
a rota pública dos parâmetros do FirebaseAplicativos e chaves
o que muda ao trocar de provedorMigrando de outro provedor
retenção e dados pessoaisDados e privacidade