귀찮아서 웹에서 애플로그인 처리한 것도 안남겼는데..
이번에 좀 고생을 해서 기록을 남긴다.
우리 서비스는 웹으로 개발 후에 Flutter 웹뷰로 띄워서 서비스 하고 있다.
(웹뷰 띄울 땐 inappwebview를 사용하고 있다.)
이번에 결제 기능을 붙여야해서 토스 결제위젯을 붙였다.
커스텀 할 게 없기 때문에, 토스의 가이드를 보고 그대로 따라 했는데,
KB은행 서비스로 결제하려고만 하면 ERR_UNKNOWN_URL_SCHEME 에러가 발생을 하는 것이었다.
문제는 에러화면이 뜨고 그 다음 작업은 이어 나간다는 것..(앱이 없으면 스토어로 간다던가)
토스 개발자분들에게 질문했으나 재현이 안돼서 더 할 수 있는게 없었다.
이틀간 꼬박 삽질을 하다가,
문득 이건 아닐거야..(왜냐면 이 문제 해결기에선 Inappwebview의 버전이 5.4.3 이전일 때 발생한다고 하셔서)라고 참고를 안했던 글이 떠올랐다.
if (Platform.isAndroid) {
await _convertIntentToAppUrl(currentUrl).then((value) async {
currentUrl = value;
});
try {
// 추가된 부분
if (!navigationAction.isForMainFrame) {
await controller.stopLoading();
}
//
await launchUrlString(currentUrl);
} catch (e) {
currentUrl = await _convertIntentToMarketUrl(uri.toString());
await launchUrlString(currentUrl);
}
} else if (Platform.isIOS) {
await launchUrlString(currentUrl);
}
위 코드 처럼 수정하고
InAppWebViewGroupOptions에 resourceCustomSchemes: ['intent'] 추가,
shouldOverrideUrlLoading 에 아래 코드 추가했더니 해결됐다.
onLoadResourceCustomScheme: (controller, url) async {
await controller.stopLoading();
return null;
},
셋 중 하나라도 빠지면 안되더라.
테스트를 더 하다가 페이북/ISP 앱이 없을 때 앱 다운로드 하러가기 버튼을 클릭했더니 또 ERR_UNKNOWN_URL_SCHEME 에러가 발생했다.
Intent를 보니 fallback url이 있길래, fallback url이 있으면 그걸 리턴하고 아니면 intent.dataString을 넘기는 식으로 처리했다.
휴...어려워라