You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows平台Unity项目内嵌WebView实现支付功能技术问询

在Windows平台Unity项目中实现内嵌WebView用于支付流程的方案

我之前做Windows桌面端Unity项目时,刚好遇到过要内嵌WebView处理Paypal、Stripe这类支付流程的需求,Application.OpenURL()跳外部浏览器确实没法满足内嵌的要求,而且现成插件大多只支持移动端。这里分享几个我实测可行的方案:

方案一:基于UWP的WebView组件(适合微软商店发布)

如果你的项目可以导出为UWP应用,这是最官方的途径:

  • 将Unity项目导出为UWP工程,在UWP的XAML界面中添加WebView(或更现代的WebView2)控件
  • 在Unity中通过UWP与Unity的交互API,触发UWP端打开指定支付链接
  • 监听WebView的导航事件,当支付完成后页面跳转到自定义回调URL(比如mygame://payment-complete?status=success)时,拦截请求并通知Unity处理后续逻辑

简单代码示例:

  • Unity端触发支付:
public void OpenPaymentWebView(string paymentUrl)
{
    #if UNITY_WSA_10_0
        Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
            Windows.UI.Core.CoreDispatcherPriority.Normal,
            () => {
                var mainPage = (Windows.UI.Xaml.Window.Current.Content as Windows.UI.Xaml.Frame).Content as MainPage;
                mainPage.OpenPaymentPage(paymentUrl);
            });
    #endif
}
  • UWP端拦截回调:
private async void MyWebView_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
    if (args.Uri.Scheme == "mygame")
    {
        args.Cancel = true;
        // 解析回调参数并通知Unity
        UnityPlayer.UnitySendMessage("GameManager", "OnPaymentComplete", args.Uri.Query);
    }
}

方案二:封装CEF(Chromium Embedded Framework)(灵活度最高)

CEF是跨平台的嵌入式浏览器框架,Windows下可以封装成Unity可用的插件:

  • 下载CEF的Windows预编译包,把相关DLL、资源文件放到Unity的Plugins/Windows文件夹
  • 编写C# wrapper调用CEF的API,创建内嵌在Unity窗口中的WebView
  • 监听CEF的页面加载事件,同样通过自定义URL回调处理支付完成通知

核心思路代码:

public class CEFWebView : MonoBehaviour
{
    [DllImport("CEFWrapper")]
    private static extern void InitCEF();
    
    [DllImport("CEFWrapper")]
    private static extern IntPtr CreateWebView(int x, int y, int width, int height);
    
    [DllImport("CEFWrapper")]
    private static extern void LoadUrl(IntPtr webViewPtr, string url);

    void Start()
    {
        InitCEF();
        IntPtr webView = CreateWebView(100, 100, 800, 600);
        LoadUrl(webView, "https://your-payment-gateway.com");
    }
}

注:你需要自己编写C++的CEF封装DLL,或者找现成的CEF Unity封装资源(注意版权)

方案三:WinForms/WPF WebView2嵌入(快速原型首选)

如果只是做快速验证,或者不需要深度集成,可以用WinForms的WebView2控件:

  • 导出Unity的Windows独立版,编写一个WinForms程序,把WebView2控件作为子窗口嵌入到Unity主窗口中
  • 通过进程间通信或文件监听的方式,让Unity和WinForms程序交互,传递支付URL和回调结果

关键步骤:

  1. 获取Unity窗口的句柄(可通过GetActiveWindow()或进程名查找)
  2. 在WinForms中创建WebView2控件,设置其父窗口为Unity窗口的句柄
  3. 支付完成后,WebView2拦截回调URL,通过命名管道或消息通知Unity

通用注意事项

  • 所有方案都需要处理支付回调的安全性,比如验证支付结果的签名,避免客户端被篡改
  • 测试时要确保支付页面在WebView中能正常加载,部分支付网关可能需要启用JavaScript、Cookie等权限
  • 打包时注意包含WebView相关的依赖文件(比如CEF的资源、WebView2的运行时)

内容的提问来源于stack exchange,提问作者Naxin

火山引擎 最新活动