Android

파이어베이스 FCM 토큰 얻기 실패 (concurrent.ExecutionException, SERVICE_NOT_AVAILABLE)

남 희 2022. 4. 21. 13:54

요약 : Firebase에서 동시성 문제가 발생했다면, 네트워크와 기기의 시간 설정을 먼저 확인하자.


0. 문제가 발생한 코드

        // FCM Token 받아오기
        FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener {
            if (!it.isSuccessful) {
                Log.d(TAG, "onCreate: FCM 토큰 얻기 실패", it.exception)
                return@OnCompleteListener
            }

            // 새로운 FCM 등록 토큰을 얻음
            Log.d(TAG, "onCreate: 새로운 등록 토큰 : ${it.result}")
            
            // (생략...)
        })

파이어베이스 FCM 토큰을 얻기 위해서 위와 같이 코드를 작성했는데 토큰 받아오기를 실패하기 아래와 같은 오류를 발생시켰다.

 

1. 오류 메시지

java.util.concurrent.ExecutionException: java.io.IOException: SERVICE_NOT_AVAILABLE

 

2. 오류 원인

찾아보니 크게 두 가지가 원인이 될 수 있다고 한다.

(1) 네트워크 오류

(2) FCM 토큰 등록 시간 불일치, 오류

 

위와 같은 이유로 동시성에 문제가 생길 때 발생하는 오류인 것 같다.

 

3. 해결 방법

에뮬레이터 설정 > 시스템 > 날짜 및 시간 > 네트워크 시간대 사용 을 체크해주었더니 정상적으로 토큰을 받아왔다.

 

예전에 네트워크 시간대 사용을 끄고, 한국 시간대로 따로 설정해준적이 있었는데 그게 오류의 원인이 된 것이었다🤦‍♀️

 

 

🌸결론, Firebase 동시성 오류는 네트워크와 시간 설정을 먼저 확인하자~🌸


<참고 사이트>

https://stackoverflow.com/questions/50208426/android-fcm-java-io-ioexception-service-not-available-error-on-some-devices

https://soo84.tistory.com/entry/Error-GCM-javaioIOException-SERVICENOTAVAILABLE