-
웹뷰 ERR_UNKNOWN_URL_SCHEME 오류 (fb://fullscreen_video~~)회사 생활/기타 지식들 2023. 8. 7. 16:20
요즘 드는 생각이지만 참 예상 못하는 곳에서 오류가 발생해서 시간을 너무 많이 잡아 먹는다는 생각이든다....
뭐 어쨋든 내가 불러오려고 하는 url은 ' https://m.facebook.com/e9pay.kh/videos/(생략)?wtsid=(생략) ' 이었다.
이것만 불러오면 따로 오류가 걸릴일이 없었겠지만 해당 url이 이상하게도 ' fb://fullscreen_video/~~?loop=false&wtsid=~~ '을 이어서 shouldOverrideUrlLoading 내에서 같이 불러왔다.
내 추측으로 페이스북에서 비디오를 불러올 경우 자사앱도 켜지는 방식으로 처리 되어 있는 것으로 추측해본다.
' fb://~~ ' 이게 뭘하는건지 잘 몰라서 좀 헤맸다.
'fb:' 로 시작하는 것은 facebook 앱을 다른 앱에서 실행시키고 싶을때 사용하는 명령어 같은 것 같다.
아래는 각색했지만 대충 이런식으로 url이 'fb://' 형식으로 올경우 아래처럼 처리하고 있었다.
@Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { if (url.startsWith("fb:")) { Intent fbIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); mContext.startActivity(fbIntent); return true; } catch (Exception e) { } }
아무리 봐도 무엇이 문제인지 몰라서 chatgpt 를 찾아본 결과 아래처럼 해보라고 나왔다.
@Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); // 특정 URL 스킴을 감지하여 처리 if (url.startsWith("fb://fullscreen_video/")) { try { // Facebook 앱 호출 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); view.getContext().startActivity(intent); return true; // 처리 완료 } catch (Exception e) { // Facebook 앱이 설치되어 있지 않거나 열리지 않는 경우 예외 처리 } } // 웹뷰에서 처리할 수 없는 URL 스킴일 경우 기본 동작 수행 return super.shouldOverrideUrlLoading(view, request); }
크게 차이점은 느끼지 못했지만 그래도 한번 넣어서 해보니 제대로 실행됐다(?!)
자세히 살펴보니 startActivity(intent) 부분에서 차이가 났다.
하지만 우리 회사 앱에서는 context를 activity에서 넘겨받아서 실행시켜고 있고 chat gpt가 알려준 방식에서는 Webview에서 context를 얻어서 실행시켜주고 있다...
//원래 있던 코드 (mContext는 MainActivity에서 가져온 Context) mContext.startActivity(fbIntent); //바뀐 코드 (View는 웹뷰에서 가져온 view) view.getContext().startActivity(intent);
해당 방식을 사용하니 페이스북 앱이 잘 켜졌다....chat gpt아니었으면 한참 헤맬뻔했다....
'회사 생활 > 기타 지식들' 카테고리의 다른 글
CameraX 사진 깨지는 현상 (1) 2024.01.25 앱 계정 이전 (0) 2023.08.07 Android Camera : (OutOfMemoryError 오류) (0) 2023.07.17 앱 빌드 속도가 느려지는 문제 (우즈벡에서) (0) 2023.05.31 회사 앱 안드로이드 출시 과정들 (0) 2023.05.20