인앱결제 완료 후 앱 강제 종료 이슈

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

Unity 6000.2.6f2 - Brotli압축
apps-in-toss/web-framework : 1.5.0

[상황]

  1. Brotli 압축사용한 WebGL 빌드 후 ait 패키징 하여 콘솔에 업로드
  2. 업로드 후 QR을 사용하여 "토스 앱"에서 실행
  3. 인앱결제 테스트 진행
  4. 결제 완료 후 아이템 지급 완료.
  5. 이후 바로 강제 앱종료 됨

로그켓 확인 결과 샌드박스에서도 동일한 Exception이 발생하여, 샌드박스 이슈인지 알고 토스앱에서 테스트 진행했지만 동일하게 발생하고 있습니다.

해당 문의에 샌드박스에서 발생한 에러 스크린샷 첨부했습니다.

— 로그켓 —
--------- beginning of crash
02-11 14:19:02.415 E/AndroidRuntime(18508): FATAL EXCEPTION: mqt_native_modules
02-11 14:19:02.415 E/AndroidRuntime(18508): Process: viva.republica.toss, PID: 18508
02-11 14:19:02.415 E/AndroidRuntime(18508): java.lang.ClassCastException: java.lang.String cannot be cast to com.facebook.react.bridge.ReadableNativeMap
02-11 14:19:02.415 E/AndroidRuntime(18508): at com.facebook.react.bridge.ReadableNativeArray.getMap(:112)
02-11 14:19:02.415 E/AndroidRuntime(18508): at com.facebook.react.bridge.ReadableNativeArray.getMap(:22)
02-11 14:19:02.415 E/AndroidRuntime(18508): at com.facebook.react.bridge.JavaMethodWrapper$8.extractArgument(:100)
02-11 14:19:02.415 E/AndroidRuntime(18508): at com.facebook.react.bridge.JavaMethodWrapper$8.extractArgument(:96)
02-11 14:19:02.415 E/AndroidRuntime(18508): at com.facebook.react.bridge.JavaMethodWrapper.invoke(:356)
02-11 14:19:02.415 E/AndroidRuntime(18508): at com.facebook.react.bridge.JavaModuleWrapper.invoke(:188)
02-11 14:19:02.415 E/AndroidRuntime(18508): at com.facebook.jni.NativeRunnable.run(Native Method)
02-11 14:19:02.415 E/AndroidRuntime(18508): at android.os.Handler.handleCallback(Handler.java:995)
02-11 14:19:02.415 E/AndroidRuntime(18508): at android.os.Handler.dispatchMessage(Handler.java:103)
02-11 14:19:02.415 E/AndroidRuntime(18508): at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(:27)
02-11 14:19:02.415 E/AndroidRuntime(18508): at android.os.Looper.loopOnce(Looper.java:273)
02-11 14:19:02.415 E/AndroidRuntime(18508): at android.os.Looper.loop(Looper.java:363)
02-11 14:19:02.415 E/AndroidRuntime(18508): at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(:228)
02-11 14:19:02.415 E/AndroidRuntime(18508): at java.lang.Thread.run(Thread.java:1119)
02-11 14:25:55.515 E/AndroidRuntime(23056): FATAL EXCEPTION: mqt_native_modules
02-11 14:25:55.515 E/AndroidRuntime(23056): Process: viva.republica.toss, PID: 23056
02-11 14:25:55.515 E/AndroidRuntime(23056): java.lang.ClassCastException: java.lang.String cannot be cast to com.facebook.react.bridge.ReadableNativeMap
02-11 14:25:55.515 E/AndroidRuntime(23056): at com.facebook.react.bridge.ReadableNativeArray.getMap(:112)
02-11 14:25:55.515 E/AndroidRuntime(23056): at com.facebook.react.bridge.ReadableNativeArray.getMap(:22)
02-11 14:25:55.515 E/AndroidRuntime(23056): at com.facebook.react.bridge.JavaMethodWrapper$8.extractArgument(:100)
02-11 14:25:55.515 E/AndroidRuntime(23056): at com.facebook.react.bridge.JavaMethodWrapper$8.extractArgument(:96)
02-11 14:25:55.515 E/AndroidRuntime(23056): at com.facebook.react.bridge.JavaMethodWrapper.invoke(:356)
02-11 14:25:55.515 E/AndroidRuntime(23056): at com.facebook.react.bridge.JavaModuleWrapper.invoke(:188)
02-11 14:25:55.515 E/AndroidRuntime(23056): at com.facebook.jni.NativeRunnable.run(Native Method)
02-11 14:25:55.515 E/AndroidRuntime(23056): at android.os.Handler.handleCallback(Handler.java:995)
02-11 14:25:55.515 E/AndroidRuntime(23056): at android.os.Handler.dispatchMessage(Handler.java:103)
02-11 14:25:55.515 E/AndroidRuntime(23056): at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(:27)
02-11 14:25:55.515 E/AndroidRuntime(23056): at android.os.Looper.loopOnce(Looper.java:273)
02-11 14:25:55.515 E/AndroidRuntime(23056): at android.os.Looper.loop(Looper.java:363)
02-11 14:25:55.515 E/AndroidRuntime(23056): at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(:228)
02-11 14:25:55.515 E/AndroidRuntime(23056): at java.lang.Thread.run(Thread.java:1119)

안녕하세요 :slight_smile:
유니티 SDK를 이용하고 계신가요 ? 혹은 직접 연동을 하고 계신가요 ?

직접 연동시 processProductGrant 의 error catch 가 가능할까요 ?!

테스트는 해보겠습니다.

this.purchaseCleanup = window.IAP.createOneTimePurchaseOrder({
            options: {
                sku,
                processProductGrant: ({ orderId }) => {
                    console.log('상품 지급 로직 실행:', orderId);
                    return true;
                },
            },
            onEvent: (event) => {
                console.log('이벤트:', event);
                this.purchaseCleanup?.();
                this.sendCallback(callbackId, {
                    success: true,
                    result: event.data
                });
            },
            onError: (error) => {
                console.error('인앱결제에 실패했어요:', error.message);
                this.purchaseCleanup?.();
                this.sendCallback(callbackId, {
                    success: false,
                    errorCode: error.message
                });
            },
        });

근데 저는 이런식으로 processProductGrant통해서 서버통신하지 않고 onEvent에서 unity에 결제정보 전달하여 C#에서 통신하고있는데
이 방법이 문제가 될 수 있나요?

해결했습니다.

completeProductGrant

호출 시 OrderId를 {params: {orderid}}(객체)가 아닌 orderId(string)으로 전달하여 발생한 문제였습니다.

1개의 좋아요