ios - Firebase 云消息传递的 FCM 令牌有时未注册
问题描述
我有一个带有 React Native Firebase 的 React Native 应用程序,用于推送通知/云消息传递。所以通常一切都很好,但iOS版本有一个问题。
问题是我收到的 FCM 令牌 ( const fcmToken = await messaging().getToken()
) 有时是有效的并且可以工作,有时我得到一个错误的NotRegistered
原因。
我的测试非常简单。我上传了一个版本到 TestFlight。当我现在多次安装此版本的应用程序时,收到的 FCM 令牌有时有效,有时无效。相同的代码,相同的密钥/证书,相同的设备。
另外检查 APNS 令牌,这似乎是有效的,并且每次我检查时都可以正常工作。
- 我确保我在启动时设置了 Firebase 应用程序
[FIRApp configure];
- 我检查了应用程序是否在 APNS 上注册
- 我检查了另一部 iPhone(结果是一样的)
当令牌有时有效而有时无效时,可能会出现什么问题?
任何提示都非常感谢
系统信息:
System:
OS: macOS 10.15.6
CPU: (8) x64 Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
Memory: 557.23 MB / 16.00 GB
Shell: 3.0.2 - /usr/local/bin/fish
Binaries:
Node: 14.5.0 - /var/folders/bn/f6trf3q55vj_hjplf9vy9ls00000gn/T/yarn--1598005931689-0.20174739828176125/node
Yarn: 1.22.4 - /var/folders/bn/f6trf3q55vj_hjplf9vy9ls00000gn/T/yarn--1598005931689-0.20174739828176125/yarn
npm: 6.14.5 - ~/.nodenv/shims/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 13.6, DriverKit 19.0, macOS 10.15, tvOS 13.4, watchOS 6.2
Android SDK:
API Levels: 28, 29
Build Tools: 28.0.3, 29.0.2
System Images: android-28 | Intel x86 Atom, android-28 | Google APIs Intel x86 Atom, android-28 | Google Play Intel x86 Atom
Android NDK: Not Found
IDEs:
Android Studio: 3.6 AI-192.7142.36.36.6392135
Xcode: 11.6/11E708 - /usr/bin/xcodebuild
Languages:
Java: 1.8.0_232 - /usr/bin/javac
Python: 2.7.16 - /usr/bin/python
npmPackages:
@react-native-community/cli: Not Found
react: 16.13.1 => 16.13.1
react-native: 0.63.2 => 0.63.2
npmGlobalPackages:
*react-native*: Not Found
解决方案
fcm 发送 NotRegistered 状态是因为如果你关闭基于 ios 的应用程序,fcm 和应用程序的状态将断开连接。
因此,当您通过执行 getToken 函数获取令牌值时,您将获得旧的令牌值,而不是获得新的刷新令牌。
因此,如果您执行以下代码并使用刷新令牌值再次执行发布消息,您可以正常接收消息。
const getToken = async () => {
const oldToken = await messaging().getToken();
await messaging().deleteToken(String(${fcm_send_id}), '*');
const newToken = await messaging().getToken();
if (oldToken === newToken) {
console.log('not refresh')
} else {
return newToken;
}
};
推荐阅读
- node.js - 如何在 TypeORM 中使用订阅者?
- python - 我无法将 .pb 文件转换为 .tflite
- angular - 在将组件对象显示到结构指令 *ngFor 之前对其进行修改
- vb.net - 我不能使用 system.io.file.readalltext
- java - 在 IntelliJ 中编译 Maven 项目时出现 UnsupportedOperationException
- c# - 使用 JSON.Net 解析具有唯一字符串的 JSON 对象作为父对象
- django - Django 填充 ManyToManyField 覆盖保存方法
- r - R脚本 - 根据另一列的成本标准计算不同组的总成本?
- r - 地图中的标绘点不会因价格而异
- linux - 如何使用 bash / 终端将命令传递给自定义 linux 服务