FCM с AWS SNS


я использую AWS ресурсы для моего проекта Android, я планирую добавить службу push-уведомлений для моего проекта с AWS SNS.есть несколько вопросов, которые меня сильно беспокоят. Я не нашел никаких вопросов относительно них, кроме одного или двух, но с неясными объяснениями.

1.Делает AWS поддержка FCM? SNS работы с GCM. Но Google рекомендует использовать FCM вместо GCM. Я не нашел AWS поддержка FCM.

2.Do AWS хранить сообщения (или данные) в своих базах данных даже после отправки push-уведомлений?

3.Я попытался поместить ключ api FCM в платформу приложений SNS, он показывает недопустимые параметры, почему?

6 69

6 ответов:

FCM обратно совместим с GCM. Шаги для настройки FCM на AWS идентичны процедура настройки GCM и (по крайней мере на данный момент) FCM работает прозрачно с GCM и SNS в отношении конфигурации на стороне сервера.

, если вы отправляете data полезные нагрузки на Android устройства они не будут обрабатываться, если вы не реализуете обслуживание на стороне клиента что расширяет FirebaseMessagingService. JSON по умолчанию генератор сообщений в консоли AWS передает data сообщения, которые будут игнорироваться вашим приложением, если не будет реализована вышеупомянутая служба. Чтобы обойти это для первоначального тестирования вы можете предоставить пользовательский notification полезная нагрузка, которая будет получена вашим устройством (пока ваше приложение не находится на переднем плане)

здесь инструкции по миграции GCM-FCM предоставлено Google, однако изменения, которые вам нужно сделать, в основном находятся в приложении сторона.

шаги, которые вам нужно выполнить, чтобы проверить GCM / FCM в вашем приложении с помощью SNS:

  1. создать применение платформы в SNS, выбрав Google Cloud Messaging (GCM) в качестве Push Notification Platform, и ключ API сервера на API key.
  2. нажмите на ссылку ARN для вашей платформы приложение.
  3. выберите созданную конечную точку для вашего устройства и нажмите кнопку публикации в конечной точке.
  4. выберите JSON Формат Сообщения и выберите генератор сообщений JSON.
  5. введите тестовое сообщение и нажмите создать JSON
  6. теперь идет "gotcha часть".

сообщение, которое генерируется SNS будет иметь форма:

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

как мы уже упоминали ранее,data полезные нагрузки будут игнорироваться, если ни одна служба для их получения не была реализована. Мы хотели бы протестировать без написания слишком большого кода, поэтому вместо этого мы должны отправить notification нагрузки. Для этого просто измените сообщение JSON следующим образом:

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

после того как вы сделали это, убедитесь, что ваше приложение не работает на устройстве, и нажмите Публикации. Теперь вы должны увидеть всплывающее уведомление ваше устройство.

вы можете, конечно, сделать все это программно через API Amazon SNS, однако все примеры, похоже, используют data полезная нагрузка поэтому вам нужно иметь это в виду и генерировать полезную нагрузку, соответствующую вашему варианту использования.

теперь вы можете перейти к консоли firebase (https://console.firebase.google.com/) Выберите свой проект, щелкните значок шестеренки и выберите настройки проекта, затем перейдите на вкладку облачные сообщения...

вы увидите устаревший ключ сервера, который является ключом API GCM, и у вас будет возможность создавать новые ключи сервера, которые являются версиями FCM

SNS примет обе версии, но их опция меню по-прежнему классифицирует его под GCM

здесь это изображение для вашей справки:

enter image description here

обратите внимание, что вы можете" случайно " удалить ключи сервера, но устаревший ключ сервера не удаляется. Кроме того, если вы нажмете кнопку добавить ключ сервера, вы получите новый ключ сервера ниже первого, без предупреждения! ...Хорошая работа Google ;)

Я попытался использовать решение с полезной нагрузкой уведомления вместо данных, но я не получал уведомления толчка на мобильном устройстве. Я нашел этот учебник https://youtu.be/iBTFLu30dSg с английскими субтитрами о том, как использовать FCM с AWS SNS шаг за шагом и пример того, как отправлять push-уведомления из консоли AWS и реализовать его на php с aws php sdk. Это мне очень помогло.

просто дополнительная заметка к ответу Натана Данна: чтобы добавить звук, используйте следующее сообщение JSON

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

еще одна дополнительная заметка к замечательному ответу Натана Данна. Как отправить данные с уведомлением от SNS в Firebase.

нам нужно добавить данные в Json (внутри уведомления):

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

в вашей реализации FirebaseMessagingService (пример 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)
    {
    }
}

Мне потребовалось некоторое время, чтобы понять, как отправить уведомление с правильной полезной нагрузкой (опубликовать в теме). Поэтому я поставлю его здесь.

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