programing

Firebase 토큰 오류 TOO_MANY_REGISTRATIONS

closeapi 2023. 6. 5. 23:56
반응형

Firebase 토큰 오류 TOO_MANY_REGISTRATIONS

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에 대해서도 같은 문제가 있었습니다.저는 며칠 전에 파이어베이스와 합병하여 이에 대한 개선을 생각하는 대신 기능을 사용했지만, 여전히 저에게 반향을 일으키고 있습니다.

Google 팀과 직접 대화한 결과 다음과 같은 답변을 받았습니다.

이 팀은 데이터를 확인하고 명확하게 확인한 결과 장치가 실제로는 일반 장치가 아니며 다음 중 하나임을 알 수 있었습니다.

  1. 가상 디바이스(에뮬레이터)가 너무 많이 재사용됨

  2. 너무 많은 앱을 테스트하기 위해 자동화된 방식으로 사용되는 실제 장치

  3. 시스템 파티션의 클론 이미지를 사용하여 사용자 지정된 실제 디바이스, 다른 디바이스에서 클론 생성

실제 장치인 경우 이를 해결하는 가장 좋은 방법은 장치의 실제 시스템 이미지로 공장 초기화하는 것입니다.이 장치는 현재 2 또는 3에 고착되어 있을 수 있으므로 공장에서 장치를 재설정하고 문제가 여전히 재현되는지 알려 주시겠습니까?

장치에서 공장 초기화를 수행했는데 문제가 사라졌습니다.나는 여전히 이것이 어떻게 나타날 수 있고 왜 나타날 수 있는지 정확히 알지 못합니다.

저는 이 테스트들이 구글 로봇에서 나온 것이라고 의심합니다. 저는 방금 제 애플리케이션을 게시했고 소방 기반 인증에서 johnniefernandez와 같이 가짜로 보이는 이메일과 함께 세 개의 로그인이 나타납니다.39356@gmail.com .제가 로봇이라고 의심하는 모든 이메일은 마침표와 숫자로 끝납니다. ".39356" 저는 브라질에서 왔고, 저는 Analytics를 통해 사용자가 미국에서 온 3명뿐이라는 것을 알게 되었습니다. 그래서 저는 그것들이 테스트라는 것을 이해합니다. 왜냐하면 저는 미국을 위해 제 앱을 게시하지 않았기 때문입니다.

내부 테스트 중인 앱에 대해 파이어베이스 충돌 분석에 이러한 오류가 보고되었습니다. 이상한 부분은 5명의 사용자에게 발생했다는 것입니다. 앱에 액세스할 수 있는 사람은 저밖에 없기 때문에 이상합니다.그래서 저는 그것이 아마도 구글의 자동화된 테스트 봇이라고 생각합니다.여기 로그가 있습니다.

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)
        }
    }

언급URL : https://stackoverflow.com/questions/47529977/firebase-token-error-too-many-registrations

반응형