Como você envia uma notificação do Firebase para todos os dispositivos via CURL?

Estou tentando enviar uma notificação a todos os usuários do aplicativo (no Android), duplicando essencialmente o que acontece quando uma notificação é enviada pelo console administrativo do Firebase. Aqui está o comando CURL com o qual começo:

curl --insecure --header "Autorização: key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Tipo de conteúdo: application / json" -d "{\" notification \ ": {\" title \ ": \" note -Title \ ", \" body \ ": \" note-Body \ "}}"https://fcm.googleapis.com/fcm/send

Aqui está o JSON analisado para ser mais fácil aos seus olhos:

{
"notification":{
    "title":"note-Title",
    "body":"note-Body"
    }
}

A resposta que volta é de apenas dois caracteres:

para

É isso, a palavra "to". (Os cabeçalhos relatam um 400) Eu suspeito que isso tenha a ver com não ter um "para" no meu JSON. O que alguém colocaria para um "to"? Não tenho tópicos definidos e os dispositivos não se registraram para nada. No entanto, eles ainda podem receber notificações do painel de administração do Firebase.

Desejo tentar um pacote JSON "apenas dados" devido à incrível limitação do processamento de notificações do Firebase, pelo qual, se o aplicativo estiver em primeiro plano, a notificação será processada pelo SEU manipulador, mas, se o aplicativo estiver em segundo plano, ele será processado INTERNALMENTE pelo serviço Firebase e nunca passado para o manipulador de notificações. APARENTEMENTE, isso pode ser contornado se você enviar sua solicitação de notificação por meio da API, mas SOMENTE se você fizer isso apenas com dados. (O que interrompe a capacidade de lidar com iOS e Android com a mesma mensagem.) Substituir "notificação" por "dados" em qualquer um dos meus JSON não tem efeito.

Ok, então eu tentei a solução aqui:Firebase Java Server para enviar notificações push a todos os dispositivos o que me parece dizer "Ok, mesmo que seja possível receber notificações de todos por meio do Admin Console ... na verdade, não é possível por meio da API". A solução alternativa é fazer com que cada cliente se inscreva em um tópico e envie a notificação para esse tópico. Então, primeiro o código no onCreate:

FirebaseMessaging.getInstance().subscribeToTopic("allDevices");

então o novo JSON que envio:

{
"notification":{
    "title":"note-Title",
    "body":"note-Body"
    },
"to":"allDevices"
}

Então agora estou recebendo pelo menos uma resposta real do servidor. Resposta JSON:

{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
    [
    {
    "error":"InvalidRegistration"
    }
    ]
}

E isso vem com um código HTTP 200. Ok ... de acordo comhttps://firebase.google.com/docs/cloud-messaging/http-server-ref um código 200 com "InvalidRegistration" significa um problema com o token de registro. Talvez? Porque essa parte da documentação é para o servidor de mensagens. O servidor de notificações é o mesmo? Claro. Vejo em outro lugar que o tópico pode levar horas para ser ativado. Parece que isso tornaria inútil a criação de novas salas de bate-papo, o que também parece errado.

Fiquei bastante empolgado quando consegui codificar um aplicativo do zero que recebia notificações em apenas algumas horas quando nunca havia usado o Firebase antes. Parece que ainda há um longo caminho até atingir o nível, por exemplo, da documentação do Stripe.com.

Conclusão: alguém sabe qual JSON fornecer para enviar uma mensagem a todos os dispositivos executando o aplicativo para espelhar a funcionalidade do Admin Console?

questionAnswers(6)

yourAnswerToTheQuestion