본문 바로가기
프로그래밍/Android

ERR_UNKNOWN_URL_SCHEME intent오류 해결방법

by Mr-후 2018. 11. 9.
반응형


ERR_UNKNOWN_URL_SCHEME intent오류 해결방법



이미 인터넷에 많은 사례가 있었지만 나도 겪어 보게 되었고 정리를 하게 되었다. 아이폰, 안드로이드 둘 다 하려니 가랭이가 찢어지는 느낌이다. 쩝 

어렵거나 힘든건 아닌데 정신이 없다. 

이번에 결제사가 추가되면서 발생된 문제인데, 아이폰의 경우는 별문제가 없었고 안드로이드의 경우 크롬이 기본 브라우저가 되면서 어쩌구~ 보안 정책이 어쩌고~ 해서 우리 앱에서 결제사 앱을 구동하지 못하는 문제가 나타났다. 

해당 결제사는 PAYCO. 그리고 삼성PAY. 

기존 소스를 보니, URL을 체크하는 부분에 intent:// 에 대한 항목이 누락되어 있어서 추가를 해주었더니 깔끔하게 해결이 되었다. 좀 과하게  try {} catch(){}문이 싸여 있는듯해서 골자가 되는 소스만 발췌를 해서 옮겨보고자 한다. 

Intent intent = null;

intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);


if (intent != null && url.startsWith("intent")) { 

//크롬, 앱설치 확인

if (getActivity() != null && getActivity().getPackageManager().resolveActivity(intent, 0) == null) {

String packageName = intent.getPackage();

if (packageName != null) {

Uri uri = Uri.parse("market://details?id=" + packageName); // 마켓으로 바로 이동

intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

return true;

}

} else { // 앱이 설치되어 있으면

int runType = Integer.parseInt(android.os.Build.VERSION.SDK);

if (runType <= 18) {

Uri uri = Uri.parse(intent.getDataString());

intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

} else {

intent.addCategory(Intent.CATEGORY_BROWSABLE);

intent.setComponent(null);

try {

if (getActivity().startActivityIfNeeded(intent, -1)) {

return true;

}

} catch (ActivityNotFoundException ex) {

return false;

}

}

}

}else { 

// 기존방식 방식

Uri uri = Uri.parse(url);

intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

}

앱을 스토어에 올려야 하는 상황이 되긴 했지만, 웹쪽에서 큰 고민하지 않고 문제가 해결되어 다행스럽다. 이러면서 또 하나 배워 가는 날이다. 



반응형