我正在尝试在两个设备之间发送推送通知,以获得一个微小的原型。它们都是集成了 firebase SDK 的 Vue.js 应用程序,因此为了实现推送通知流,我部署了一个 firebase 函数,但是当我从任何设备调用它时,会收到 CORS 错误作为响应。
两种设备(移动设备和桌面设备(具有相同的客户端代码,并且知道彼此的令牌(存储到 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.
你能用functions.https.onCall
触发器吗?
请参阅 https://firebase.google.com/docs/functions/callable 。
借助适用于 Firebase 客户端的云函数客户端 SDK,您可以直接从 Firebase 应用调用函数。若要以这种方式从应用调用函数,请在云函数中编写并部署 HTTPS 可调用函数,然后添加客户端逻辑以从应用调用该函数。
我用来调用函数的 URI 是错误的。解决了。对不起这个问题。