O Mobile Push Service (MPS) assina e verifica todas as chamadas de API do lado do servidor para proteger as interações com o seu sistema. Configure as chaves necessárias na página de gerenciamento de chaves.
-
Configuração da API de push
O MPS fornece APIs REST para envio de mensagens push. Antes de chamar uma API, assine a solicitação com o algoritmo RSA e configure a chave na área Push API configuration da página Key management. O MPS usa essa chave para verificar a identidade do chamador.
-
Configuração da API de callback
Para receber confirmações de entrega de mensagens, configure o endereço da API REST de callback na área Callback API configuration da página Key management. Obtenha a chave pública para validar as assinaturas dos callbacks e confirme que eles se originaram do MPS.
Configurar a interface da API de push
Pré-requisitos
Antes de configurar a interface da API de push, gere uma chave pública RSA de 2048 bits.
-
Para gerar uma chave pública RSA:
Baixe e instale a ferramenta OpenSSL (versão 1.1.1 ou posterior) no site oficial do OpenSSL.
-
Abra a ferramenta OpenSSL e execute o comando a seguir para gerar uma chave privada RSA de 2048 bits.
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048 -
Gere uma chave pública RSA a partir da chave privada RSA.
openssl rsa -pubout -in private_key.pem -out public_key.pem
-
As regras do algoritmo de assinatura são:
Use o algoritmo de assinatura SHA-256.
Converta o resultado da assinatura em uma string base64.
Na string base64, substitua
+por-e/por_para obter a assinatura final.
Procedimento
Para configurar a interface de push:
Faça login no console mPaaS, selecione o aplicativo desejado e, no painel de navegação à esquerda, escolha Mobile Push Service > Settings.
Na página exibida, clique em Key management.
-
No canto superior direito da área Push API configuration, clique em Configure. Os campos de configuração serão exibidos.
Campo
Obrigatório
Descrição
Status
Sim
Define se a interface de push pode ser chamada. Ative a opção para permitir chamadas à API do MPS. Desative-a para bloquear essas chamadas.
Encryption method
Não
Apenas o algoritmo RSA está disponível.
RSA public key
Não
Insira a chave pública de 2048 bits. O MPS usa essa chave para validar os parâmetros assinados da solicitação e autenticar o chamador.
ImportanteVerifique se inseriu a chave pública corretamente, sem espaços. Caso contrário, as chamadas de API falharão. Para mais informações, consulte Referência da API.
Clique em OK para salvar a configuração.
Configurar a interface de callback de push
-
Na página Key management, no canto superior direito da área Callback API configuration, clique em Configure. Os campos de configuração serão exibidos.
Campo
Obrigatório
Descrição
Status
Sim
Estado do callback. Ative a opção para que o MPS envie confirmações de entrega ao seu servidor. Desative-a para interromper o envio das confirmações.
Callback API URL
Sim
URL do callback. Deve ser um endereço HTTP acessível publicamente. O MPS assina o corpo da solicitação POST com uma chave privada e envia a assinatura como parâmetro
signno callback.Encryption method
Não
O MPS usa o algoritmo RSA para assinar o corpo da solicitação POST.
RSA public key
Não
Este campo é preenchido automaticamente e não pode ser modificado. Após o servidor receber o corpo da solicitação POST e o parâmetro
sign, use a chave pública para confirmar que a solicitação veio do MPS e que os dados não foram alterados durante a transmissão. Para mais informações, consulte API do lado do servidor. -
Clique em OK para salvar a configuração.
O momento do callback varia conforme o canal de push.
NotaCanais de terceiros (como FCM, APNs, Xiaomi, Huawei, OPPO e vivo): o callback é acionado quando a chamada ao serviço externo é bem-sucedida.
Canal próprio: o callback ocorre assim que a mensagem é enviada com sucesso.
Exemplo de código
/**
* Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
*/
package com.callback.demo.callbackdemo;
import com.callback.demo.callbackdemo.util.SignUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
*
* @author yqj
* @version $Id: PushCallbackController.java, v 0.1 March 22, 2020 11:20 AM yqj Exp $
*/
@Controller
public class PushCallbackController {
/**
* Copy the RSA public key from the Callback API configuration in the console
*/
private static final String pubKey = "";
@RequestMapping(value = "/push/callback" ,method = RequestMethod.POST)
public void callback(@RequestBody String callbackJson, @RequestParam String sign) {
System.out.println(sign);
// Verify the signature
sign = sign.replace('/', '_').replace('+', '-');
if(!SignUtil.check(callbackJson,sign,pubKey,"UTF-8")){
System.out.println("Signature verification failed");
return;
}
System.out.println("Signature verification successful");
// JSON message body
System.out.println(callbackJson);
}
}
callbackJson é o corpo da solicitação de mensagem no formato JSON. Exemplo:
{
"extInfo":{
"adToken":"da64bc9d7d448684ebaeecfec473f612c57579008343a88d4dbdd145dad20e84",
"osType":"ios"
},
"msgId":"console_1584853300103",
"pushSuccess":true,
"statusCode":"2",
"statusDesc":"Acked",
"targetId":"da64bc9d7d448684ebaeecfec473f612c57579008343a88d4dbdd145dad20e84"
}
A tabela a seguir descreve os campos de callbackJson.
|
Campo |
Descrição |
|
msgId |
ID da mensagem de negócio. |
|
pushSuccess |
Indica se o envio do push foi bem-sucedido. |
|
statusCode |
Código de status da mensagem. |
|
statusDesc |
Descrição correspondente ao código de status da mensagem. |
|
targetId |
ID do destino. |