Я довольно новичок в 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)