我使用 fcm 向 Android、iOS 和网络发送通知。它适用于网络,但不适用于移动应用程序。
这是我的代码:
//后端
const firebase = require("firebase-admin");
const { getMessaging } = require("firebase-admin/messaging");
const serviceAccountKey = require('./firebase-config.json')
const projectId = "PROJECT ID HERE"; // i'm replacing it with the real projectid
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccountKey),
databaseURL: `https://${projectId}.firebaseio.com`
});
const sendNotification = async (user, tokens) => {
const message = {
data: {
title: "Test Message",
body: JSON.stringify({
content: `this is a test message`,
username: user.name,
userId: user._id
}),
},
tokens,
};
try {
const res = await getMessaging().sendMulticast(message)
console.log('successfully send message')
console.log(res)
} catch (error) {
const code = error?.errorInfo?.code;
console.log("Error sending message:", code);
console.log("error", error);
}
};
}
当我记录结果时,它说消息/通知已成功发送,但我在移动应用程序上没有收到通知。我确实在网上得到了它。我正在为移动应用程序使用本机反应。 (我正在使用react-native作为移动应用程序)
当我尝试使用 firebase 仪表板中的测试云消息功能时,会发生相反的情况,我在移动应用程序上收到通知,但在网络上却没有。
这是网络代码
/firebase-messaging-sw.js
self.addEventListener("push", (event) => {
const data = event.data.json()?.data;
const body = JSON.parse(data.body);
console.log(url);
const options = {
body: body.content,
icon: "/logo.png",
};
event.waitUntil(self.registration.showNotification(data.title, options));
});
尝试更新消息对象的密钥。将“数据”更改为“通知”。
const sendNotification = async (user, tokens) => {
const message = {
data: { //Update this to notification
title: "Test Message",
body: JSON.stringify({
content: `this is a test message`,
username: user.name,
userId: user._id
}),
},
tokens,
};
try {
const res = await getMessaging().sendMulticast(message)
console.log('successfully send message')
console.log(res)
} catch (error) {
const code = error?.errorInfo?.code;
console.log("Error sending message:", code);
console.log("error", error);
}
};
}