【发布时间】: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