FCM com AWS SNS

94

Estou usando AWSrecursos para o meu projeto Android, estou planejando adicionar um serviço de notificação por push para o meu projeto com. AWS SNSExistem algumas perguntas que me incomodam muito. Não encontrei nenhuma pergunta a respeito disso, exceto uma ou duas, mas com explicações pouco claras.

1. Tem AWSsuporte FCM? SNStrabalhar com GCM. Mas o Google recomenda usar o FCM em vez de GCM. Não encontrei AWSapoio FCM.

2. AWSArmazenam mensagens (ou dados) em seus bancos de dados, mesmo depois de enviar notificações push?

3. Tentei colocar a chave de API do FCM na plataforma de aplicativo SNS, ela está mostrando parâmetros inválidos por quê?

Naroju
fonte
O SNS ainda não oferece suporte ao FCM, ele usa uma versão obsoleta do GCM. De onde você está obtendo a chave API?
Arthur Thompson
1
O que tentei foi, tentei colocar a api key do FCM no SNS e não deu certo, Depois de ler o doc no AWS (SNS) eles mencionaram colocar a chave do servidor. Eu tentei e funcionou bem. Posso enviar notificações push via SNS para FCM. Não sei exatamente porque funcionou. Tem certeza de que o SNS não oferece suporte ao FCM atualmente?
Naroju
É correto que a chave do servidor é necessária para enviar mensagens GCM (agora FCM). No lado do cliente (dispositivo móvel), o GCM e o FCM são geralmente os mesmos, então ambos receberão mensagens de maneira esperada. No entanto, existem alguns recursos do FCM que não funcionarão, por exemplo: mensagens de tópico.
Arthur Thompson
é possível usar tópicos sns com fmc? obrigado por uma resposta tão incrível
Juan Jose Tugores
qual é a vantagem de usar o SNS em primeiro lugar? não deveria o FCM ser suficiente?
Khaled Osman

Respostas:

187

O FCM é compatível com versões anteriores do GCM. As etapas para configurar o FCM no AWS são idênticas ao procedimento de configuração do GCM e (pelo menos por enquanto) o FCM funciona de forma transparente com o GCM e SNS com relação à configuração do lado do servidor.

No entanto , se você estiver enviando datacargas úteis para o dispositivo Android, elas não serão processadas, a menos que você implemente um serviço do lado do cliente que se estenda FirebaseMessagingService. O gerador de mensagem JSON padrão no console da AWS envia datamensagens, que serão ignoradas pelo seu aplicativo, a menos que o serviço mencionado acima seja implementado. Para contornar isso para o teste inicial, você pode fornecer uma notificationcarga útil personalizada que será recebida pelo seu dispositivo (contanto que seu aplicativo não esteja em primeiro plano)

Existem instruções de migração GCM-FCM fornecidas pelo Google, no entanto, as alterações que você precisa fazer são predominantemente no lado do aplicativo.

As etapas que você precisa seguir para testar o GCM / FCM em seu aplicativo com SNS são:

  1. Crie um aplicativo de plataforma no SNS , selecionando Google Cloud Messaging (GCM) como a plataforma de notificação push e fornecendo sua chave de API do servidor no campo de chave de API .
  2. Selecione o aplicativo da plataforma e clique no botão Criar terminal da plataforma .
  3. Forneça o InstanceID ( Device Token ) gerado pelo seu aplicativo. Você deve estender FirebaseInstanceIDServicee substituir o onTokenRefreshmétodo para ver isso em seu aplicativo Android. Depois de fazer isso , desinstale e reinstale seu aplicativo e seu token deve ser impresso no console de depuração no Android Studio na primeira inicialização.
  4. Clique no botão Adicionar endpoint .
  5. Clique no link ARN do seu aplicativo de plataforma.
  6. Selecione o Endpoint recém-criado para o seu dispositivo e clique no botão Publicar no endpoint .
  7. Selecione o formato de mensagem JSON e clique no botão gerador de mensagem JSON .
  8. Digite uma mensagem de teste e clique no JSON Gerar botão
  9. Agora vem a "parte peguei".

A mensagem que é gerada pelo SNS terá o seguinte formato:

{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}

Como mencionamos anteriormente, as datacargas úteis serão ignoradas se nenhum serviço para recebê-las tiver sido implementado. Gostaríamos de testar sem escrever muito código, então, em vez disso, devemos enviar uma notificationcarga útil. Para fazer isso, basta alterar a mensagem JSON para ler:

{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}

Depois de fazer isso, certifique-se de que seu aplicativo não esteja em execução no dispositivo e clique no botão Publicar Mensagem . Agora você deve ver uma notificação pop-up no seu dispositivo.

É claro que você pode fazer tudo isso programaticamente por meio da API do Amazon SNS; no entanto, todos os exemplos parecem usar a datacarga útil, portanto, você precisa manter isso em mente e gerar uma carga útil adequada ao seu caso de uso.

Nathan Dunn
fonte
2
Resposta brilhante, obrigado. É importante notar que o json tem alguma profundidade em relação às opções de configuração - consulte developers.google.com/cloud-messaging/concept-options - embora eu não tenha testado nenhuma funcionalidade específica do FCM.
Tom
dataas mensagens funcionam bem com o sns, mesmo que o aplicativo cliente não implemente FCM, mas sim GCM. No meu aplicativo, não atualizei para o FCM no lado do cliente, mas o FCM usando SNS também funciona bem para datamensagens. Não deveria funcionar?
Sash_KP
2
O SNS usa o GCM, portanto, se você estiver usando o cliente GCM, ele deve se comportar normalmente (até o ponto em que o Google decidir retirar o GCM). Esta questão tem mais a ver com o suporte FCM na AWS (que é compatível com a compatibilidade com versões anteriores no lado da API do Google)
Nathan Dunn
é possível usar tópicos sns com fmc? obrigado por uma resposta tão incrível
Juan Jose Tugores
Bem-vindo - sim, você pode inscrever-se individualmente em endpoints de push móvel (ou seja, GCM-> FCM) para um tópico SNS normalmente; no entanto, isso geraria um grande número de mensagens na AWS. Se você estiver usando o lado do cliente FCM, outra alternativa é usar Tópicos ou segmentos de usuário do FCM, que só viajarão pelos servidores do Google
Nathan Dunn,
14

Agora você pode acessar o console do firebase ( https://console.firebase.google.com/ ), selecionar seu projeto, clicar no ícone de engrenagem, escolher as configurações do projeto e clicar na guia de mensagens na nuvem ...

Você verá a chave de servidor legada, que é a GCM API Key, e terá a opção de gerar novas chaves de servidor, que são as versões FCM

SNS aceitará ambas as versões, mas sua opção de menu ainda está categorizando-as em GCM

Aqui está a foto para sua referência:

insira a descrição da imagem aqui

Observe que você pode remover "acidentalmente" as chaves do servidor, mas a chave do servidor herdado não pode ser deletada. Além disso, se você clicar no botão adicionar chave do servidor, obterá uma nova chave do servidor ABAIXO da primeira, SEM AVISO! ... Bom trabalho Google;)

Reza
fonte
5

Tentei usar a solução com carga útil de notificação em vez de dados, mas não recebi notificações push no dispositivo móvel. Eu encontrei este tutorial https://youtu.be/iBTFLu30dSg com legendas em inglês de como usar o FCM com AWS SNS passo a passo e exemplo de como enviar notificações push do console AWS e implementá-lo em php com aws php sdk. Isto me ajudou bastante.

Arbron
fonte
5

Mais uma nota adicional à ótima resposta de Nathan Dunn. Como enviar dados com a notificação do SNS para o Firebase.

Precisamos adicionar dados ao Json (dentro da notificação):

{
    "default": any value", 
     "GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }”
}

Em sua implementação FirebaseMessagingService (exemplo de Xamarin)

public override void OnMessageReceived(RemoteMessage message)
{

    try
    {

        var body = message?.GetNotification()?.Body;
        var title = message?.GetNotification()?.Title;
        var tag = message?.GetNotification()?.Tag;
        var sound = message?.GetNotification()?.Sound;

        var data = message?.Data
        foreach (string key in data.Keys)
        {
            // get your data values here
        }

    }
    catch (Exception e)
    {
    }
}
Adys
fonte
Onde está o token FCM?
JPM de
como posso enviar um URL de imagem na carga útil
tarek noaman
3

Apenas uma observação adicional à resposta de Nathan Dunn: para adicionar som, use a seguinte mensagem JSON

{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}
Shao Yuan Chew Chia
fonte
como posso enviar um URL de imagem na carga útil
tarek noaman
0

Levei um tempo para descobrir como enviar a notificação com a carga útil certa (publicar no tópico). Então, vou colocá-lo aqui.

private void PublishToTopic(string topicArn)
{
    AmazonSimpleNotificationServiceClient snsClient = 
           new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.EUWest1);
    PublishRequest publishRequest = new PublishRequest();
    publishRequest.TopicArn = topicArn;
    publishRequest.MessageStructure = "json";
    string payload = "\\\"data\\\":{\\\"text\\\":\\\"Test \\\"}";
    publishRequest.Message = "{\"default\": \"default\",\"GCM\":\"{" + payload + "}\"}";
    PublishResponse publishResult = snsClient.Publish(publishRequest);
}    
Alexey
fonte
0

A Amazon oferece suporte ao FCM, pois todo o código anterior foi migrado do GCM para o FCM. O artigo abaixo explica em detalhes.

Artigo publicado pela Amazon

Epistemologista
fonte
0

Para responder às perguntas:

  1. AWS SNS oferece suporte a FCM.
  2. Não AWS não armazena mensagens após o envio de notificações push.

Para obter um tutorial detalhado sobre a configuração do FCM com SNS, leia este artigo.

NS Mehra
fonte