# Messaging System
You can send a message from the web view to UniWebView. It helps you implement a way to "control" your game from the web page.
UniWebView inspects all links starts from uniwebview://
by default. That means if your user taps a link starting with "uniwebview", an OnMessageReceived
event will be raised with a UniWebViewMessage
as its parameter.
If you have this on your page:
<a href="uniwebview://action?key=value&anotherKey=anotherValue">Tap Me</a>
And you have this event listener in Unity:
webView.OnMessageReceived += (view, message) => {
print(message.RawMessage);
};
When the link is tapped, "uniwebview://action?key=value&anotherKey=anotherValue" will be printed.
UniWebView parses the input and pass it to you in the OnMessageReceived
event, as the message
parameter. In the example above, you have:
message.Scheme // "uniwebview"
message.Path // "action"
message.Args // {"key": value, "anotherKey": "anotherValue"}
DUPLICATED KEY
If you are using the same key in the URL query, UniWebViewMessage
will parse them to the same key as well, with the values concatenated by a comma. For example, a URL like uniwebview://action?key=1&key=2
will be parsed to a message with Args
as {"key": "1,2"}
.
NAVIGATION
Besides of an HTML link, a location.href
JavaScript will also send a message to UniWebView and trigger the event. The code below is identical to example above:
location.href = "uniwebview://action?key=value&anotherKey=anotherValue";
# Adding your own scheme
By default, "uniwebview" is inspected in UniWebView Messaging System. You can also add your own URL schemes. Call AddUrlScheme
with the one you need:
// Start to inspect all `myscheme://` URLs.
webView.AddUrlScheme("myscheme");
A tricky thing here is, you can even set http
and https
as the scheme. It will prevent all loading of web resources. A use case is that you do not want your user to leave the current page: first load your page, then, in the OnPageFinished
event, disable all navigating by adding the "http(s)" scheme:
webView.Load("https://yourpage.com");
webView.OnPageFinished += (view, statusCode, url) => {
webView.AddUrlScheme("http");
webView.AddUrlScheme("https");
// Now your user will not be able to navigate to other pages hosted on HTTP or HTTPS.
};
Limitation
The messaging system is built on URL and Unity's message sender. It means you cannot send the unlimited size of data at once. The allowed max length of a URL is different from devices and system versions. But a safe length is ~16KB for a URL. If you have something huge to send from the web page to Unity and encountered some problems, it would be better to split them into smaller pieces.