FCM с AWS SNS


94

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

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

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

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


SNS еще не поддерживает FCM, он использует устаревшую версию GCM. Откуда вы берете ключ API?
Артур Томпсон

1
Я попытался вставить ключ API FCM в SNS, и это не сработало. После прочтения документа в AWS (SNS) они упомянули, что нужно поставить ключ сервера. Я пробовал работать хорошо. Я могу отправлять push-уведомления через SNS для FCM. Не знаю точно, почему это сработало. Вы уверены, что в настоящее время SNS не поддерживает FCM?
Naroju

Верно, что ключ сервера требуется для отправки сообщений GCM (теперь FCM). На стороне клиента (мобильного устройства) GCM и FCM, как правило, одинаковы, поэтому оба будут получать сообщения ожидаемым образом. Однако есть некоторые функции FCM, которые не будут работать, например: обмен сообщениями по темам.
Артур Томпсон

можно ли использовать темы sns с fmc? спасибо за такой потрясающий ответ
Хуан Хосе Тугорес

в чем преимущество использования социальных сетей в первую очередь? Разве FCM не должно хватить?
Халед Осман

Ответы:


188

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

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

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

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

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

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

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


2
Блестящий ответ, спасибо. Стоит отметить, что json имеет некоторую глубину в отношении параметров конфигурации - см. Developers.google.com/cloud-messaging/concept-options - хотя я не тестировал какие-либо специфические для FCM функции.
Tom

datamessages работает нормально с использованием sns, даже если клиентское приложение не реализует FCM, а GCM. В моем приложении я не обновлялся до FCM на стороне клиента, но FCM с использованием SNS отлично работает и для dataсообщений. Разве это не должно работать?
Sash_KP

2
SNS использует GCM, поэтому, если вы используете клиент GCM, он должен вести себя как обычно (до того момента, когда Google решит прекратить использование GCM). Этот вопрос больше связан с поддержкой FCM на AWS (которая поддерживается за счет обратной совместимости на стороне Google API)
Натан Данн,

можно ли использовать темы sns с fmc? спасибо за такой потрясающий ответ
Хуан Хосе Тугорес

Добро пожаловать - да, вы можете индивидуально подписать мобильные push (например, GCM-> FCM) конечные точки на тему SNS, как обычно, однако это приведет к возникновению большого количества сообщений в AWS. Если вы используете клиентскую часть FCM, другой альтернативой является использование тем или пользовательских сегментов FCM, которые будут перемещаться только через серверы Google,
Натан Данн,

14

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

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

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

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

введите описание изображения здесь

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


5

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


5

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

Где токен FCM?
Дж.П.М.

как я могу отправить URL-адрес изображения в полезной нагрузке
Тарек Ноаман

3

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

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

как я могу отправить URL-адрес изображения в полезную нагрузку
Тарек Ноаман

0

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.