- ์น๋ทฐ ์ฌ์ฉํ๊ธฐ:
webview_flutter
๋ผ์ด๋ธ๋ฌ๋ฆฌ - ์น๋ทฐ์์ HTTP ํ๋กํ ์ฝ ํ์ฉํ๊ธฐ
์น๋ทฐ(Web View)๋ Android๋ iOS ์ฑ์์ ์นํ์ด์ง๋ฅผ ์๋ฒ ๋ํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ ธ์ ๋ทฐ(View)๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๊ฐ OS์ ๋ด์ฅ๋์ด์๋ ์น๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์นํ์ด์ง๋ฅผ ๋ ๋๋งํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ด์ฃ . ๋ค์ดํฐ๋ธ ์ฑ์ ๋์ ์ฑ๋ฅ๊ณผ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ฑ์ด ๊ฐ์ ์ด์ง๋ง, ์ฝํ ์ธ ๊ฐ ์์ ๋์ด ๋ฐฐํฌ๋ ๋๋ง๋ค ์ฌ์ฉ์๊ฐ ์ฑ ์ ๋ฐ์ดํธ๋ฅผ ํด์ผํ๋ค๋ ์ ์ ๋จ์ ์ ๋๋ค. ๊ฐ๋ฐ ๊ด์ ์์ OS ํธํ์ฑ๋ ๋จ์ ์ด ๋ ์ ์๊ณ ์. ์น๋ทฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋จ์ ๋ค์ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ค๋ง, ๋ค์ดํฐ๋ธ ์ฑ์ฒ๋ผ ๋๊ปด์ง ์ ๋๋ก ์น๋ทฐ์์์ ๋์์ ์ต์ ํํ ํ์๊ฐ ์์ต๋๋ค.
iOS ์ฑ ํ๋ ์์ํฌ์์๋ WKWebView
, Android ํ๋ ์์ํฌ์์๋ WebView
ํด๋์ค๋ฅผ ํตํด ์น๋ทฐ๋ฅผ ์ง์ํ๋๋ฐ์, Flutter์์ ์น๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด webview_flutter
์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, webview_flutter
์์ ์ ๊ณตํ๋ WebView
์์ ฏ์ ์ฌ์ฉํ์ฌ ์นํ์ด์ง๋ฅผ ์๋ฒ ๋ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ํ ์ฑ์ ๋น๋ํ๋ฉด iOS์ WKWebView
, Android์ WebView
ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ๊ฒ ๋น๋๋ฉ๋๋ค.
On iOS the WebView widget is backed by a WKWebView; On Android the WebView widget is backed by a WebView.
ios/Runner/Info.plist
ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํฐ ํ๋ฉด์ด ๋์ต๋๋ค.
<key>io.flutter.embedded_views_preview</key>
<string>YES</string>
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. WebView
์์ ฏ์ ์ฌ์ฉํ๊ณ , ๋ณด์ฌ์ค ์นํ์ด์ง์ URL์ ์ง์ ํด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ javascriptMode
์์ฑ์ ์ฌ์ฉํ์ฌ JavaScript ์ฌ์ฉ์ ํ์ฉํด์ฃผ์ด์ผํ๋๋ฐ์, Android์ iOS์ ์น๋ทฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก JavaScript๋ ์ฌ์ฉ ์ค์ง๋๊ธฐ ๋๋ฌธ์
๋๋ค. ํ๋ ๋ ์ฃผ์ํ ์ ์ ์น๋ทฐ๋ HTTPS ํ๋กํ ์ฝ๋ง ์ง์ํ๋ค๋ ๊ฒ์ด๊ณ ์, ํ
์คํธ ๋ฑ์ ์ํด ํน๋ณํ HTTP ํ๋กํ ์ฝ์ ์ง์ํด์ผํ๋ค๋ฉด ๋ณ๋์ ์ค์ ์ด ํ์ํฉ๋๋ค.
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
// ..
WebView(
initialUrl: 'https://flutter.dev',
javascriptMode: JavascriptMode.unrestricted,
)
/android/app/src/main/AndroidManifest.xml
ํ์ผ์ ๋ค์ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค.
<application
android:name="io.flutter.app.FlutterApplication"
android:label="flutterdemo"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true">
/ios/Runner/Info.plist
ํ์ผ์ ๋ค์ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>