UniWebView UniWebView
01 / 工具

Unity 中的网页视图。.

原生 iOS + Android。一次接入 OAuth 登录、HTML5 视频、运营活动页与游戏内商城 —— 不必塞一份额外的浏览器内核。

三行 C#,两端通用。

UniWebViewExample.cs C#
var webView = gameObject.AddComponent<UniWebView>();
webView.Load("https://example.com");
webView.Show();

UniWebView 支持的更多特性,请看视频 →

首发
2013 年 11 月 1 日
平台
iOS · Android
目标
Unity 2021.3 LTS+
02 / 为何

一个成熟的工具 —— 不是又一层套娃。

UniWebView 之所以在 Unity 项目中作为网页视图的默认选择,长达十余年,有三个原因。

  1. 01 native

    原生底层,不是嵌套浏览器。

    UniWebView 直接调用 iOS 的 WKWebView 与 Android 的 WebView。性能、兼容性、网络栈与系统浏览器完全一致。不打包 Chromium,不占额外安装包体积,也不需要跟着第三方引擎升级两遍。

  2. 02 one api

    一套 API,两端通用。

    iOS 与 Android 上行为一致。C# 代码只写一份,平台差异由插件内部消化。API 表面有意保持精简 —— 一页之内能记住。

  3. 03 shipping since 2013

    十余年真实项目沉淀。

    经历每一次 Unity 引擎升级、每一次 iOS / Android API 演进、每一次 WebKit 重写 —— UniWebView 一一跟进。仍由原作者持续维护。

03 / 场景

开发者用 UniWebView 在做什么。

五个场景覆盖了游戏内网页视图的大部分工作。集成上线,当天即可。

01 ╱ OAuth · 登录

内置 Google、Facebook、Discord 等主流第三方登录流程。

UniWebView 自带主流提供商的认证流程辅助组件。Inspector 中配一次 Client ID,调用 StartAuthenticationFlow(),结果通过标准 Unity 事件回调 —— token 已类型化,无需自行处理跳转 URL。

阅读文档
GoogleSignIn.cs C#
using UnityEngine;

public class GoogleSignIn : MonoBehaviour {
    void Start() {
        var flow = GetComponent<UniWebViewAuthenticationFlowGoogle>();
        flow.StartAuthenticationFlow();
    }

    public void OnGoogleTokenReceived(UniWebViewAuthenticationGoogleToken token) {
        Debug.Log("Access token: " + token.AccessToken);
    }

    public void OnGoogleAuthError(long errorCode, string errorMessage) {
        Debug.LogError("Auth failed: " + errorCode + " " + errorMessage);
    }
}
02 ╱ 活动页 · 消息通道

CMS 推送活动页,C# 这边收类型化回调。

把活动页跑在 Web 上,让它通过 Channel Messaging 调用 Unity:用 message.GetData<T>() 拿到结构化的 JavaScript 数据,再把响应结构化地回给页面 —— 每条消息有 action 名字,C# 这边不用做字符串解析。

阅读文档
LiveOpsPage.cs C#
webView.OnChannelMessageReceived += (view, message) => {
    if (message.action == "claimReward") {
        var reward = message.GetData<RewardPayload>();
        Game.Inventory.Add(reward.itemId, reward.amount);
        message.Respond(new { success = true, balance = Game.Balance });
    }
    return null;
};
webView.Load("https://promo.example.com/event");
webView.Show();
03 ╱ 脚本 · Unity 驱动页面

从 Unity 调用 JavaScript,结果返回 C#。

页面加载完成后,用 EvaluateJavaScript(...) 执行任意 JS 表达式或函数 —— 把玩家状态推到 Web、替换 banner、触发动画都行。回调里能拿到 JS 表达式的返回值,整个往返都留在 C# 里。

阅读文档
PageDriver.cs C#
webView.OnPageFinished += (view, statusCode, url) => {
    var json = JsonUtility.ToJson(Game.Player);
    webView.EvaluateJavaScript($"hydrate({json});", payload => {
        if (payload.resultCode == "0") {
            Debug.Log("Page returned: " + payload.data);
        }
    });
};
webView.Load("https://promo.example.com/welcome");
webView.Show();
04 ╱ 视频 · HTML5

过场动画与宣传片,一行 Load() 搞定。

内嵌或全屏、自动播放或受控、YouTube / Vimeo / 自建 CDN —— UniWebView 说的是 Safari 和 Chrome 同款的 HTML5 视频。

阅读文档
Cinematic.cs C#
var theatre = gameObject.AddComponent<UniWebView>();
theatre.SetAllowAutoPlay(true);
theatre.SetAllowInlinePlay(true);
theatre.Load("https://cdn.example.com/cinematic.html");
theatre.Show();
05 ╱ Safe Browsing · 系统浏览器

需要 WebRTC、系统 Cookie 或自动填充时的选择。

有些页面只能跑在真正的系统浏览器里 —— 需要复用用户已授权摄像头/麦克风的 WebRTC 串流、用户已经在 Safari 登录的会话、系统级自动填充与阅读模式。UniWebView Safe Browsing 把 URL 直接交出去:iOS 调起 SFSafariViewController,Android 调起 Chrome Custom Tabs。

阅读文档
OpenExternal.cs C#
if (UniWebViewSafeBrowsing.IsSafeBrowsingSupported) {
    var browser = UniWebViewSafeBrowsing.Create(
        "https://chat.example.com/room/42"
    );
    browser.OnSafeBrowsingFinished += b => {
        Debug.Log("System browser dismissed");
    };
    browser.Show();
}
04 / 特性

一份精简、可预期的 API 接口。

UniWebView 在范围上有所取舍:以下是它暴露的原生 Web 视图能力,以及上方的 Unity 集成。

01 ╱ 原生底层 iOS · Android

直接调用 WKWebView 与 WebView。

iOS 走 WKWebView,Android 走 WebView。不打包第二个引擎。Cookie、本地存储、Service Worker、现代 HTML5 —— 与系统浏览器一致。

02 ╱ 消息桥 iOS · Android

C# ↔ JavaScript 双向消息。

从网页向 Unity 发送带参数的命名消息,反之亦然。运行时按需注入自定义 JavaScript,把只有 Unity 知道的事告诉网页。

03 ╱ 登录 iOS · Android

OAuth 2.0,无需 per-provider SDK。

打开第三方页面、监听跳转 URL、解析 token。一份实现覆盖 Google、Apple、Discord、Twitch —— 还有你自己的后端。

04 ╱ 布局 iOS · Android

适配 Canvas,也可作为 Texture。

通过 RectTransform 控制位置与尺寸 —— Unity UI 直接可用。或者把视图渲染为 Texture,贴在 3D 场景的网格上。

05 ╱ 本地资源 iOS · Android

离线友好的本地文件加载。

从 StreamingAssets 或 PersistentDataPath 加载 HTML、CSS、JavaScript 与图片 —— 适合预置 UI、缓存活动内容、完全离线的游戏。

06 ╱ Editor macOS Editor

在 macOS Unity Editor 中迭代。

在 Editor 中直接预览 Web 视图,省去每次都打包到设备。Editor preview 仅用于开发调试 —— 正式发布平台仍为 iOS 与 Android。

05 / 价格

按你发布的方式选择渠道。

插件本身一致 —— 三个档位的差别在于更新节奏、支持深度,以及是否需要源码访问。

Asset Store
$29.99 一次性

通过 Unity Asset Store 渠道发布。如果你的工作室已经习惯在 Asset Store 集中购买,这是顺手的选项。

  • 全部支持平台
  • v6.x 同主版本免费更新
  • 用户文档与集成指南
  • 邮件支持
在 Asset Store 购买

※ 更新与退款受 Asset Store 审核约束(约一周)。

★ Pro 与团队推荐
Source Access
$149 一次性

包含 UniWebView Store 全部权益,外加 GitHub 源码访问。

  • 全部支持平台
  • 所有未来版本(含主版本)均免费更新
  • GitHub 仓库访问
  • 面向工程师的详细文档
  • 邮件优先支持
  • 即将发布版本的提前预览
购买 Source Access

※ 结账时请准备好您的 GitHub 用户名。

✦ 推荐渠道
UniWebView Store
$29.99 一次性

直接向我们购买。更新与退款以小时计,不必等 Asset Store 的审核周期 —— 也能直接联系到作者。

  • 全部支持平台
  • v6.x 同主版本免费更新
  • 即时更新与退款
  • 邮件支持 —— 直接来自作者
  • 版本发布通知
在 UniWebView Store 购买

※ 与 Asset Store 是同一份插件 —— 但版本更新,响应也更快。

已购买旧版本? 查看升级价格 →

06 / 评价

Unity 开发者怎么说。

来自 Unity Asset Store 的真实评价。

★ 评价 01 ★★★★★

Very Impressive

Loads of features. I was able to integrate my web app into my Unity game. Well worth the money.
— izeko2004 Unity Asset Store
★ 评价 02 ★★★★★

Feature-rich WebView solution

A recent issue with an event was promptly addressed by the developer. It's great to see such active maintenance and support.
— DntasEduardo Unity Asset Store
★ 评价 03 ★★★★★

Really solid asset

Does everything it says on the can and has great support. When I was facing a problem I was instantly helped out by the developer.
— m4d Unity Asset Store

在 Unity Asset Store 查看全部评价