何百ものスレッドを読んでグーグルした後、私はまだこの次のエラーメッセージについて混乱しています。
現在、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に登録されているデバイスにインストールされているアプリケーションが多すぎる」原因です。また、「デバイスにインストールされるGCM/FCM登録アプリケーションの最大数」には制限があることも読みました。
しかし、これは単に真実ではありませんね。つまり、それは本当かもしれませんが、それはこの問題に対する完全な答えではありません。私は常にさまざまなデバイスで作業とテストを行っていますが、現在のデバイスにはFCMに登録されている100個のアプリケーションがありません。実際、私のデバイスには100個のアプリケーションがインストールされていません。
以前に登録したデバイスとトークンを管理する方法はありますか?私は運がなくて次のコードを実行しようとしました:
FirebaseInstanceId.getInstance().deleteInstanceId();
私は、これが実際にどのように機能するかを理解することができずに、さまざまなソース(ドキュメントを含む)からの情報を特定しようとしました。しばらく前に古いC2DMでも、最近はGCMでも同じ問題が発生しました。私は数日前にFirebaseと統合してその機能を使用しましたが、代わりにこれを改善することを考えていますが、それでも私に反響します。
Googleチームと直接話した後、私は彼らから次の回答を得ました。
チームは、デバイスが実際には通常のデバイスではなく、これが次のいずれかであることを示すデータを確認および明確化しました。
仮想デバイス(エミュレーター)が何度も再利用されている
あまりにも多くのアプリをテストするために自動化された方法で使用される実際のデバイス
システムパーティションのCLONEイメージでカスタマイズされた実際のデバイス、別のデバイスからのCLONED
これが実際のデバイスである場合、それを解決する最善の方法は、デバイスの実際のシステムイメージに出荷時設定にリセットすることです。このデバイスは現在2または3でスタックしている可能性があるため、デバイスを出荷時設定にリセットして、問題が引き続き発生するかどうかをお知らせください。
デバイスを出荷時設定にリセットしましたが、問題は解決しました。これがどのように表示されるのか、そしてその理由はまだ正確にはわかりません。