Visão Geral da Arquitetura de Notificações Push
Este artigo detalha a implementação completa do sistema de notificações push usando o UniPush 2.0, desde a configuração inicial até a prática de implantação. O UniPush 2.0 simplifica a integração com múltiplos fabricantes de dispositivos Android e iOS, fornecendo uma interface unificada para o envio de mensagens push.
1. Configuração dos Parâmetros dos Fabricantes
A configuração correta é essencial para garantir a entrega das notificações. Abaixo estão os pontos-chave para cada fabricante:
- Huawei: Necessita de appId, appSecret e nome do pacote. O nome do pacote deve corresponder exatamente ao do aplicativo.
- Xiaomi: Requer AppID, AppKey e AppSecret. A chave SHA1 deve ser precisamente configurada.
- OPPO: Exige AppKey e AppSecret, com upload do certificado de assinatura.
- vivo: Precisa de appId, appKey e appSecret, com um processo de aprovação mais lento.
- Apple (APNs): Utiliza APNs Key ou certificado p12. Certificados expirados são uma causa comum de falha.
Recomenda-se configurar todos os parâmetros no painel do DCloud em UniPush > Canais dos Fabricantes. Certifique-se de que o nome do pacote e a assinatura sejam idênticos aos do aplicativo, e documente todas as chaves/certificados para referência da equipe.
2. Obtenção do Client ID no Dispositivo
O clientId é um identificador único para cada dispositivo e deve ser coletado no aplicativo e enviado ao serivdor backend. Abaixo está um exemplo de código reescrito em JavaScript para o aplicativo cliente:
function fetchDeviceIdentifier() {
uni.getPushClientId({
success: function(callbackData) {
var deviceToken = callbackData.cid;
console.log("Identificador do dispositivo:", deviceToken);
transmitIdentifierToServer(deviceToken);
},
error: function(callbackError) {
console.error("Falha ao obter identificador:", callbackError);
}
});
}
// Configurar listener para mensagens recebidas
uni.onPushMessage(function(payload) {
console.log("Mensagem push recebida:", payload);
});
Destaques importantes: solicite permissão de notificação na primeira instalação do aplicativo e atualize o clientId sempre que o aplicativo for iniciado, pois ele pode mudar.
3. Armazenamento do Client ID no Backend
No servidor, crie uma tabela para mapear usuários a seus deviceIds. Exemplo de estrutura de tabela:
- id: Identificador único (auto-incremento)
- usuario_id: Referência ao usuário no sistema
- device_id: O clientId recebido do dispositivo
- info_dispositivo: Modelo e sistema operacional
- atualizado_em: Timestamp da última atualização
Isso permite enviar notificações específicas por usuário, consultando os deviceIds associados.
4. Envio de Notificações via API Backend
Utilize a API REST do UniPush para disparar mensagens. Exemplo de código backend reescrito em Node.js:
const axios = require('axios');
async function enviarNotificacaoParaUsuario(idUsuario, titulo, conteudo) {
const deviceId = await bancoDados.obterDeviceIdPorUsuario(idUsuario);
const payload = {
cid: deviceId,
message: {
titulo: titulo,
corpo: conteudo
}
};
await axios.post('https://restapi.getui.com/v2/{appId}/push/single', payload, {
headers: { 'Authorization': 'Bearer SEU_TOKEN' }
});
}
Adapte as URLs e tokens conforme a documentação do UniPush 2.0.
5. Tipos de Mensagens: Notificação vs. Transmissão
- Mensagem de Notificação: Exibida diretamente na barra de status. Ideal para alertas como pedidos ou anúncios. Funciona mesmo com o aplicativo em segundo plano.
- Mensagem de Transmissão: Não exibe interface visível; requer processamento no aplicativo ativo. Adequada para sincronização de dados em tempo real.
Na prática, prefira notificações para a maioria dos casos, pois são mais confiáveis em segundo plano no Android.
6. Soluções para Problemas Comuns
- Android: Teste sempre com um APK assinado com chaves de produção, não no modo de desenvolvimento.
- iOS: Use certificados válidos e teste em dispositivos físicos, nunca em simuladores.
- Client ID Variável: Implemente atualização periódica do identificador no cliente.
- Permissões: Garanta que o usuário conceda permissão para notificações, especialmenet no iOS.
7. Práticas Recomendadas
- Sincronize o client ID sempre que o aplicativo for iniciado.
- Mantenha uma tabela relacional entre usuários e deviceIds no backend.
- Combine estratégias: use transmissão para dados em tempo real e notificações para alertas visuais.
- Implemente logging detalhado para rastrear falhas no envio, incluindo deviceId, erros e metadados do dispositivo.
- Configure monitoramento e alertas para falhas nos serviços de push.