sitelink1 | |
---|---|
sitelink2 | |
sitelink3 |
얼마전부터 콘솔에서 다음과 같은 에러 메세지가 출력되기 시작했다.
com.google.firebase.messaging.FirebaseMessagingException: Requested entity was not found.
at com.google.firebase.messaging.FirebaseMessagingException.withMessagingErrorCode(FirebaseMessagingException.java:51)
at com.google.firebase.messaging.FirebaseMessagingClientImpl$MessagingErrorHandler.createException(FirebaseMessagingClientImpl.java:293)
at com.google.firebase.messaging.FirebaseMessagingClientImpl$MessagingErrorHandler.createException(FirebaseMessagingClientImpl.java:282)
at com.google.firebase.internal.AbstractHttpErrorHandler.handleHttpResponseException(AbstractHttpErrorHandler.java:57)
at com.google.firebase.internal.ErrorHandlingHttpClient.send(ErrorHandlingHttpClient.java:108)
at com.google.firebase.internal.ErrorHandlingHttpClient.sendAndParse(ErrorHandlingHttpClient.java:72)
at com.google.firebase.messaging.FirebaseMessagingClientImpl.sendSingleRequest(FirebaseMessagingClientImpl.java:127)
at com.google.firebase.messaging.FirebaseMessagingClientImpl.send(FirebaseMessagingClientImpl.java:113)
at com.google.firebase.messaging.FirebaseMessaging$1.execute(FirebaseMessaging.java:141)
at com.google.firebase.messaging.FirebaseMessaging$1.execute(FirebaseMessaging.java:138)
at com.google.firebase.internal.CallableOperation.call(CallableOperation.java:36)
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:108)
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:90)
at com.omnibuscode.util.FcmNotification.sendNotification(FcmNotification.java:98)
at com.omnibuscode.util.FcmNotification.flushNotifications(FcmNotification.java:123)
at com.omnibuscode.base.ExpiredManager.run(ExpiredManager.java:61)
at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: com.google.api.client.http.HttpResponseException: 404 Not Found
POST https://fcm.googleapis.com/v1/projects/project-43b77/messages:send
{
"error": {
"code": 404,
"message": "Requested entity was not found.",
"status": "NOT_FOUND",
"details": [
{
"@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
"errorCode": "UNREGISTERED"
}
]
}
}
처음엔 스펙이 바뀐건가? 싶어서 레퍼런스를 찾아봐도 내용이 나오지 않았는데
제미나이에게 물어보니 적당한 답을 주었다.
type.googleapis.com/google.firebase.fcm.v1.FcmError UNREGISTERED
에러는 Firebase Cloud Messaging(FCM)에서 발생하는 에러로, 해당 디바이스가 FCM에 등록되지 않았음을 의미합니다. 이 에러는 다음과 같은 경우에 발생할 수 있습니다.
- 사용자가 앱을 삭제하거나,
- 사용자가 앱의 FCM 푸시 알림을 비활성화하거나,
- FCM 서버에서 디바이스를 등록 해제하거나,
- 디바이스가 FCM 서버와의 연결을 잃어버렸을 때
이 에러를 해결하기 위해서는 다음과 같은 방법을 시도해 볼 수 있습니다.
- 사용자가 앱을 설치했는지 확인합니다.
- 사용자가 앱의 FCM 푸시 알림을 활성화했는지 확인합니다.
- FCM 서버에서 디바이스를 등록 해제하지 않았는지 확인합니다.
- 디바이스가 FCM 서버와의 연결을 잃어버리지 않았는지 확인합니다.
특히, 사용자가 앱을 삭제한 경우, 앱을 다시 설치하면 자동으로 새로운 토큰이 생성되므로, 이 에러가 해결됩니다.
다음은 에러를 해결하기 위한 구체적인 방법입니다.
사용자가 앱을 설치했는지 확인
사용자가 앱을 설치했는지 확인하려면 다음과 같은 방법을 사용할 수 있습니다.
- Google Play Console에서 앱의 설치 수를 확인합니다.
- App Store Connect에서 앱의 다운로드 수를 확인합니다.
사용자가 앱의 FCM 푸시 알림을 활성화했는지 확인
사용자가 앱의 FCM 푸시 알림을 활성화했는지 확인하려면 다음과 같은 방법을 사용할 수 있습니다.
- 앱을 열고, 설정 또는 환경설정을 엽니다.
- 알림 섹션에서 FCM 푸시 알림이 활성화되어 있는지 확인합니다.
FCM 서버에서 디바이스를 등록 해제하지 않았는지 확인
FCM 서버에서 디바이스를 등록 해제하지 않았는지 확인하려면 다음과 같은 방법을 사용할 수 있습니다.
- Firebase Console에서 앱의 디바이스 목록을 확인합니다.
- 해당 디바이스가 목록에 포함되어 있는지 확인합니다.
디바이스가 FCM 서버와의 연결을 잃어버리지 않았는지 확인
디바이스가 FCM 서버와의 연결을 잃어버리지 않았는지 확인하려면 다음과 같은 방법을 사용할 수 있습니다.
- 앱을 열고, FCM 푸시 알림을 보내 테스트합니다.
- 푸시 알림이 전송되는지 확인합니다.
이러한 방법을 시도해도 에러가 해결되지 않는 경우, Firebase 지원팀에 문의하여 도움을 받을 수 있습니다.
스펙이나 로직 에러가 아니어서 다행이다.
코드에서 토큰 에러에 대한 예외처리만 해주면 되겠다.