flutter

Flutter WebView 버전 이슈 대응

이나주니 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 충돌로 인한 오류가 발생합니다.

반응형