Периодическая отправка веб-push-уведомлений Firebase Cloud Messaging (FCM) (AWS?) - PullRequest
0 голосов
/ 08 января 2019

Я довольно новичок в Google FCM, и меня попросили разработать систему, способную ежедневно доставлять веб-push-уведомления (использование FCM не было обязательным, но я подумал, что его простота может сделать его хорошим раствор).

Следуя этому руководству, я смог разработать простую веб-страницу, которая получает маркер браузера пользователя и требует разрешения на отправку уведомлений . Я также смог разработать простую программу на Python, которая отправляет уведомления некоторым конкретным клиентам при выполнении , используя API FCM.

Однако мой проект требует еще одного: каждый день в полночь код нашей компании создает таблицу данных, содержащую все уведомления, которые будут отправлены в течение дня, вместе с соответствующими адресатами (в нашем случае, можно сказать, это токены пользователя). Пример такой таблицы:

time        dest        msg
00:00       Token1      Hello, world!
01:00       Token2      Hello, Earth!
01:17       Token3      Hello, Mars!

Места назначения, время и сами сообщения обновляются каждый день, без реального шаблона, кроме использования нашей системы пользователем. Однако, кроме того, что я могу отправлять простые сообщения при выполнении скрипта Python, я не могу понять, как мне следует настроить систему, чтобы каждый день просматривать эту таблицу данных и планировать саму отправку сообщений в запланированное время.

По запросу моего руководителя мне было предложено использовать для этого сервисы AWS , такие как: AWS EC2, Lambda, SNS и CloudWatch . Однако я не совсем уверен, как это сделать.

Пока это мои фрагменты кода:

index.html

<html>
<title>Firebase Messaging Demo</title>
<style>
    div {
        margin-bottom: 15px;
    }
</style>
<body>
    <form method = "post">
      ID:<br>
      <input type="text" id="userId">
    </form>
    <div id="token"></div>
    <div id="msg"></div>
    <div id="notis"></div>
    <div id="err"></div>
    <script src="https://www.gstatic.com/firebasejs/4.6.2/firebase.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>

      $(document).on('submit', 'form', function(e) {
        e.preventDefault();
        valueUserId = document.getElementById("userId").value;

        MsgElem = document.getElementById("msg")
        TokenElem = document.getElementById("token")
        NotisElem = document.getElementById("notis")
        ErrElem = document.getElementById("err")
        var config = {
          apiKey: "MY_API_KEY",
          authDomain: "MY_AUTH_DOMAIN",
          databaseURL: "MY_DB_URL",
          projectId: "MY_PROJECT_ID",
          storageBucket: "MY_BUCKET",
          messagingSenderId: "MY_SENDER_ID"
        };
        firebase.initializeApp(config);

        const messaging = firebase.messaging();
        messaging
            .requestPermission()
            .then(function () {
                MsgElem.innerHTML = "Notification permission granted." 
                console.log("Notification permission granted.");

                // get the token in the form of promise
                return messaging.getToken()
            })
            .then(function(token) {

              csvContent = valueUserId.concat(",",token);
             /* writeToFile(csvContent);*/
              console.log(csvContent);

            })
            .catch(function (err) {
                ErrElem.innerHTML =  ErrElem.innerHTML + "; " + err
                console.log("Unable to get permission to notify.", err);
            });

        messaging.onMessage(function(payload) {
            console.log("Message received. ", payload);
            NotisElem.innerHTML = NotisElem.innerHTML + JSON.stringify(payload);
        });


      });



    </script>

</body>
</html>

sender.py

# Send to single device.
from pyfcm import FCMNotification

push_service = FCMNotification(api_key="MY_OTHER_API_KEY")

# OR initialize with proxies
# Your api-key can be gotten from:  https://console.firebase.google.com/project/<project-name>/settings/cloudmessaging
data_message = {
    "icon_url" : "MY_ICON"
}
registration_id = "MY_TOKEN"
message_title = "MY_MESSAGE_TITLE:"
message_body = "MY_MESSAGE_BODY"
result = push_service.notify_single_device(registration_id=registration_id, message_title=message_title, message_body=message_body, data_message=data_message)
print (result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...