Подтвердить что ты не робот

FCM с AWS SNS

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

  • Создайте приложение Platform в SNS, выбрав Google Cloud Messaging (GCM) в качестве Push Notification Platform и предоставив ключ API сервера в поле API.
  • Выберите приложение платформы и нажмите кнопку Создать конечную точку платформы.
  • Предоставьте InstanceID (Идентификатор устройства), сгенерированный вашим приложением. Вы должны расширить FirebaseInstanceIDService и переопределить метод onTokenRefresh, чтобы увидеть это в своем приложении для Android. После того, как вы сделали это, удалите и переустановите приложение, и ваш токен должен быть напечатан на консоли Debug в Android Studio при первой загрузке.
  • Нажмите кнопку Добавить конечную точку.
  • Нажмите ссылку ARN для своего приложения платформы.
  • Выберите новую созданную конечную точку для своего устройства и нажмите кнопку Опубликовать в конечную точку.
  • Выберите JSON Формат сообщения и нажмите кнопку Генератор сообщений JSON.
  • Введите тестовое сообщение и нажмите кнопку Создать JSON
  • Теперь идет "часть, получаемая".

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

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

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

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

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

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

Ответ 2

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

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

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

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

enter image description here

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

Подробное руководство по настройке FCM с SNS см. в этой статье.

Ответ 8

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

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