it-roy-ru.com

FCM с AWS SNS

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

1. Поддерживает ли AWSFCM? SNS работа с GCM. Но Google рекомендует использовать FCM вместо GCM. Я не нашел AWS, поддерживающий FCM.

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

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

83
Naroju

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. Выберите приложение платформы и нажмите кнопку Создать конечную точку платформы.
  3. Укажите InstanceID (Device Token), созданный вашим приложением. Вы должны расширить FirebaseInstanceIDService и переопределить метод onTokenRefresh, чтобы увидеть это в вашем Android-приложении. Как только вы сделали это , удалите и переустановите приложение, и ваш токен должен быть напечатан на консоли Debug в Android Studio при первой загрузке.
  4. Нажмите кнопку Добавить конечную точку.
  5. Нажмите на ссылку ARN для вашего приложения платформы.
  6. Выберите только что созданную конечную точку для вашего устройства и нажмите кнопку Опубликовать в конечную точку.
  7. Выберите JSON Message Format и нажмите кнопку генератора сообщений JSON.
  8. Введите тестовое сообщение и нажмите кнопку Generate JSON
  9. Теперь наступает «часть гоча».

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

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

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

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

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

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

163
Nathan Dunn

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

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

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

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

 enter image description here

Обратите внимание, что вы можете «случайно» удалить ключи сервера, но устаревший ключ сервера удалить нельзя. Кроме того, если вы нажмете кнопку добавления ключа сервера, вы получите новый ключ сервера ниже первого, БЕЗ ПРЕДУПРЕЖДЕНИЯ! ... Отличная работа Google;)

13
Reza

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

5
Arbron

Еще одна дополнительная заметка к отличному ответу Натана Данна. Как отправлять данные с уведомлением из 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)
    {
    }
}
4
Adys

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

{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}
2
Shao Yuan Chew Chia

Amazon поддерживает FCM, так как весь предыдущий код был перенесен из GCM в FCM. Ниже статья подробно объясняет.

Статья, опубликованная Amazon

0
Epistemologist

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

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
Alexey

Чтобы ответить на вопросы:

  1. AWS SNS поддерживает FCM.
  2. Ни один AWS не сохраняет сообщения после отправки Push-уведомлений.

Для подробного руководства по настройке FCM с просьбами SNS прочитайте эту статью.

0
N. S. Mehra