PG사 연동 Alloy Widget (iamport.kr 이용)

다시 살펴보니 기억 났습니다. ios10에서 urlscheme의 경우 plist에 추가하지 않은 모든 urlshceme을 canOpenURL에서 fasle를 줍니다. 이건 ios10 네이티브에서 변한사항이에요. 그래서 카드사 모든 urlscheme을 등록하거나 해야하는데 카드사들 앱이 이떤 urlscheme을 사용하는지에 대해 잘 정리되어 있는 곳도 없죠. 그래서 그냥 TiUIWebview.m을 수정했어요.
제가 그당시에 너무 정신없이 프로젝트 마무리할때라 정확히 기억하지 못하고 있었네요…
일단 해당 파일만 해당 파일만 우선 첨부합니다. import github 저장소에는 내일중에 수정할께요. 일단 이 파일로 대체하시면 될거에요.

TiUIWebView.m.zip (9.6 KB)

여기서 핵심은 바로 아래 변경사항입니다.

	// if ([uiApp canOpenURL:newUrl] && !willHandleUrl) //기존코드
	if (!willHandleUrl) //변경한 코드
1개의 좋아요

안드로이드의 경우에 발생하는 문제도 알려주시면 시간날때 같이 살펴볼께요.

잠깐짬이나서 말나온김에 까먹지 않으려고 바로 관련내용 업데이트 했습니다.
5.5.1.GA 기준으로 제가 사용하는 TiSDK를 업로드하고 관련해서 설치법 업데이트 했습니다…

1개의 좋아요

5.5.1.GA 쓰시는군요…
저흰 아직도 5.2.2.GA인데…
깃허브에 올려온 5.2.2.GA_webview_blacklist 도 되는거죠 ?..^^

올려주신 파일 덕분에 ios는 문제가 해결되었습니다.

안드로이드는 버전 6.0.1 에서 테스트 해봤는데…ISP 결제는 잘 되는 반면에 앱결제 및 일반결제는 결제완료가
안되는군요.
KB국민카드앱(신한Fan앱) 결제를 선택하면 카드앱을 실행시키고 거기서 결제 프로세스가 완료되고 마지막에 원래 앱으로 돌아가서
확인 버튼을 눌러야 결제 승인이 나는데 원래 앱으로 돌아가는거 까진 되는데 결제화면에서 아무것도 표시되지 않고 그냥 가만히 있네요.
시간되시면 한번 확인좀 부탁드리겠습니다. 감사합니다~

P.S. 안드로이드 버전 6 에서만 문제인가 했는데…그 아래 버전에서도 똑같이 발쌩하네요…흠…
Ti SDK 버전을 높여서 해봐야되나…

혹시 Ti SDK 5.5.1 에서만 되고 5.2.2에선 안되는건 아니겠죠?
버전 바꾸면 손댈게 너무 많은데… T.T

ios10응 5.2.2에서는 테스트해보지 않았습니다만 위에 첨부한 tuiwebview.m을 적용하셨을 때 잘 된다고 하셨죠?

그리고 따로 문의주신 yostudioiamport 라는 urlscheme는 임의로 정한것이여서 다른것드로 변경해도 상관없습니다. 다만 정상 작동하려면 관련된 모든 곳을 바꾸셔야할거에요.

생각해 보니 ios는 url scheme을 tiapp.xml 에 명시해 주었는데…안드로이드는 명시해 준게 없어서…
구글에서 검색해서 해봤는데…잘 되질 않네요…
tiapp.xml 에서 안드로이드 부분 url scheme 명시해 준 예시를 좀 볼 수 있을까요?

이 부분을 넣어야 하는거 같은데…어떻게 넣어야 할지…안드로이드 manifest 부분 명시 예좀 부탁드립니다.

안드로이드에서 url scheme 명시하는 부분은 어찌어찌 찾아서 추가해 주었습니다만…계속해서 마지막에 이니시스 결제창에서 결제완료가 안떨어지고 blank 페이지만 떨어집니다.

로그를 봤는데 위와 같이 Mixed Content Mode 에서 문제가 있는거 같네요.
검색해 봤는데…android sdk version 21 이상에서는 디폴트 세팅으로는 쿠키값을 엑세스 못하는거 같네요.

안드로이드에서는 MixedContentMode 값을 MIXED_CONTENT_ALWAYS_ALLOW 바꿔주면 된다는데 Titanium webview 에서 어떻게 해야할지 모르겠네요.

좀더 찾아보겠습니다.

저는 이니시스가 아닌 lg u+를 쪽만 써봤는데 그래서 문제가 없는 것일까요?

그리고 안드로이드에서는 url scheme 같은 건 따로 없고 그냥 패키지명으로 intent를 이용하기만 하면됩니다.
혹시 최근 android 버전(7.x)에서 변동사항이 있는건가요?

혹시 특정 카드만 안되는건 아닌가요?^^ 지금 말씀 하신 이 문제에 대한 자세한 사황과 함께 github issue로 발급해주시면 거기서 이 이슈를 함께 이야기하면 좋을 것 같아요.

금방 안드로이드 네이티브 앱을 만들어 테스트 해봤는데…
확실히 안되네요…그래서 위에 해결방안처럼 쿠키세팅을 해주니까 해결되네요.
7.0에서 변동이 있다기 보다는 안드로이드 5.0 이상부터는 저렇게 해야 된다네요.

이니시스 PG는 최초 접속시 쿠키에 상점 id 등을 저장했다가 앱 결재 선택시 해당 앱으로 이동했다가
다시 돌아오면서 페이지 리로딩 되면서 쿠키에 저장되어 있는 값을 읽어 결재 여부를 처리하는데…
쿠키 접근이 안되니 페이지가 blank로 떨어지는거 같습니다.

LG U+ 는 다른 방식인가 보네요. PG사 마다 은행마다 처리 방식이 조금씩 틀린거 같습니다.
ISP는 잘 되거든요.

티타늄 웹뷰에서 위치럼 쿠키값 세팅하는게 안되면 급한대로 안드로이드는 모듈을 만들어서 처리해야 할거 같네요. 에고…

https에서 http로 보내는 것 때문에 그런 것 같네요. cookie관련 말고 MixedContentMode만 설정하면 안되나요?

잠깐 검색해보니 안드로이드 네이티브 구현에서 vguardend://를 호출하는 부분만 예외처리한 예제도 보이던데요.

widget.js의 12번째 줄을 다음 처럼 vguardend:// blacklistedURLs 에 추가해보시겠어요? 이것 만으로도 될 것 같아서요.

$.webView.blacklistedURLs = (OS_IOS)?['ispmobile://','yostudioiamport://']:['intent://','ispmobile://','market://','yostudioiamport://','vguardend://'];
1개의 좋아요

네…위 방법으로도 해봤는데…onBlock에 걸리긴 하지만 최종 결과값을 읽어 올수가 없는거 같아요.
native에서 MixedContentMode 만 설정해서 해봤는데…써드파티 쿠키 접근을 허용하지 않으면
결과는 마찬가지로 아무값도 못가져오네요.
iamport android native 샘플에서도 MixtedContentMode 와 써드파티 쿠키 허용을 하도록 코드를 수정했더군요.

근데 티타늄에서 MixedContentMode를 설정할 수 있는 방법이 있나요? 전 못찾겠던데…