基于UIWidgets的Unity应用开发(七)

unity没有集成浏览器组件,UIWidgets也没有。当移动项目需要内置浏览器的时候,只能够自己编写一个浏览器插件,或者直接用第三方的浏览器插件。

这里需要注意的是,引用第三方的浏览器插件基本都是基于ios或者安卓平台下封装的可调用类库,需要工程在对应的平台下运行才能够调用,在PC平台下一般只能强行跳出unity打开系统的默认浏览器(即调用了Applicaition.LoadURL的方法)

第三方调用的浏览器插件的webview一般会处于UI的最上层,即挡在了UGUI上面,会把原有的UI交互事件屏蔽掉,但插件一般会提供webview的一个margin方法,即webview距离上下左右边界的距离。开发的时候可以利用这个特点,在WebView的下面叠一层UI负责返回之类操作事件,然后把webview的界面叠在上面,并在不遮挡上一层UI的前提下设置margin值。例如上一层的UI有一个返回键处于界面的左上角,并且占用了y轴从上到下100个像素,则可以设置上层的webView为margin(top:100px),如图所示

当UIWidget中调用打开浏览器界面时,可以在界面的initState方法里面把浏览器界面给初始化并显示出来,当点击UI的返回按钮时,可以在pop事件里面把浏览器界面给销毁掉。代码如下:

public override void initState() {
            base.initState();
            //初始化时显示浏览器界面
            MainLogic.GetInstance().webViewManager.Load("http://www.baidu.com");
        }

//返回键的事件
Widget _buildNavigationBar() {
            return new CustomAppBar(
                () => {
                    //点击返回时关掉浏览器页面
                    MainLogic.GetInstance().webViewManager.Close();
                    if (Router.navigator.canPop()) {
                        Router.navigator.pop();
                    }
                },
                rightWidget: this.widget.showOpenInBrowser ?
                    (Widget) new CustomButton(
                        onPressed: () => StoreProvider.store.dispatcher.dispatch(new OpenUrlAction {url = this.widget.url}),
                        child: new Icon(
                            icon: Icons.open_in_browser,
                            size: 24,
                            color: CColors.Icon
                        )
                    )
                    : new Container(),
                backgroundColor: this._progress == 1 && this.widget.fullScreen ? CColors.Black : null,
                bottomSeparatorColor: this._progress == 1 && this.widget.fullScreen ? CColors.Black : null
            );
        }

unity第三方的移动端浏览器插件一般用Uniwebview,但要注意使用的版本。尤其是需要发布到appstore上时,如果使用了旧版的浏览器插件可能还会引用到xcode中的UIWebView这个组件,会导致应用通过不了appstore审核。因为苹果开发者这边已经建议用户用WKWebView替换UIWebView,如果使用了就不给上架。这边推荐一个第三方的浏览器插件ULiteWebView,有心的话也可以支持一下开发者AssetStore

猜你喜欢

转载自blog.csdn.net/ssssssilver/article/details/110876654
今日推荐