FCM avec AWS SNS


94

J'utilise des AWSressources pour mon projet Android, je AWS SNSprévois d'ajouter un service de notification push pour mon projet avec .il y a quelques questions qui me dérangent beaucoup. Je n'ai trouvé aucune question à ce sujet, sauf une ou deux mais avec des explications peu claires.

1. AWSsupporte- FCMt-il? SNStravailler avec GCM. Mais Google recommande d'utiliser FCM au lieu de GCM. Je n'ai pas trouvé de AWSsoutien FCM.

2. Stockez-vous AWSdes messages (ou des données) dans leurs bases de données même après l'envoi de notifications push?

3.J'ai essayé de mettre la clé api FCM dans la plate-forme d'application SNS, elle affiche des paramètres non valides pourquoi?


SNS ne prend pas encore en charge FCM, il utilise une version obsolète de GCM. D'où obtenez-vous la clé API?
Arthur Thompson

1
Ce que j'ai essayé, c'est que j'ai essayé de mettre la clé api de FCM dans SNS et cela n'a pas fonctionné.Après avoir lu la documentation dans AWS (SNS), ils ont mentionné de mettre la clé du serveur. J'ai essayé, cela fonctionnait bien. Je suis capable d'envoyer des notifications push via SNS pour FCM. Je ne sais pas exactement pourquoi cela a fonctionné. Êtes-vous sûr que SNS ne prend pas en charge FCM actuellement?
Naroju

Il est exact que la clé du serveur est requise pour envoyer des messages GCM (maintenant FCM). Du côté client (appareil mobile), GCM et FCM sont généralement les mêmes, de sorte que les deux recevront les messages de la manière attendue. Cependant, certaines fonctionnalités FCM ne fonctionneront pas, par exemple: la messagerie thématique.
Arthur Thompson

est-il possible d'utiliser des sujets sns avec fmc? merci pour une réponse aussi géniale
Juan Jose Tugores

quel est l'avantage d'utiliser SNS en premier lieu? FCM ne devrait-il pas suffire?
Khaled Osman

Réponses:


188

FCM est rétrocompatible avec GCM. Les étapes de configuration de FCM sur AWS sont identiques à la procédure de configuration de GCM et (au moins pour le moment) FCM fonctionne de manière transparente avec GCM et SNS en ce qui concerne la configuration côté serveur.

Cependant , si vous envoyez des datacharges utiles à l'appareil Android, elles ne seront traitées que si vous implémentez un service côté client qui s'étend FirebaseMessagingService. Le générateur de messages JSON par défaut dans la console AWS envoie des datamessages, qui seront ignorés par votre application à moins que le service susmentionné ne soit implémenté. Pour contourner ce problème lors des tests initiaux, vous pouvez fournir une notificationcharge utile personnalisée qui sera reçue par votre appareil (tant que votre application n'est pas au premier plan)

Il existe des instructions de migration GCM-FCM fournies par Google, mais les modifications que vous devez apporter se trouvent principalement du côté de l'application.

Les étapes à suivre pour tester GCM / FCM sur votre application avec SNS sont:

  1. Créez une application de plate - forme dans SNS , en sélectionnant Google Cloud Messaging (GCM) comme plate - forme de notification push et en fournissant votre clé d'API serveur dans le champ de clé API .
  2. Sélectionnez l'application de plateforme et cliquez sur le bouton Créer un point de terminaison de plateforme .
  3. Indiquez l'ID d'instance ( jeton de périphérique ) généré par votre application. Vous devez étendre FirebaseInstanceIDServiceet remplacer la onTokenRefreshméthode pour voir cela dans votre application Android. Une fois que vous avez fait cela , désinstallez et réinstallez votre application et votre jeton doit être imprimé sur la console de débogage dans Android Studio au premier démarrage.
  4. Cliquez sur le bouton Ajouter un point de terminaison .
  5. Cliquez sur le lien ARN de votre application de plateforme.
  6. Sélectionnez le point de terminaison nouvellement créé pour votre appareil et cliquez sur le bouton Publier sur le point de terminaison .
  7. Sélectionnez le format de message JSON et cliquez sur le bouton générateur de message JSON .
  8. Entrez un message de test et cliquez sur le Générer JSON bouton
  9. Maintenant vient la "partie gotcha".

Le message généré par SNS sera de la forme:

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

Comme nous l'avons mentionné précédemment, les datacharges utiles seront ignorées si aucun service pour les recevoir n'a été implémenté. Nous aimerions tester sans écrire trop de code, donc nous devrions plutôt envoyer une notificationcharge utile. Pour ce faire, changez simplement le message JSON pour lire:

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

Une fois que vous avez fait cela, assurez-vous que votre application n'est pas en cours d'exécution sur l'appareil et cliquez sur le bouton Publier le message . Vous devriez maintenant voir une notification apparaître sur votre appareil.

Vous pouvez bien sûr faire tout cela par programme via l'API Amazon SNS, mais tous les exemples semblent utiliser la datacharge utile, vous devez donc garder cela à l'esprit et générer une charge utile adaptée à votre cas d'utilisation.


2
Réponse géniale, merci. Il convient de noter que le json a une certaine profondeur en ce qui concerne les options de configuration - voir developer.google.com/cloud-messaging/concept-options - bien que je n'ai testé aucune fonctionnalité spécifique à FCM.
Tom

datamessages fonctionne bien avec sns même si l'application cliente n'implémente pas FCM mais GCM. Dans mon application, je n'ai pas mis à niveau vers FCM côté client, mais FCM utilisant SNS fonctionne également bien pour les datamessages. Ça ne devrait pas marcher?
Sash_KP

2
SNS utilise GCM, donc si vous utilisez le client GCM, il doit se comporter normalement (jusqu'au moment où Google décide de retirer GCM). Cette question concerne davantage la prise en charge de FCM sur AWS (qui est prise en charge via la rétrocompatibilité du côté de l'API Google)
Nathan Dunn

est-il possible d'utiliser des sujets sns avec fmc? merci pour une réponse aussi géniale
Juan Jose Tugores

Bienvenue - oui, vous pouvez souscrire individuellement des points de terminaison push mobiles (c.-à-d. GCM-> FCM) à une rubrique SNS comme d'habitude, mais cela générerait un grand nombre de messages dans AWS. Si vous utilisez FCM côté client, une autre alternative consiste à utiliser des sujets FCM ou des segments d'utilisateurs qui ne voyageront que via les serveurs de Google
Nathan Dunn

14

Vous pouvez maintenant accéder à votre console Firebase ( https://console.firebase.google.com/ ) sélectionner votre projet, cliquer sur l'icône d'engrenage et choisir les paramètres du projet, puis cliquer sur l'onglet de messagerie cloud ...

Vous verrez la clé de serveur héritée qui est la clé API GCM et vous aurez la possibilité de générer de nouvelles clés de serveur qui sont les versions FCM

SNS acceptera les deux versions mais leur option de menu le catégorise toujours sous GCM

Voici l'image pour votre référence:

entrez la description de l'image ici

Notez que vous pouvez supprimer "accidentellement" vos clés de serveur, mais la clé de serveur héritée ne peut pas être supprimée. De plus, si vous cliquez sur le bouton Ajouter une clé de serveur, vous obtiendrez une nouvelle clé de serveur CI-DESSOUS la première, SANS AVERTISSEMENT! ... Beau travail Google;)


5

J'ai essayé d'utiliser une solution avec une charge utile de notification au lieu de données, mais je n'ai pas reçu de notifications push sur l'appareil mobile. J'ai trouvé ce tutoriel https://youtu.be/iBTFLu30dSg avec des sous-titres en anglais sur la façon d'utiliser FCM avec AWS SNS étape par étape et un exemple sur la façon d'envoyer des notifications push depuis la console AWS et de l'implémenter sur php avec aws php sdk. Cela m'a beaucoup aidé.


5

Encore une note supplémentaire à l'excellente réponse de Nathan Dunn. Comment envoyer des données avec la notification de SNS à Firebase.

Nous devons ajouter des données au Json (à l'intérieur de la notification):

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

Dans votre implémentation FirebaseMessagingService (exemple 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)
    {
    }
}

Où est le jeton FCM?
JPM

comment puis-je envoyer une URL d'image dans la charge utile
tarek noaman

3

Juste une note supplémentaire à la réponse de Nathan Dunn: pour ajouter du son, utilisez le message JSON suivant

{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}

comment puis-je envoyer une URL d'image dans la charge utile
tarek noaman

0

Il m'a fallu un certain temps pour comprendre comment envoyer la notification avec la bonne charge utile (publier dans le sujet). Je vais donc le mettre ici.

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);
}    


0

Pour répondre aux questions:

  1. AWS SNS prend en charge FCM.
  2. Non AWS ne stocke pas les messages après l'envoi de notifications push.

Pour un tutoriel détaillé sur la configuration de FCM avec SNS, veuillez lire cet article.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.