현재 상황은 이렇습니다.
사용자가 결제를 하려고 하는데
웹페이지를 사용할 수 없음
net:: ERR_UNKNOWN_URL_SCHEME
으로 뜨고 앱결제는 넘어가고
일반 결제는 넘어가지도 않는 문제였다.
지난 1주일간 인터넷에서 확인할 수 있는 모든 정보를 찾아서 확인하고
적용하고 온갖 난리를 부렸지만 해결 되지 않았다.
결제가 되지 않는건 중요도가 매우 높은 오류라
마음이 급했다.
원래 사용하던 라이브러리는 flutter_inappwebview ^5.8.0 버전
https://pub.dev/packages/flutter_inappwebview
flutter_inappwebview | Flutter package
A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.
pub.dev
shouldoverrideurlloading의 url이 null로 넘어오면서
핸들링을 어디서 해야 할지 몰라 많이 헤맸다.
그래서 webview_flutter 라이브러리로
pg사 테스트 url을 넣어 테스트 한 결과
된다!!
너무 바로 되어버렸다..
아래의 블로그를 참고하면 된다.
참고 블로그
[Flutter] 안드로이드 WebView 이니시스 ERR_UNKNOWN_URL_SCHEME 오류 해결
Flutter WebView 내에서 KG이니시스를 연동하여 결제 시스템 구현중 각 은행 사 어플로 인텐트 처리가 되지 않는 오류가 발생했다. WebView 에서 띄운 것이기도 하고 네이티브에서 뭘 설정해야 할 게 있
velog.io
그래서 원래 프로젝트에 적용하려고 했으나,
내 인생만 아름답지 않은걸까
다른 에러가 발생했다. (이건 원래 프로젝트의 다른 라이브러리와 충돌 및 꼬임)
다른 오류 수정하는데 오래 걸릴 것 같았고
내 멘탈이 버티지 못할 것 같았다.
그래서 정신을 차리고
flutter_inappwebview에서 적용할 수 있는 방법을 계속 찾았다.
24년 4월 8일 현재로는
아주,, 다행히도 바로 적용할만한 방법이 있었는데
바로 5.8.0에서 6.X.X 버전으로 마이그레이션이다.
마이그레이션을 결정한 이유는
Uri 타입에서 WebUri로 변경되었고 그래서 intent를 좀 더 핸들링하기 쉬워졌다.
그리고 로그로 보면 전반적으로 수정이 많이 된거 같음
InAppWebView(
initialUrlRequest:
URLRequest(url: WebUri('결제 URl') ),
initialSettings: InAppWebViewSettings(
useShouldOverrideUrlLoading: true,
resourceCustomSchemes: ['intent'],
),
onLoadResourceWithCustomScheme: (controller, url) async {
await controller.stopLoading();
return null;
},
shouldOverrideUrlLoading: (controller, navigationAction) async {
Uri? uri = navigationAction.request.url;
// MARK: - intent 결제 안됨 분기
if (Platform.isAndroid) {
if (!navigationAction.isForMainFrame) {
await controller.stopLoading();
}
}
// Third-party cookie will be blocked
return // 여기서 처리 로직 - 채널 연결하여 처리함
},
),
AndroidManifest.xml
// AndroidManifest.xml
<queries>
<package android:name="com.kakao.talk" /> <!-- 카카오톡 -->
<package android:name="com.nhn.android.search" /> <!-- 네이버페이 -->
<package android:name="com.samsung.android.spay" /> <!-- 삼성페이 -->
<package android:name="net.ib.android.smcard" /> <!-- 모니모페이 -->
<package android:name="com.mobiletoong.travelwallet" /> <!-- 신한카드 트레블월렛 -->\
<package android:name="com.samsung.android.spaylite" /> <!-- 삼성페이 -->
<package android:name="com.ssg.serviceapp.android.egiftcertificate" /> <!-- SSGPAY -->
<package android:name="com.nhnent.payapp" /> <!-- PAYCO -->
<package android:name="com.lottemembers.android" /> <!-- L.POINT -->
<package android:name="viva.republica.toss" /> <!-- 토스-->
<package android:name="com.shinhan.smartcaremgr" /> <!-- 신한 슈퍼SOL -->
<package android:name="com.shcard.smartpay" /> <!-- 신한페이판 -->
<package android:name="com.shinhancard.smartshinhan" /> <!-- 신한페이판-공동인증서 -->
<package android:name="com.hyundaicard.appcard" /> <!-- 현대카드 -->
<package android:name="com.lumensoft.touchenappfree" /> <!-- 현대카드-공동인증서 -->
<package android:name="kr.co.samsungcard.mpocket" /> <!-- 삼성카드 -->
<package android:name="nh.smart.nhallonepay" /> <!-- 올원페이 -->
<package android:name="com.kbcard.cxh.appcard" /> <!-- KB Pay -->
<package android:name="com.kbstar.liivbank" /> <!-- Liiv(KB국민은행) -->
<package android:name="com.kbstar.reboot" /> <!-- Liiv Reboot(KB국민은행) -->
<package android:name="com.kbstar.kbbank" /> <!-- 스타뱅킹(KB국민은행) -->
<package android:name="kvp.jjy.MispAndroid320" /> <!-- ISP/페이북 -->
<package android:name="com.lcacApp" /> <!-- 롯데카드 -->
<package android:name="com.hanaskcard.paycla" /> <!-- 하나카드 -->
<package android:name="com.hanaskcard.rocomo.potal" /> <!--하나카드-->
<package android:name="kr.co.hanamembers.hmscustomer" /> <!-- 하나멤버스 -->
<package android:name="kr.co.citibank.citimobile" /> <!-- 씨티모바일 -->
<package android:name="com.wooricard.wpay" /> <!-- 우리페이 -->
<package android:name="com.wooricard.smartapp" /> <!-- 우리카드 -->
<package android:name="com.wooribank.smart.npib" /> <!-- 우리WON뱅킹 -->
<package android:name="com.lguplus.paynow" /> <!-- 페이나우 -->
<package android:name="com.kftc.bankpay.android" /> <!-- 뱅크페이 -->
<package android:name="com.TouchEn.mVaccine.webs" /> <!-- TouchEn mVaccine (신한) -->
<package android:name="kr.co.shiftworks.vguardweb" /> <!-- V-Guard (삼성) -->
<package android:name="com.ahnlab.v3mobileplus" /> <!-- V3 (NH, 현대) -->
</queries>
mainActivity 에서 channel 연결하고
값이 들어올때 실행 할 수 있음 실행하고
아니면 마켓으로 이동하는 코드를 작성해야 한다.
그리고 혹시나 어디에서 결제 때문에 고생하고 있다면
천천히 하나씩 테스트 해보기를 권한다.
가끔 핫리로드는 shouldOverrideUrlLoading에 변경 된 값을
반영하지 못하는 것 같다.
참고한 사이트 링크를 걸어두겠습니다.
결제 막히는게 이번에 겪어보니,
숨막히게 스트레스를 받는다.
개발자 그만 두고 싶어졌다.
다시 한번 돈 많은 백수의 목표를 되새기며,,
https://docs.tosspayments.com/guides/webview
웹뷰(WebView) 연동하기 | 토스페이먼츠 개발자센터
브라우저가 아닌 모바일 웹뷰로 결제창을 띄울 때 카드사별 결제수단을 인증하려면 외부 앱(3rd-party 앱)을 연동해야 합니다. 연동에 필요한 외부 앱 스킴(App URL Scheme)목록과 추가 로직을 살펴보
docs.tosspayments.com
https://nkstar-ios.tistory.com/29
[Flutter] PG결제 웹뷰 만들다 만난 이슈들
안녕하세요! 오늘은 PG 결제 웹뷰를 만들다 만난 이슈들에 대해서 적어볼까 합니다. 찾으면서 자료도 많이 없었고, 황당한 이슈도 만나서 기록해두려 합니다. PG결제 웹뷰 같은 경우에는 미리 구
nkstar-ios.tistory.com
https://github.com/pichillilorenzo/flutter_inappwebview/issues/1748
ERR_UNKNOWN_URL_SCHEME error inside WebView when accessing App in Play Store · Issue #1748 · pichillilorenzo/flutter_inappwebv
I have read the Getting Started section I have already searched for the same problem Environment Technology Version Flutter version 3.10.6 Plugin version 5.7.2 Android version 11 iOS version macOS ...
github.com
https://dev-in-gym.tistory.com/40
Flutter Webview Intent 처리 ERR_UNKNOWN_URL_SCHEME
Modern Collection View 와 MVVM 패턴 가이드 [iOS] Modern Collection View & MVVM 패턴 가이드 - 인프런 | 강의 MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자
dev-in-gym.tistory.com
https://blog.steinjun.net/posts/21
Flutter webView에서 결제 서비스 붙이기
이제 앱 심사는 그만! 하이브리드 앱
blog.steinjun.net
'develop > Flutter' 카테고리의 다른 글
Framework 'flutter_inappwebview' not found 6.0.0 버전 (0) | 2024.05.14 |
---|---|
매일 사용하는 flutter 명령어 (0) | 2024.05.13 |
Flutter Setting 화면 만들기 UI 코드 - Setting_UI 커스텀 하여 사용하기 switch (0) | 2023.08.25 |
Flutter Setting 화면 만들기 UI 코드 - settings_ui (0) | 2023.08.24 |
Flutter iOS처럼 디자인하고 동작하게 만들기 - Cupertino (0) | 2023.08.21 |