我正在尝试向我的博览会应用程序实施推送通知。我完成了设置工作,并且将Expo推送令牌(例如:ExponentPushToken [pRLp83O--xxxxxxxx])写入了后端。
这是我的PushNotifications.js
import { Notifications } from "expo";
import * as Permissions from "expo-permissions";
const PUSH_ENDPOINT =
"https://backend.url";
export default async function registerForPushNotificationsAsync() {
const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
// Stop here if the user did not grant permissions
if (status !== "granted") {
alert("No notification permissions!");
return;
}
console.log(status);
// Get the token that identifies this device
let token = await Notifications.getExpoPushTokenAsync();
console.log(token);
// POST the token to your backend server from where you can retrieve it to send push notifications.
return fetch(PUSH_ENDPOINT, {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
token: token
})
});
}
我通过useEffect在App.js
中调用它,以便立即获得许可以显示应用程序是否已打开:
import registerForPushNotificationsAsync from "./components/PushNotifications";
useEffect(() => {
registerForPushNotificationsAsync();
}, []);
现在的问题是,每次保存时,令牌都会写入我的数据库。它不会再次询问权限,因此似乎可行,但是令牌已写入我的数据库。
这仅是因为Expo会在保存时重建吗?还是在以后发布我的应用程序时出现问题?如果是这样,我在做什么错?我正在考虑某种方式检查令牌是否已经存在,但是文档中没有提到该令牌,因此我不确定是否确实必要。