Intent 처리를 했음에도 ERR_UNKNOWN_URL_SCHEME 발생할 때 처리

김범현·2023년 5월 23일
0

귀찮아서 웹에서 애플로그인 처리한 것도 안남겼는데..
이번에 좀 고생을 해서 기록을 남긴다.

우리 서비스는 웹으로 개발 후에 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을 넘기는 식으로 처리했다.

휴...어려워라

profile
프론트엔드 개발자 입니다.

0개의 댓글