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);
}
앱을 스토어에 올려야 하는 상황이 되긴 했지만, 웹쪽에서 큰 고민하지 않고 문제가 해결되어 다행스럽다. 이러면서 또 하나 배워 가는 날이다.
'프로그래밍 > Android' 카테고리의 다른 글
android res/style을 이용한 fullscreen 적용 (0) | 2018.11.22 |
---|---|
ImageView 웹서버의 이미지 적용 방법(간단) (0) | 2018.11.21 |
SMS수신 처리 (0) | 2018.11.02 |
ConnectivityManager 네트워크 접속 정보 얻기 (0) | 2018.11.02 |
갤러리 앱 데이터 연동(ContentProvider) (0) | 2018.11.01 |