FCM з AWS SNS


94

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

1. чи AWSпідтримує FCM? SNSробота з GCM. Але Google рекомендує використовувати FCM замість GCM. Я не знайшов AWSпідтримки FCM.

2. Чи AWSзберігати повідомлення (або дані) у своїх базах даних навіть після надсилання push-сповіщень?

3.Я спробував помістити ключ API FCI у платформу додатків SNS, він показує недійсні параметри, чому?


SNS ще не підтримує FCM, він використовує застарілу версію GCM. Звідки ви берете ключ API?
Артур Томпсон,

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

Правильно, що ключ сервера потрібен для надсилання повідомлень GCM (тепер FCM). На стороні клієнта (мобільний пристрій) GCM та FCM, як правило, однакові, тому обидва отримуватимуть повідомлення очікуваним чином. Однак є деякі функції FCM, які не працюватимуть, наприклад: обмін темами.
Артур Томпсон,

чи можна використовувати sns теми з fmc? дякую за таку чудову відповідь
Хуан Хосе Тугорес

яка користь від використання SNS в першу чергу? чи не повинно бути достатньо FCM?
Халед Осман

Відповіді:


187

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.
Том,

datamessages працює нормально, використовуючи sns, навіть якщо клієнтська програма не реалізує FCM, а GCM. У моєму додатку я не перейшов на FCM на стороні клієнта, але FCM, що використовує SNS, чудово працює і для dataповідомлень. Чи не має це працювати?
Sash_KP

2
SNS використовує GCM, тому, якщо ви використовуєте клієнт GCM, він повинен поводитись як нормально (до моменту, коли Google вирішить скасувати GCM). Це питання більше пов’язане з підтримкою FCM на AWS (яка підтримується через зворотну сумісність на стороні API Google)
Натан Данн, 02

чи можна використовувати 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?
JPM

як я можу надіслати URL-адресу зображення в корисному навантаженні
tarek noaman

3

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

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

як я можу надіслати URL-адресу зображення в корисному навантаженні
tarek noaman

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. Жоден AWS не зберігає повідомлення після надсилання push-сповіщень.

Детальний підручник з налаштування FCM з SNS прочитайте в цій статті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.