Coder Social home page Coder Social logo

iamport-android's People

Contributors

anymate98 avatar hyp3rflow avatar kjh5833 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iamport-android's Issues

웹앱의 결제를 모바일웹 모드로 처리를 하는데 간헐적으로 결제가 되지 않습니다.

메인화면에서 로그인을 하고 결제를 한 뒤 마지막 결제 버튼을 누르면 간헐적으로 결제가 되지않고 로그인 세션까지 풀린 상태로 메인화면으로 넘어가집니다.

라이브러리는 최신의것으로 하였으나, deprecated가 된 라이브러리의 예제코드를 인용해서 작성을 하였는데 어떤게 문제인지 잘 모르겠네요

override fun shouldOverrideUrlLoading(view: WebView?,request: WebResourceRequest?): Boolean {
        if (!view?.url!!.startsWith("http://") && !view.url!!.startsWith("https://") && !view.url!!.startsWith("javascript:")) {
            var intent: Intent? = null
            return try {
                intent = Intent.parseUri(view.url, Intent.URI_INTENT_SCHEME) //IntentURI처리
                val uri = Uri.parse(intent.dataString)
                activity.startActivity(Intent(Intent.ACTION_VIEW, uri))
                true
            } catch (ex: URISyntaxException) {
                false
            } catch (e: ActivityNotFoundException) {
                if (intent == null)
                    return false
                if (handleNotFoundPaymentScheme(intent.scheme))
                    return true

                val packageName = intent.getPackage()

                if (packageName != null) {
                    activity.startActivity(
                        Intent(
                            Intent.ACTION_VIEW,
                            Uri.parse("market://details?id=$packageName")
                        )
                    )
                    return true
                }
                false
            }
        }
        return false
    }

이게 해당 소스코드입니다.
어떤문제인지 피드백 주시면 감사하겠습니다 T^T

`WebView#setWebContentsDebuggingEnabled` 호출 관련 문의

안녕하세요. 현재 Iamport SDK 내부에서 WebView#setWebContentsDebuggingEnabled static 메소드를 호출하고 있는데요.

이로 인해서 Iamport SDK init 이전에 Application에서 WebView.setWebContentsDebuggingEnabled(true)를 호출해 디버깅을 활성화 하는 경우, 활성화했던 디버깅 옵션이 다시 비활성화되게 됩니다.

SDK를 사용하는 입장에서 해당 behavior가 발생한다는걸 찾아내기가 쉽지 않았는데요.
의도가 "SDK 개발 환경에서 디버깅 활성화" 라면, 다음과 같이 조건을 변경시켜 주실 수 있을까요?

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && BuildConfig.DEBUG) {
                WebView.setWebContentsDebuggingEnabled(true)
            }

그렇게 변경한다면, SDK를 사용하는 입장에서도 setWebContentsDebuggingEnabled 메소드를 호출하는 지점을 Iamport SDK Init 이후가 아니라 자유롭게 둘 수 있을 것 같습니다.

targetSdk 31 이슈

android 31 기기로 빌드가 안됩니다.
아임포트 라이브러리의 웹뷰 액티비티에서 오류가 납니다.

Targeting S+ (version 10000 and above) requires that an explicit value for
android:exported be defined when intent filters are present

Android 14(SDK 34) 버전에서 java.lang.SecurityException 에러 발생

2023-09-27 08:57:35.611  7154-7154  AndroidRuntime          com.secondsyndrome.dalock            E  FATAL EXCEPTION: main
    Process: com.secondsyndrome.dalock, PID: 7154
    java.lang.SecurityException: com.secondsyndrome.dalock: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
     at android.os.Parcel.createExceptionOrNull(Parcel.java:3057)
     at android.os.Parcel.createException(Parcel.java:3041)
     at android.os.Parcel.readException(Parcel.java:3024)
     at android.os.Parcel.readException(Parcel.java:2966)
     at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:5684)
     at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1852)
     at android.app.ContextImpl.registerReceiver(ContextImpl.java:1792)
     at android.app.ContextImpl.registerReceiver(ContextImpl.java:1780)
     at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:755)
     at com.iamport.sdk.presentation.viewmodel.MainViewModel.registerIamportReceiver(MainViewModel.kt:170)
     at com.iamport.sdk.presentation.activity.IamportSdk.initStart(IamportSdk.kt:276)
     at com.iamport.sdk.domain.core.Iamport.corePayment$sdk_release(Iamport.kt:332)
     at com.iamport.sdk.domain.core.Iamport$payment$1.invoke(Iamport.kt:286)
     at com.iamport.sdk.domain.core.Iamport$payment$1.invoke(Iamport.kt:285)
     at com.iamport.sdk.domain.utils.PreventOverlapRun.launch(PreventOverlapRun.kt:18)
     at com.iamport.sdk.domain.utils.PreventOverlapRun.launch$default(PreventOverlapRun.kt:15)
     at com.iamport.sdk.domain.core.Iamport.payment(Iamport.kt:285)
     at com.iamport.sdk.domain.core.Iamport.payment$default(Iamport.kt:266)
     at com.secondsyndrome.dalock.fragment.branchContract.contract.BranchUnitPaymentFragment.proceedPay$lambda$22(BranchUnitPaymentFragment.kt:527)
     at com.secondsyndrome.dalock.fragment.branchContract.contract.BranchUnitPaymentFragment.$r8$lambda$-VEtHmIJUTfIT1TVkjLkjgg1894(Unknown Source:0)
     at com.secondsyndrome.dalock.fragment.branchContract.contract.BranchUnitPaymentFragment$$ExternalSyntheticLambda9.onClick(Unknown Source:2)
     at android.view.View.performClick(View.java:7659)
     at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1211)
     at android.view.View.performClickInternal(View.java:7636)
     at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
     at android.view.View$PerformClick.run(View.java:30156)
     at android.os.Handler.handleCallback(Handler.java:958)
     at android.os.Handler.dispatchMessage(Handler.java:99)
     at android.os.Looper.loopOnce(Looper.java:205)
     at android.os.Looper.loop(Looper.java:294)
     at android.app.ActivityThread.main(ActivityThread.java:8177)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
    Caused by: android.os.RemoteException: Remote stack trace:
     at com.android.server.am.ActivityManagerService.registerReceiverWithFeature(ActivityManagerService.java:13908)
     at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2570)
     at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2720)
     at android.os.Binder.execTransactInternal(Binder.java:1339)
     at android.os.Binder.execTransact(Binder.java:1275)

1.3.6 버전 사용중입니다.
IamPort.payment() 함수를 실행할 때 발생합니다.
MainViewModel에서 registerReceiver 함수에 RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED 중 하나가 등록되지 않아 발생한 이슈로 보이는데, 수정 부탁드립니다

뒤로가기 버튼으로 paymentResultCallback 반환받기

버전 1.4.4 사용 중입니다.

Iamport.payment(
    userCode = "******",
    webviewMode = webView,
    iamPortRequest = request,
    paymentResultCallback = {
        Log.d("LOG_CHECK", "paymentResultCallback\n${it}")
    }
)

위와 같이 결제 진행했을 때 뒤로가기 버튼으로 결제가 취소하면 IamPortResponse.imp_uid 값을 받을 방법은 없나요??
좌상단의 X 를 눌렀을 때와 같은 반응을 받길 원합니다

WebViewActivity 가로모드

        <activity
            android:name=".presentation.activity.WebViewActivity"
            android:hardwareAccelerated="true"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
            android:theme="@style/Theme.AppCompat.Transparent.NoActionBar">
        </activity>

안녕하세요.
가로모드를 지원하는 앱에서 아임포트 결제로 넘어갈때 화면이 회전되어 불편함이 있습니다.
화면 회전이 되도록 수정 요청드립니다

iamport-andorid 라이브러리에대한 질문

안녕하세요 iamport 에 적용에 대해 몇가지 궁금한 점이 생겨 질문을 남기게 되었습니다.

  1. 현재 버전이 0.0.5 버전인데 실제 앱에서 해당 라이브러리를 사용해도 괜찮을까요?
  2. 내부 sdk에 있는 webviewactivity 디자인을 커스텀 할 방법이 혹시 따로 있을까요?

감사합니다.

kotlin 1.6.0 빌드 오류

kotlin 1.6.0 버전에서 Iamport.create(this) 호출시 발생하는 에러 전문 첨부합니다.
iamport 1.2.0 입니다.

java.lang.NoSuchMethodError: No static method toDouble-impl(JLjava/util/concurrent/TimeUnit;)D in class Lkotlin/time/Duration; or its super classes (declaration of 'kotlin.time.Duration' appears)
        at org.koin.core.time.MeasureKt.measureDuration(Measure.kt:32)
        at org.koin.core.KoinApplication.modules(KoinApplication.kt:59)
        at com.iamport.sdk.domain.core.Iamport$createWithKoin$1.invoke(Iamport.kt:109)
        at com.iamport.sdk.domain.core.Iamport$createWithKoin$1.invoke(Iamport.kt:106)
        at org.koin.core.context.GlobalContext.startKoin(GlobalContext.kt:64)
        at org.koin.core.context.DefaultContextExtKt.startKoin(DefaultContextExt.kt:31)
        at com.iamport.sdk.domain.core.Iamport.createWithKoin(Iamport.kt:106)
        at com.iamport.sdk.domain.core.Iamport.createWithKoin$default(Iamport.kt:101)
        at com.iamport.sdk.domain.core.Iamport.create(Iamport.kt:94)

이니시스 우리카드 결제시 링크 오류

안녕하세요
현재 이니시스 우리카드 결제시 버튼에 연결된 링크가 http 프로토콜을 사용하여
보안 설정이 걸린 앱에서 이동 할 수 없는것 같습니다.
확인 부탁드립니다.

라이브러리 버전은 1.3.5을 사용중 입니다

Screen_Recording_20230314-111738_.mp4

SDK 26 대응 관련

안녕하세요. 해당 라이브러리를 이용하여 결제 모듈을 연동했습니다.
연동 진행 중 아래와 같은 이슈가 있어 공유드리며 해결 가능한 버전에 대해서 문의드립니다.

v0.0.5에서 Koin을 사용하는 Application에서 ViewModel 의존성 주입과 관련한 이슈가 있습니다.
해당 이슈는 v0.0.6-dev31 버전으로 라이브러리 버전 변경 시 해결된 것으로 보이나 Pre release 버전이라 사용하기에 조심스럽습니다. v0.0.6의 정식 release 계획은 언제인지 알 수 있을까요?

추가로 SDK 26을 사용하는 기기에서 Only fullscreen opaque activities can request orientation 이슈가 발생하는 것으로 보입니다.
해당 이슈가 해결 가능한지, 가능하다면 언제 release 되는지 궁금합니다.

네이버페이 결제과정중 웹뷰 멈춤증상

안녕하세요 담당자님
네이버 페이를 사용하다 몇가지 오류가 있어 문의 드립니다.
해당 증상이 아임포트 웹뷰 구현 과정에서 발생한건지 네이버페이쪽 문제인지 확인이 필요합니다.

재현과정

  • 네이버페이 결제를 실행합니다.
  • 로그인상태 에서 우측 상단 X 아이콘을 클릭합니다.
  • 결제 취소 Dialog가 출력됩니다.
  • Dialog 바깥영역을 터치합니다.
  • WebView 영역 전체가 아무 반응도 하지 않습니다 (스크롤, 클릭등)
  • 뒤로가기 물리버튼으로 아임포트 결제를 종료합니다.
  • 다시 네이버페이 혹은 다른 타입(이니시스, 카카오페이 등)의 결제를 실행합니다.
  • 무한로딩상태로 아무 동작도 하지 않습니다.

webview mode 관련 질문

안녕하세요

웹뷰모드 사용 시 결제 화면이 조금 늦게 등장해서 progress bar를 보여주려고 하는데
웹뷰 client 설정이 내부에 되어 있어(webViewClient = viewModel.getWebViewClient()) onPageFinished 콜백을 설정 할 수가 없는 거 같은데 이때 밑에 방식으로 loading bus를 observe 하는 방법으로 해결하면 될까요??

WebViewLiveDataEventBus.loading.observe(this, EventObserver {
            Log.d("test08", "gone 처리")
})

감사합니다.

jdk 11에서 코인 이슈

targetSdk 31 -> jdk 11 -> 31 api 기기에서는 잘 실행되나, android 30 기기에서 빌드 후 코인 에러가 납니다.
코틀린 버전은 아직 1.5.x 입니다. 아임포트 라이브러리 또한 최신버전입니다.

java.lang.NoSuchMethodError: No static method toDouble-impl(JLjava/util/concurrent/TimeUnit;)D in class Lkotlin/time/Duration; or its super classes (declaration of 'kotlin.time.Duration' appears in /data/app/.../base.apk!classes3.dex)
        at org.koin.core.time.MeasureKt.measureDuration(Measure.kt:32)
        at org.koin.core.KoinApplication.modules(KoinApplication.kt:59)
        at com.iamport.sdk.domain.core.Iamport$createWithKoin$1.invoke(Iamport.kt:109)
        at com.iamport.sdk.domain.core.Iamport$createWithKoin$1.invoke(Iamport.kt:106)
        at org.koin.core.context.GlobalContext.startKoin(GlobalContext.kt:64)
        at org.koin.core.context.DefaultContextExtKt.startKoin(DefaultContextExt.kt:31)
        at com.iamport.sdk.domain.core.Iamport.createWithKoin(Iamport.kt:106)
        at com.iamport.sdk.domain.core.Iamport.createWithKoin$default(Iamport.kt:101)
        at com.iamport.sdk.domain.core.Iamport.create(Iamport.kt:94)

v0.0.5 버전에 대한 질문

안녕하세요 현재 v0.0.5 버전을 fork 해서 사용중입니다.

앱을 release모드로 실행해도 chuck가 실행되는데.. 실행을 되지 않게 막을수 있는 방법이 있을까요?

감사합니다.

iamport-android: 1.3.4 targetsdk 31 이슈.

Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
at android.app.PendingIntent.checkFlags(PendingIntent.java:382)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:673)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:660)
at androidx.work.impl.utils.ForceStopRunnable.getPendingIntent(ForceStopRunnable.java:273)
at androidx.work.impl.utils.ForceStopRunnable.isForceStopped(ForceStopRunnable.java:151)
at androidx.work.impl.utils.ForceStopRunnable.forceStopRunnable(ForceStopRunnable.java:171)
at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:102)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)

targetSdk 31로 빌드하면 앱 빌드가 안됩니다.

정기결제를 위한 customer_uid 추가

안녕하세요. 현재 저는 정기결제를 이용하려고 하고 있습니다.

그런데 현재 IamPortRequest에 costomer_uid 파라미터가 없습니다.

해당 파라미터를 추가하여 카드등록 테스트에 성공하였는데 해당 수정사항을 반영할 방법이 있을까요?

정기결제를 최대한 빠르게 개발해야 해서요.

좋은 하루 되세요.

정기 결제를 위한 빌링키 발급에서 오류가 발생합니다! errorCode: 1114

단순 빌링키 발급을 위해 Iamport.payment에서 IamPortRequest에 pg = "html5_inicis", customer_uid, amount=0을 넣어서 payment를 호출 하는데

명시적 sdkFinish IamPortResponse(imp_success=null, success=false, imp_uid=imp_723452557067, merchant_uid=mid_1617516444789, error_msg=다날 서버로부터 받은 응답이 올바르지 않습니다.암/복호화에 실패했습니다., error_code=1114)

이런 에러가 발생합니다.

WebView로 했을때 똑같은 에러가 발생해서 iamport-android 라이브러리로 실행해봐도 같은 에러가 발생하네요.
에러에 대한 자세한 설명이 없어서 어떻게 처리해야 할 지 잘 모르겠습니다.

라이브러리 버전은 v0.0.6-dev21이며 가맹점 발급 번호는 imp54688803 입니다.

감사합니다.

타겟 sdk 버전이 31일 경우, 매니페스트 merge 문제

Manifest merger failed : android:exported needs to be explicitly specified for . Apps targeting Android 12 and higher are required to specify an explicit value for android:exported when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.

컴파일& 타겟 sdk가 31일 경우 매니페스트 merge문제가 있습니다.
안드로이드 12부터는 외부에서 액세스 할 수 있는 서비스나 액티비티등에 export를 명시적으로 표기해야 하는데 sdk 매니페스트를 보면 그렇지 않습니다.

안드로이드 12 대응이 필요합니다.

MobileWeb Mode시 webview의 chrome client가 변경되는 점

안녕하세요 MobileWeb Mode시에 IamPortMobileWebMode내부 구현 상, webview의 chrome client의 존재 유무를 무시하고 IamportWebChromeClient를 내부적으로 주입하던데,

  • chrome client를 외부에서 주입 또는
  • 작성하신 webview client 로칙처럼 webview의 chrome client 를 사용

둘 중 하나로 변경 가능할까요?

판단불가 에러가 뜹니다.

샘플 앱이 예전엔 엄청 간단하게 되어있었는데, koin에다가 코멘트 정리도 안되어있고, 엄청 복잡하게 되어있네요...

외부 라이브러리(1.2.0)을 추가 하라고 되어있는데, 샘플앱에선 해당 dependency는 없고, 전혀 다른 모듈로 되어있어 해당 sdk 모듈을 현 프로젝트로 가져와 진행해봤습니다.

샘플 앱에서 잘 진행되는 데이터로 똑같이 넣었지만, 다음과 같은 에러로 진행이 되지 않습니다.

    {
      "error_msg": "Not found PG [ nice ] and any PG in your info.",
      "imp_success": false,
      "merchant_uid": "mcuid_aos_1636622458898",
      "success": false
    }
판단불가 Payment(userCode=imp19424728, tierCode=null,
iamPortRequest=IamPortRequest(pg='nice', pay_method='card', escrow=null,
merchant_uid='mcuid_aos_1636622458898', customer_uid=null, name=아임포트 Android SDK 결제 테스트,
amount='3000', custom_data=null, tax_free=null, currency=null, language=null, buyer_name=홍길동,
buyer_tel=null, buyer_email=null, buyer_addr=null, buyer_postcode=null, notice_url=null, display=null,
digital=null, vbank_due=null, app_scheme=null, biz_num=null, popup=null, naverPopupMode=null,
naverUseCfm=null, naverProducts=null, naverCultureBenefit=null, naverProductCode=null,
naverActionType=null, cultureBenefit=null, naverInterface=null,
m_redirect_url=http://detectchangingwebview/iamport/a, niceMobileV2=true), iamPortCertification=null)

코드를 들여다보니 strategy가 설정되지 않아 그런듯한데, 어떻게 해야하나요? 저는 일단, nicepay로 연결 테스트 하고자 합니다.

현재 구현한 상태는 다음과 같습니다,

class MyViewModel:ViewModel() {
  lateinit var pg:PG
  lateinit var payMethod:PayMethod
  var userCode = "imp19424728"
  var paymentName: String = "테스트 결제"
  var merchantUid: String = ""
  var amount: String = "1000"

  val resultCallback = MutableLiveData<Event<IamPortResponse>>()

  override fun onCleared() {
    Iamport.close()
    super.onCleared()
  }

  /**
   * SDK 에 결제 요청할 데이터 구성
   */
  fun createIamPortRequest():IamPortRequest {
    val request = IamPortRequest(
      pg = "nice",      // PG 사
      pay_method = "card",      // 결제수단
      name = "아임포트 Android SDK 결제 테스트",    // 주문명
      merchant_uid = getRandomCustomerUid(),  // 주문번호
      amount = "3000",     // 결제금액
      buyer_name = "홍길동",
    )
    return request
  }

  private fun getRandomCustomerUid(): String {
    return "mcuid_aos_${Date().time}"
  }
}

Activity

class MyActivity: BaseActivity(){
  ...
  private fun init() {
    Iamport.init(this)
    binding.btnPay.setOnClickListener{onClickPayment()}
  }
  private fun onClickPayment() {
    val userCode = viewModel.userCode
    val request = viewModel.createIamPortRequest()
    Iamport.payment(userCode, iamPortRequest = request) { // TODO: }
  }
}

Application

class MyApplication:Application() {
  override fun onCreate() {
    super.onCreate()
    Iamport.create(this)
  }
}

webviewMode 사용시 질문

안녕하세요 궁금한점이 있어 문의드립니다.
webviewMode 사용시 오른쪽 상단에 x버튼이 떴다가 사라지는데요.
따로 appBar에 X버튼이 존재해서 웹뷰 자체에서 뜨는 x버튼을 안뜨게 하고싶은데요.
혹시 방법이 있을까요?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.