"One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified" 에러

 

Compose 환경에서 Iamport의 결제 라이브러리 사용 중 "One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified" 이라는 에러를 만나게 되었다...

 

구글에서 서치해본 결과 안드로이드 버전에 따라 일어날 수 있는 오류로 리시버를 등록해서 해결을 할 수 있다는 답변이 많았고, 직접 해본 결과를 적어보겠다!

 

 

 

에러 해결 코드를 제외한 iamport 결제 라이브러리 구현 코드는 아래의 공식 페이지를 참고하길!

https://github.com/iamport/iamport-android

 

GitHub - iamport/iamport-android

Contribute to iamport/iamport-android development by creating an account on GitHub.

github.com

 

 

 

💡BroadcastReceiver().kt

class MyReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {

        when (intent.action) {
            CONST.BROADCAST_FOREGROUND_SERVICE -> {
                Log.d("SAMPLE", "MerchantReceiver BROADCAST_FOREGROUND_SERVICE")
                // 포그라운드 서비스 클릭시 호출
                // TODO: 적절한 처리가 필요
            }
            CONST.BROADCAST_FOREGROUND_SERVICE_STOP -> {
                Log.d("SAMPLE", "MerchantReceiver BROADCAST_FOREGROUND_SERVICE_STOP")
                // 포그라운드 서비스 중지버튼 클릭시 호출
                // TODO: 적절한 처리가 필요
                Iamport.failFinish()
            }
        }
    }
}

 

우선 이 코드는 iamport의 안드로이드 git에 폴더구조를 따라가다보면 나와있는 코드이다!

 

해당 페이지의 사용방법에서는 리시버를 등록하라는 부분이 없지만, 안드로이드 버전에 따라 에러가 날 수 있는 상황을 대비하여 미리 리시버를 만들어두었다!

 

 

 

💡registerReceiver()

fun payment(...) {
    val receiver: BroadcastReceiver = MyReceiver()

    val intentFilter = IntentFilter().apply {
        addAction(CONST.BROADCAST_FOREGROUND_SERVICE)
        addAction(CONST.BROADCAST_FOREGROUND_SERVICE_STOP)
    }

    context.registerReceiver(receiver,intentFilter, ComponentActivity.RECEIVER_EXPORTED)
    ...
}

 

이제 중요한 부분은 결제 라이브러리를 불러오기 전 registerReceiver로 내가 만든 리시버를 등록해주어야 위의 에러를 안 만날 수 있다!

MyReveiver()를 불러와 주고 registerReceiver()에 넣은 후, 자신이 구현할 상황에 따라서 RECEIVER_EXPORTED / RECEIVER_NOT_EXPORTED 중에 하나의 플래그를 넣어주면 된다!

 

manifest.xml에 따로 receiver를 등록해주기도 했는데 아마 registerReceiver()를 쓴다면 이 부분은 안해도 될 것이다!

(여기는 다시 확인해보고 수정하겠다)

 

 

 

 

틀린 부분이 있다면 댓글달아주길!

 

 

 

🧐 참고자료

https://www.delasign.com/blog/android-studio-kotlin-broadcast-recievers-export-or-not/#:%7E:text=As%20discussed%20at%20Google%20I,will%20throw%20a%20security%20exception

'Android > Basic & Kotlin' 카테고리의 다른 글

안드로이드 이미지 저장할 때 Provider 설정  (0) 2023.10.24
Thread와 Coroutine  (1) 2023.10.23