我对Google的FCM相当陌生,并被要求开发一种能够每天发送Web推送通知的系统(FCC的使用不是强制性的,但我认为它的简单性可以使其成为好的解决方案)。
通过遵循this教程,我能够开发一个简单的网页,该网页可以获取用户的浏览器令牌并需要获得发送通知的权限。我还能够开发简单的Python程序,该程序通过使用FCM的API在执行时将通知发送给某些特定的客户端。
但是,我的项目还需要其他内容:每天午夜,我们公司的代码都会创建一个数据表,其中包含当天要发送的所有通知以及它们各自的目的地(在我们的案例中,我们可以说这是用户的令牌)。这样的表的示例是:
time dest msg
00:00 Token1 Hello, world!
01:00 Token2 Hello, Earth!
01:17 Token3 Hello, Mars!
目的地,时间和消息本身每天都会更新,除了用户使用我们的系统以外,没有其他实际模式。但是,除了执行Python脚本时可以发送简单的消息外,我无法弄清楚应该如何配置系统以每天查看该数据表并安排自己在计划的时间发送消息。 / p>
应我主管的要求,建议我使用 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)