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()를 쓴다면 이 부분은 안해도 될 것이다!
(여기는 다시 확인해보고 수정하겠다)
틀린 부분이 있다면 댓글달아주길!
🧐 참고자료
'Android > Basic & Kotlin' 카테고리의 다른 글
안드로이드 이미지 저장할 때 Provider 설정 (0) | 2023.10.24 |
---|---|
Thread와 Coroutine (1) | 2023.10.23 |