unity-webview is a plugin for Unity 5 that overlays WebView components on Unity view. It works on Android, iOS, Unity Web Player, and Mac (Windows is not supported for now).
unity-webview is derived from keijiro-san's https://github.com/keijiro/unity-webview-integration .
It is placed under
sample/. You can open it and import the plugin as
dist/unity-webview.unitypackageand import all files. It might be easier to extract
dist/unity-webview.zipinstead if you've imported unity-webview before.
Assets/Plugins/Editor/UnityWebViewPostprocessBuild.cs contains code for Android/iOS build, which
may cause errors if you haven't installed components for these platforms. As discussed in
https://github.com/gree/unity-webview/pull/397#issuecomment-464631894, I intentionally don't utilize
UNITY_ANDROID. If you haven't installed Android/iOS components, please comment
out adequate parts in the script.
Platform Specific Notes
Auto Graphics API/Metal Editor Support
The current implementation reiles on several OpenGL APIs so you need to disable "Auto graphics API" and specify OpenGLCore as below.
If you work only in (recent) Unity Editor, you may just disable "Metal Editor Support" (cf. https://github.com/gree/unity-webview/issues/383 ).
App Transport Security
Since Unity 5.3.0, Unity.app is built with ATS (App Transport
Security) enabled and non-secured connection (HTTP) is not
permitted. If you want to open
http://foo/bar.html with this plugin
on Unity Mac Editor, you need to open
/Applications/Unity5.3.4p3/Unity.app/Contents/Info.plist with a text
editor and add the following,
--- Info.plist~ 2016-04-11 18:29:25.000000000 +0900 +++ Info.plist 2016-04-15 16:17:28.000000000 +0900 @@ -57,5 +57,10 @@ <string>EditorApplicationPrincipalClass</string> <key>UnityBuildNumber</key> <string>b902ad490cea</string> + <key>NSAppTransportSecurity</key> + <dict> + <key>NSAllowsArbitraryLoads</key> + <true/> + </dict> </dict> </plist>
or invoke the following from your terminal,
/usr/libexec/PlistBuddy -c "Add NSAppTransportSecurity:NSAllowsArbitraryLoads bool true" /Applications/Unity/Unity.app/Contents/Info.plist
WebViewSeparated.bundle is a variation of WebView.bundle. It is based
on https://github.com/gree/unity-webview/pull/161 . As noted in the
pull-request, it shows a separate window and allows a developer to
utilize the Safari debugger. For enabling it, please define
The implementation now supports WKWebView but it is disabled by default. For enabling it, please set enableWKWebView as below:
webViewObject = (new GameObject("WebViewObject")).AddComponent<WebViewObject>(); webViewObject.Init( ... enableWKWebView: true);
Please also note that this flag have no effect on platforms without WKWebView (such as iOS7 and Android).
The main activity should have
android:hardwareAccelerated="true", otherwise a webview won't run
smoothly. Depending on unity versions, we need to set it as below (basically this will be done by
post-process build scripts).
Unity 2018.1 or newer
Based on the technique discussed in
https://forum.unity.com/threads/android-hardwareaccelerated-is-forced-false-in-all-activities.532786/ and https://github.com/Over17/UnityAndroidManifestCallback,
Assets/Plugins/Editor/UnityWebViewPostprocessBuild.cs edit the manifest to set
android:hardwareAccelerated="true". Please note this works with the
internal) build setting.
Unity 2017.x - 2018.0
Unity forcibly set
android:hardwareAccelerated="false" regardless of its setting in
Plugins/Android/AndroidManifest.xml, as discussed in https://github.com/gree/unity-webview/issues/382 (see also https://github.com/gree/unity-webview/issues/342 and https://forum.unity.com/threads/android-hardwareaccelerated-is-forced-false-in-all-activities.532786/ ), and there is no solution for automatically correcting this setting. Please export the project and manually correct AndroidManifest.xml.
Unity 5.x or older
After the initial build,
Assets/Plugins/Editor/UnityWebViewPostprocessBuild.cs will copy
sample/Assets/Plugins/Android/AndroidManifest.xml, edit the latter to add
<activity android:name="com.unity3d.player.UnityPlayerActivity" .... Then you need to build the app again to
reflect this change.
NOTE: Unity 5.6.1p4 or newer (including 2017 1.0) seems to fix the following issue. cf. https://github.com/gree/unity-webview/pull/212#issuecomment-314952793
For Unity 5.6.0 and 5.6.1 (except 5.6.1p4), you also need to modify
net.gree.unitywebview.CUnityPlayerActivity. This custom activity
implementation will adjust Unity's SurfaceView z order. Please refer
you already have your own activity implementation.
How to build WebViewPlugin.jar
The following steps are for Mac but you can follow similar ones for Windows.
- Install Android Studio.
- Open Android Studio and select "Configure/SDK Manager", select the followings with "Show Package Details", and click OK.
- SDK Platforms
- Android 6.0 (Marshmallow)
- Android SDK Platform 23
- Android 6.0 (Marshmallow)
- SDK Tools
- Android SDK Build Tools
- Android SDK Build Tools
- Open Terminal.app and perform the followings. You should find
$ export ANDROID_HOME=~/Library/Android/sdk $ export PATH=$PATH:~/Library/Android/sdk/platform-tools/bin:~/Library/Android/sdk/tools:~/Library/Android/sdk/tools/bin $ cd unity-webview/plugins/Android $ ./install.sh
The implementation utilizes IFRAME so please put both "an_unityplayer_page.html" and "a_page_loaded_in_webview.html" should be placed on the same domain for avoiding cross-domain requests.