ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Flutter WebView 버전 이슈 대응
    flutter 2025. 2. 20. 11:33
    반응형

    Unhandled Exception: PlatformException(error, Unknown feature SUPPRESS_ERROR_PAGE, null, java.lang.RuntimeException: Unknown feature SUPPRESS_ERROR_PAGE

    원인 : 안드로이드 내장 시스템 WebView 구현 버전이 낮아 발생하는 오류

    [ 개발자 옵션 → WebView 구현 ] 에서 버전 확인가능

    현재 80대 버전에서 오류 발생

     

    조치 방법

    Flutter MethodChannel 을 이용해서 Kotlin 을 코드로 다비이스 WebView 버전을 가져 옵니다.

    참고. 아래는 저희가 처리하는 예시 입니다.

     

    import android.webkit.WebView
    import io.flutter.embedding.android.FlutterActivity
    import io.flutter.embedding.engine.FlutterEngine
    import io.flutter.plugin.common.MethodChannel
    
    class MainActivity : FlutterActivity() {
        private val CHANNEL = "webview_version"
    
        override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
            super.configureFlutterEngine(flutterEngine)
    
            MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
                if (call.method == "getWebViewVersion") {
                    val webViewVersion = WebView(this).settings.userAgentString
                    result.success(webViewVersion)
                } else {
                    result.notImplemented()
                }
            }
        }
    }

     

    Flutter 에서 MethodChannel을 호출 합니다.

    ExerciseList.dart

    if (Platform.isAndroid) {
     const platform = MethodChannel("webview_version");
     
     try {
        final String version = await platform.invokeMethod("getWebViewVersion");
    
        // 정규식을 사용하여 WebView 버전만 추출
        RegExp regExp = RegExp(r'Chrome/(\d+)\.');
        Match? match = regExp.firstMatch(version);
    
        if (match != null) {
          String majorVersion = match?.group(1) ?? "Unknown";
          if (int.parse(majorVersion) < 100) { // 100 이상으로 올려도 괜찮습니다.
    	   
    	      updateWebView()
    	      return;
          }
        } else {
          print("WebView 버전을 찾을 수 없습니다.");
        }
      } on PlatformException catch (e) {
        print("WebView 버전 가져오기 오류: '${e.message}'.");
     }
     
       void updateWebView() async {
        final url = "https://play.google.com/store/apps/details?id=com.google.android.webview";
        if (await canLaunch(url)) {
          await launch(url);
        }
      }
    }

     

    위 내용은 웹뷰(운동) 호출 전 페이지에서 버전을 체크 후 플레이 스토어로 이동하는 로직입니다.

     

    스토어에 들어가서 받아야할 앱 이미지


     

    추가 오류 대응 법

    그래도 아래의 오류가 난다면?

     

    [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(error, Unknown feature SUPPRESS_ERROR_PAGE, null, java.lang.RuntimeException: Unknown feature SUPPRESS_ERROR_PAGE

    pubspec.yaml 에서 [webview_flutter] 해당 패키지를 제거를 해야합니다.

    flutter_inappwebview 와 webview_flutter 충돌로 인한 오류가 발생합니다.

    반응형

    댓글

Designed by Tistory.