FCM с AWS SNS

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

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

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

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

 Naroju13 июл. 2016 г., 10:12
Я попытался вставить API-ключ FCM в SNS, и он не сработал. После прочтения документа в AWS (SNS) они упомянули о необходимости поставить серверный ключ. Я пытался это работало хорошо. Я могу отправлять push-уведомления через SNS для FCM. Не знаю причину, почему это сработало. Вы уверены, что SNS не поддерживает FCM в настоящее время?
 Arthur Thompson13 июл. 2016 г., 17:51
Правильно, что ключ сервера требуется для отправки сообщений GCM (теперь FCM). На стороне клиента (мобильного устройства) GCM и FCM обычно одинаковы, поэтому оба будут получать сообщения ожидаемым образом. Однако есть некоторые функции FCM, которые не будут работать, например: обмен сообщениями по темам.
 Juan Jose Tugores06 апр. 2017 г., 11:33
можно ли использовать темы sns с fmc? спасибо за такой потрясающий ответ
 Arthur Thompson13 июл. 2016 г., 00:33
SNS пока не поддерживает FCM, он использует устаревшую версию GCM. Откуда вы получаете ключ API?

Ответы на вопрос(8)

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

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

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

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

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);
}    
Решение Вопроса

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

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

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

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

СоздатьПриложение платформы в SNSвыбрав Google Cloud Messaging (GCM) в качествеПлатформа push-уведомленийи предоставление вашегоКлюч 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 полезная нагрузка, поэтому вам нужно помнить об этом и генерировать полезную нагрузку, соответствующую вашему варианту использования.

 Sash_KP31 янв. 2017 г., 07:24
data сообщения работают нормально, используя sns, даже если клиентское приложение не реализует FCM, но GCM. В моем приложении я не обновил до FCM на стороне клиента, но FCM, использующий SNS, прекрасно работает дляdata сообщения тоже. Разве это не должно работать?
 matdev07 февр. 2018 г., 17:52
Я добавил поле уведомления, как объяснено в вашем ответе, но RemoteMessage.getNotification () по-прежнему равен нулю в FirebaseMessagingService.onMessageReceived () моего приложения. Любое решение для этого?
 user344160419 июл. 2019 г., 13:58
Привет, у меня есть приложение и внутренний код, который в настоящее время использует FCM, и push-сообщения работают нормально. Но я развертывал его на локальном сервере до сих пор. Но сейчас я хочу развернуть его в AWS. Действительно ли необходимо использовать SNS? Я не хочу отправлять сообщения с использованием интерфейса на AWS, я хочу, чтобы мой существующий поток работал на AWS.
 Juan Jose Tugores06 апр. 2017 г., 11:41
можно ли использовать темы sns с fmc? спасибо за такой потрясающий ответ
 Iorek04 мар. 2017 г., 20:47
Отличный ответ, спасибо
 ricardoorellana26 мая 2018 г., 01:09
Кажется, что это, к сожалению, больше не работает, так как Google GCM устарел в прошлом апреле, я обращаюсь в службу поддержки AWS, чтобы подтвердить свою позицию по этому поводу. У кого-нибудь есть проблемы с уведомлениями SNS FCM?
 jdmunro22 мар. 2017 г., 12:00
Спасибо за это!
 Nathan Dunn02 февр. 2017 г., 07:41
SNS использует GCM, поэтому, если вы используете клиент GCM, он должен вести себя как обычно (вплоть до того момента, когда Google решит удалить GCM). Этот вопрос больше связан с поддержкой FCM в AWS (которая поддерживается посредством обратной совместимости на стороне API Google)
 Nathan Dunn20 апр. 2017 г., 07:52
Добро пожаловать - да, вы можете по отдельности подписать конечные точки мобильных push-уведомлений (т. Е. GCM-> FCM) на тему SNS как обычно, однако это приведет к созданию большого количества сообщений в AWS. Если вы используете клиентскую часть FCM, другой альтернативой является использование тем FCM или пользовательских сегментов, которые будут проходить только через серверы Google.
 kkesley28 февр. 2019 г., 13:41
Знаете ли вы, почему я получил 2 уведомления при использовании SNS? Один с логотипом выставки и один с логотипом белой коробки
 Tom29 июл. 2016 г., 05:51
Блестящий ответ, спасибо. Стоит отметить, что JSON имеет некоторую глубину в отношении параметров конфигурации - см.developers.google.com/cloud-messaging/concept-options - хотя я не тестировал какую-либо специфическую для FCM функциональность.

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

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

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

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

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

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

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

для добавления звука используйте следующее сообщение 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)
    {
    }
}
 JPM18 июн. 2019 г., 20:40
Где находится токен FCM?

Ваш ответ на вопрос