【问题标题】:Firebase token error TOO_MANY_REGISTRATIONSFirebase 令牌错误 TOO_MANY_REGISTRATIONS
【发布时间】:2018-05-11 19:34:51
【问题描述】:

在阅读了 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 注册应用程序”的限制。

但这不仅仅是事实,不是吗?我的意思是,这可能是真的,但它不是这个问题的全部答案。我一直在使用不同的设备进行工作和测试,而我当前的设备没有在 FCM 注册的 100 个应用程序。事实上,我的设备根本没有安装 100 个应用程序,远非如此!

有没有办法管理以前注册的设备和令牌?我尝试运行以下代码,但没有任何运气:

FirebaseInstanceId.getInstance().deleteInstanceId();

我试图确定来自不同来源(包括文档)的信息,但未能理解这实际上是如何工作的。不久前我对旧的 C2DM 和最近的 GCM 也有同样的问题。几天前我已经与 Firebase 合并以使用它的功能而不是改进的想法,但它仍然回响在我身上。

【问题讨论】:

  • 您是否尝试过在不同的设备或模拟器上运行以查看是否都产生相同的错误?
  • 我一直在尝试不同的设备,是的。我在我测试过的 4 台设备中的 2 台上都遇到过这个问题。目前我正在 Nexus 6P 上进行测试,目前它工作正常,收到令牌时没有错误。以华为 P10 为例,错误包括。没有用模拟器试过。值得补充的是,它之前和我的华为 P10 一起工作过。
  • 当我读到你的错误时,我想到了两个问题。 1)senderId 链接了多个令牌。 2)(我猜这是不可能的)是同一个令牌与多个senderIds相关联。所以你能确保以上都不是真的吗?如果您可以发布如何将客户端注册到 firebase 的代码?
  • 你能解释一下你的意思吗?你是什​​么意思 senderId 链接到多个令牌?令牌是由 Firebase 生成的,不是吗?因此,我在 getToken(...) 方法中提供的唯一内容是 senderId 本身以及“FCM”。但无论如何,getToken() 方法没有指定任何内容,并且也应该用于生成令牌。如果我登录 Firebase 控制台,则只有 1 个 senderId 可供使用。
  • 我在 Firebase Crashlytics 中看到了同样的错误。你有没有解决过这个问题?如果是,那怎么办?如果没有,那么您是否一直收到错误并且您忽略了它们。

标签: android firebase google-cloud-messaging firebase-cloud-messaging


【解决方案1】:

在与 Google 团队直接交谈后,我得到了他们的以下答复:

团队确认并澄清了他们的数据表明该设备 不是真正的普通设备,这也是:

  1. 一个虚拟设备(模拟器)被重复使用太多次

  2. 用于自动测试太多应用的真实设备

  3. 使用系统分区的克隆映像自定义的真实设备,从其他设备克隆

如果这是真机,最好的解决方法是恢复出厂设置 到设备的真实系统映像。由于该设备很可能 目前卡在 2 或 3,你介意恢复出厂设置吗 如果问题仍然存在,请告诉我们?

我已对我的设备执行了出厂重置,但问题消失了。我仍然不知道这是如何出现的以及为什么会出现。

【讨论】:

  • 我今天在使用Firebase Test Lab device 进行测试时遇到了 TOO_MANY_REGISTRATIONS 错误。这似乎可以通过案例 2 来解释:以自动化方式测试太多应用程序的真实设备
  • @StinkyTowel 不,我不确定,但是为什么如果我的应用程序实际上是我设备上唯一的应用程序,它会将这个错误喷到我身上?谷歌有时说的和实际发生的并不总是一样的。那么这可能是 GCM 服务的一个错误。
  • 有没有办法防止这种情况发生?
  • 我有同样的问题。实际上发生在我身上两次,我不使用任何机器人测试,只是普通的应用程序测试,所以在应用程序的开发/生产版本之间切换了很多。恢复出厂设置不是一种选择:(
  • 我同意@Anton 的观点,作为开发人员,您不可能将用户的设备恢复出厂设置,甚至不可能。
【解决方案2】:

我怀疑这些测试来自 Google 机器人,我刚刚发布了我的应用程序,并且在 Firebase 身份验证中出现了三个登录名,其中包含看似虚假的电子邮件,例如 johnniefernandez.39356@gmail.com。 我怀疑是机器人的所有电子邮件都以句点和“.39356”之类的数字结尾 我来自巴西,我通过 Analytics 看到用户来自美国,只有 3 个,所以我知道他们是测试,因为我还没有为美国发布我的应用程序。

【讨论】:

  • 我在将我的应用上传到 Playstore 时遇到了这个问题。自动测试(预启动)启动并触发此错误。但是我无法在本地复制。我只在启动时调用 getToken() ,是的,它总是返回相同的令牌,除非令牌被谷歌无效(非常罕见)。
猜你喜欢
  • 2016-09-18
  • 2021-09-23
  • 2018-05-27
  • 2021-04-06
  • 2018-12-26
  • 2016-10-17
  • 2016-09-25
  • 2016-02-03
相关资源
最近更新 更多