我提到了多个代码片段,几乎在所有地方,请求权限以允许使用 Angular 推送通知的代码都与此类似:
export class AppComponent {
constructor(swPush: SwPush) {
if (swPush.isEnabled) {
swPush.requestSubscription({
serverPublicKey: VAPID_PUBLIC
}).then(subscription => {
// save subscription object in db
}).catch(console.error);
}
}
}
我在我的应用程序中实现了相同的功能,但我面临这个问题 -
用户第一次加载应用程序时,浏览器会请求许可,如果用户“允许”,promise 将被解析,订阅对象将存储在 db 中。
下次用户加载应用程序时,由于已经授予权限,promise 将被解析,订阅对象将再次存储在 db 中。所以db中会有重复的条目。
为避免数据库中的重复条目,我想了解这两种解决方案中哪一种更好(或者是否有其他更好的方法):
1.如果没有活动订阅,则调用 swPush.requestSubscription
export class AppComponent {
constructor(swPush: SwPush) {
if (swPush.isEnabled) {
swPush.subscription.pipe(take(1)).subscribe(subscription => {
if(subscription == null) {
swPush.requestSubscription({
serverPublicKey: VAPID_PUBLIC
}).then(subscription => {
// save subscription object in db
}).catch(console.error);
}
}
}
}
}
2.让 swPush.requestSubscription 每次在页面加载时被调用,并处理在服务器端代码中插入重复的数据库条目。