因此,我们使用Firebase在我们的iOS应用上向用户发送通知。它在控制台中运行良好,但现在我们希望允许更多人发送通知,我们并不希望他们登录Firebase来执行此操作。我们提出的一个解决方案是在我们的网站上放置一个表单,让他们登录并从那里发送通知,但我们无法让它工作。下面的代码是我们现在所拥有的精简版。它使用云消息传递API向特定主题发送HTTP POST请求,Firebase使用message_id
进行响应,但不会在任何设备上传递任何消息。
<!DOCTYPE html>
<html>
<body>
<input id="title"></input>
<input id="message"></input>
<button>Submit</button>
</body>
<script src="https://code.jquery.com/jquery-1.12.2.min.js" integrity="sha256-lZFHibXzMHo3GGeehn1hudTAP3Sc0uKXBXAzHX1sjtk=" crossorigin="anonymous"></script>
<script>
$("button").click(function () {
var title = $("#title").val();
var message = $("#message").val();
var param = {
"to" : "/topics/myTopic",
"content_available" : true,
"notification" : {
"title" : title,
"body" : message
}
};
$.ajax({
url: 'https://fcm.googleapis.com/fcm/send',
type: "POST",
headers: { 'Authorization': 'key=<myKey>', 'Content-Type': 'application/json' },
data: JSON.stringify(param),
success: function () {
alert("success");
},
error: function(error) {
alert("error: "+error);
}
});
});
</script>
</html>
在我们玩了一下之后,我们发现content_available
应该是假的,以便在我们的应用中实际显示通知。我们还确保正确实现jQuery变量。您可以看到我们改进的脚本,用于处理以下所有内容。
$("button").click(function () {
// Grab the input values
$title = $("#title").val();
$message = $("#message").val();
// Verify that the message is not left empty
if ( $message.length < 2 ){
// Message is empty
return;
}
// Create the JSON object
var paramaters = {
"to" : "/topics/test",
"content_available" : false,
"notification" : {
"title" : $title,
"body" : $message
}
};
// Send request
$.ajax({
url: 'https://fcm.googleapis.com/fcm/send',
type: "POST",
headers: { 'Authorization': 'key=$key', 'Content-Type': 'application/json' },
data: JSON.stringify(paramaters),
success: function (e) {
// Process succeeded
console.log(e);
},
error: function(error) {
// Display error message
}
});
});
我们还确保我们的服务器密钥没有直接包含在我们的代码中,正如Frank在评论中提到的那样。现在一切正常,我们成功收到通知。