阅读了100的线程和谷歌搜索后,我仍然对以下错误消息感到困惑。
当前,我正在使用Firebase Cloud Messaging,并且很短,我试图从Firebase中获得令牌,以便能够将消息发送到服务器。我尝试了这两种方法:
String token = FirebaseInstanceId.getInstance().getToken(mySenderId, "FCM");
String token = FirebaseInstanceId.getInstance().getToken();
所以在日志中,我读了此:
E/FirebaseInstanceId: Token retrieval failed: TOO_MANY_REGISTRATIONS
java.io.IOException: TOO_MANY_REGISTRATIONS
根据其他帖子和答案,这是"用C2DM/GCM/FCM注册的设备上安装的应用程序太多的原因"。我还阅读了"设备上安装的最大100 GCM/FCM注册应用程序"的限制。
,但这不仅是真的,是吗?我的意思是,这可能是正确的,但这不是这个问题的全部答案。我一直在使用不同的设备进行工作和测试,而我当前的设备没有100个在FCM上注册的应用程序。实际上,我的设备甚至根本没有安装100个应用程序!
有什么方法可以管理先前的注册设备和令牌?我尝试在没有任何运气的情况下运行以下代码:
FirebaseInstanceId.getInstance().deleteInstanceId();
我试图将来自不同来源的信息(包括文档)钉住,而不必了解其实际工作方式。不久前,我与旧C2DM遇到了同样的问题,最近也与GCM遇到了同样的问题。几天前,我已经与Firebase合并了,而是使用其功能,而改进的想法仍然回荡了我。
直接与Google团队交谈后,我从他们那里得到以下答案:
团队确认并澄清了他们的数据表明该设备 不是真正的普通设备,这也是:
一个虚拟设备(模拟器)被重复多次
- 的真实设备
一种以自动化方式用于测试太多应用程序
已通过系统分区的克隆图像定制的真实设备,从其他设备克隆
如果这是一种真实的设备,则解决该设备的最佳方法是出厂设备 到设备的真实系统图像。由于此设备是概率 目前卡在2或3中,您是否介意出厂设备重置 让我们知道问题是否仍在重现?
我在设备上进行了出厂设置,问题已经消失。我仍然看不到这是如何出现的,为什么。
我怀疑这些测试来自Google机器人,我刚刚发布了我的申请,在Firebase身份验证中,三个登录名出现在似乎是假货的电子邮件中,例如Johnniefernande.39356@gmail.com。我怀疑的所有电子邮件都是机器人,以一段时间结尾,数字类似于" .39356"。我来自巴西和我通过分析看到,用户来自美国,只有3个,所以我知道它们是测试,因为我没有为美国发布我的应用程序。
我收到了内部测试中的firebase crashlytics报告这些错误应用程序。因此,我认为这可能是Google的自动测试机器人。这是日志
Non-fatal Exception: io.invertase.firebase.crashlytics.JavaScriptError: [messaging/unknown] java.io.IOException: java.util.concurrent.ExecutionException: java.io.IOException: TOO_MANY_REGISTRATIONS
at .getToken(address at index.android.bundle:1:905545)
at .?anon_0_(address at index.android.bundle:1:1790016)
at .next((native):0:0)
at .asyncGeneratorStep(address at index.android.bundle:1:65498)
at ._next(address at index.android.bundle:1:65769)
at .tryCallOne(InternalBytecode.js:53:16)
at .anonymous(InternalBytecode.js:139:27)
at .apply((native):0:0)
at .anonymous(address at index.android.bundle:1:191460)
at ._callTimer(address at index.android.bundle:1:190409)
at ._callReactNativeMicrotasksPass(address at index.android.bundle:1:190573)
甚至有趣的是,我没有在报告这些崩溃时测试该应用程序。
同样,当我在真实设备(低端设备和高端设备)上打开应用程序时,我不会遇到任何这些崩溃。
设备信息是:
Device
Brand:Google
Model:sdk_goog3_x86_64
Orientation: Portrait
RAM free: 2.01 GB
Disk free: 29.95 GB
Operating System
Version:Android 13
Orientation: Portrait
Rooted:No
我们遇到了相同的问题,信任接受的答案,我们部署到生产(幸运的是仅占1%的用户),我们注意到这个问题也发生在真实的用户设备中。在我的情况下起作用的解决方案是扩展FirebaseMessagingService
并获得令牌覆盖的onNewToken(token: String)
class PushNotifService : FirebaseMessagingService() {
....
override fun onNewToken(token: String) {
// Do whatever you need with the token (eg: sending it to the server that will send you notifications)
super.onNewToken(token)
}
}