我是 Firebase Cloud 消息传递的新手,我需要在我的网络应用中实现通知。 如果浏览器首次请求通知,则不会发生错误,并且已成功获取令牌。但是,如果我从浏览器参数中删除通知(我使用 Chrome(并再次请求权限,它会在控制台中显示错误。
DELETE https://fcmregistrations.googleapis.com/v1/projects/teak-perigee-*****/registrations/dcVW8MdcapIy5CrSqGutkj:APA91bFoslZEsjgIk16CUfol*****************
FirebaseError: Messaging: A problem occured while unsubscribing the user from FCM: FirebaseError: Messaging: A problem occured while unsubscribing the user from FCM: Internal error encountered. (messaging/token-unsubscribe-failed). (messaging/token-unsubscribe-failed).
实际上,即使发生此错误,也会获取令牌。 但在这种情况下,我在承诺的catch
块中处理新令牌。这是触发权限时我的代码:
askForPermissioToReceiveNotifications = () => {
const messaging = firebase.messaging();
Notification.requestPermission().then(async (permission) => {
if (permission == 'granted') {
try {
const token = await messaging.getToken();
if (token) {
console.log(token);
return token;
} else {
console.log('No Instance ID token available. Request permission to generate one.');
}
} catch (error) {
console.log('An error occurred while retrieving token. ', error);
//BUT THE NEW TOKEN SUCCESSFULY FETCHED
const token = await messaging.getToken();
if (token) {
console.log(token);
return token;
} else {
console.log('No Instance ID token available. Request permission to generate one.');
}
}
}
})
.catch(error => console.log(error));
}
我不知道我是否错过了什么,我希望我能找到解决方案。
我遇到了类似的问题,并相信这可能是解释。
此问题是在 Firebase-js-sdk 的 7.0.0 版本中引入的。目前的解决方法是使用版本 6.6.2 或更低版本。我在这里提交了一个 Github 问题,供受影响的用户跟踪。
因此,要启用使用旧版本,只需更新索引中的以下内容.html:
<script src="/__/firebase/6.6.2/firebase-app.js"></script>
<script src="/__/firebase/6.6.2/firebase-messaging.js"></script>
并将以下内容更改为您的 Service Worker 文件(通常名为:Firebase-Messaging-SW.js(:
importScripts('/__/firebase/6.6.2/firebase-app.js');
importScripts('/__/firebase/6.6.2/firebase-messaging.js');
事实证明,新版本的 Firebase SDK 依赖于新的内部基础架构服务(称为 FIS(Firebase 安装服务(来定位标识符("FID"或"实例 ID"(。 如果您对应用中使用的 API 密钥使用 API 密钥限制,则必须扩展这些限制,以允许在 firebaseinstallations.googleapis.com 上使用新的 Firebase 安装服务。
要允许将有问题的 API 密钥与新的 Firebase 安装 API 配合使用,请执行以下操作:
- 转到谷歌云控制台
- 选择相关项目(即您用于应用程序的项目(
- 打开菜单并转到 API 和服务 -> 凭据
- 点击相关 API 密钥的编辑 API 密钥
- 向下滚动到 API 限制
- 从下拉列表中,选择FCM 注册 API
- 点击保存
- 等待几分钟,让谷歌服务器更新并重试...
Firebase 库存在一个错误,即将令牌保存在应用的索引数据库中。当您删除凭据时,它无法删除令牌,而是在创建新令牌时尝试获取旧令牌,这会导致错误,因为该令牌已不再存在于 Firebase 中。要解决此问题,只需按照以下步骤操作。
- 按 F12 打开谷歌浏览器开发工具
-单击"应用程序"选项卡。
-展开左侧面板中的存储部分。
-展开索引数据库
-扩展火力基地消息数据库
- 右键单击键值并将其删除
- 刷新您的应用程序,错误消失了