/unity-webview

Primary LanguageJavaScriptzlib LicenseZlib

unity-webview

unity-webview is a plugin for Unity 5 that overlays WebView components on Unity view. It works on Android, iOS, Unity Web Player, and OS X (Windows is not supported for now).

unity-webview is derived from keijiro-san's https://github.com/keijiro/unity-webview-integration .

This repo also add support for special schema unity:// in the html file. So you can have link like this in your html: unity://scene?param1=http%3A%2F%2Fexample.com%3Fa%3D10%26b%3D20&param2=hello%20world%20%26%25)(%20%24%23%40)*. Note that you have to use encodeURIComponent to encode params.

Sample Project

It is placed under sample/. You can open it and import the plugin as below:

  1. Open sample/Assets/Sample.unity.
  2. Open dist/unity-webview.unitypackage and import all files. It might be easier to extract dist/unity-webview.zip instead if you've imported unity-webview before.

Platform Specific Notes

OS X (Editor)

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 OS X 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
References

WebViewSeparated.bundle

WebViewSeparated.bundle is a variation of WebView.bundle. It is based on gree#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 WEBVIEW_SEPARATED.

iOS

The implementation now supports WKWebView but it is disabled by default. For enabling it, please set enableWKWebView as below:

		webViewObject.Init(
            ...
            enableWKWebView: true);

Android

NOTE: the following steps are now performed by Assets/Plugins/Android/Editor/UnityWebViewPostprocessBuild.cs.

Once you built an apk, please copy sample/Temp/StatingArea/AndroidManifest-main.xml to sample/Assets/Plugins/Android/AndroidManifest.xml, edit the latter to add android:hardwareAccelerated="true" to <activity android:name="com.unity3d.player.UnityPlayerActivity" ..., and rebuilt the apk. Although some old/buggy devices may not work well with android:hardwareAccelerated="true", the WebView runs very smoothly with this setting.

NOTE: Unity 5.6.1p4 or newer (including 2017 1.0) seems to fix the issue. cf. gree#212 (comment)

For Unity 5.6.0 and 5.6.1 (except 5.6.1p4), you also need to modify android:name from com.unity3d.player.UnityPlayerActivity to net.gree.unitywebview.CUnityPlayerActivity. This custom activity implementation will adjust Unity's SurfaceView z order. Please refer plugins/Android/src/net/gree/unitywebview/CUnityPlayerActivity.java and plugins/Android/src/net/gree/unitywebview/CUnityPlayer.java if you already have your own activity implementation.

Web Player

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.