我正在尝试通过Firebase云功能发送博览会推送通知,以便将通知从Web应用程序发送到已下载移动应用程序的设备。
当我从Postman发送请求时,它工作正常……我得到了正确的答复,并且通知显示在我的手机上。但是,当我尝试从Web应用程序发出请求时,我在功能日志中得到了此请求:
函数执行耗时22毫秒,状态为:“崩溃”
任何想法为什么会这样?到目前为止,找不到任何可以解释的信息。
这是我的职能:
<div id="visu">
<div id="element1"class="flex-item">
<textarea class= "name" id="name1" >Apud has gentes, quarum exordiens initium ab Assyriis </textarea>
</div>
<div id="element2" class="flex-item">
<textarea class= "name" id="name2">Ultima Syriarum est Palaestina </textarea>
</div>
<div id="element3" class="flex-item">
<textarea class="name" id="name3">Saepe posset commodi contentionem honoris quam incidissent optimis adipisci commod.</textarea>
</div>
</div>
我对邮递员的发帖请求
exports.reportNotification = functions.https.onRequest((request, response) => {
const tokens = request.body.expoPushToken;
let messages = [];
tokens.forEach((token) =>
messages.push({
to: token,
title: "title",
body: "message",
sound: "default",
_displayInForeground: "true",
})
);
fetch("https://exp.host/--/api/v2/push/send", {
method: "POST",
headers: {
Accept: "application/json",
"Accept-encoding": "gzip, deflate",
"Content-Type": "application/json",
},
body: JSON.stringify(messages),
})
.then((res) => response.status(200).json({ res: res }))
.catch((err) => response.status(400).json({ error: err }));
});
然后我在Web应用程序中使用axios调用该函数:
{
"expoPushToken": ["ExponentPushToken[xxx-xxxxxxxxxxxxx]"]
}
我检查了一下,此请求上的令牌的格式与邮递员上的令牌相同。
谢谢。
答案 0 :(得分:1)
这是一个cors问题,通过此修改得以解决:
exports.reportNotification = functions.https.onRequest((request, response) => {
cors(request, response, () => {
const tokens = request.body.expoPushToken;
let messages = [];
tokens.forEach((token) =>
messages.push({
to: token,
title: "title",
body: "message",
sound: "default",
_displayInForeground: "true",
})
);
axios.post("https://exp.host/--/api/v2/push/send", JSON.stringify(messages), {
headers: {
"Accept": "application/json",
"Accept-encoding": "gzip, deflate",
"Content-Type": "application/json",
},
})
.then((res) => response.status(200).json({ res: res }))
.catch((err) => response.status(200).json({ error: err }));
});
});