我正在尝试在两个设备之间发送推送通知,以获取小型原型。它们都是集成了Firebase SDK的Vue.js应用程序,因此为了实现推送通知流程,我部署了firebase函数,但是当我从任何设备调用它时,都会收到CORS错误作为响应。
两个设备(移动设备和台式设备)具有相同的客户端代码,并且彼此知道令牌(存储到Firebase实时数据库中)。 该功能仅使用Firebase消息发送推送通知。
Firebase功能:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const cors = require('cors')({ origin: true });
admin.initializeApp();
exports.notification = functions.https.onRequest((req, res) => {
return cors(req, res, () => {
if (req.method === "POST") {
return admin.messaging().send(notification)
.then(result => {
console.log(result);
res.status(200).send("ok")
})
.catch(err => res.status(500).send(err));
} else {
return res.status(400).send("Method not allowed");
}
});
});
客户代码:
send(notification, token) {
return fetch("https://[zone]-[project].cloudfunctions.net/notifications", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ token, notification })
});
}
错误是:
Access to fetch at 'https://[zone]-[project].cloudfunctions.net/notifications' from origin 'https://[project].web.app' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
答案 0 :(得分:2)
您可以使用functions.https.onCall
触发器吗?
请参见https://firebase.google.com/docs/functions/callable。
用于Firebase客户端SDK的云功能可让您直接从Firebase应用程序调用功能。要以这种方式从您的应用程序中调用函数,请在Cloud Functions中编写并部署一个HTTPS Callable函数,然后添加客户端逻辑以从您的应用程序中调用该函数。
答案 1 :(得分:0)
我用来调用该函数的URI错误。解决了抱歉,这个问题。