Unity中使用WebView

@(设计)

需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数、和Unity交互,在Unity框架下其实有几种方案:

  1. 内置函数Application.OpenURL()接口
  2. 引入的Apollo自带的OpenUrl(引入了LBS X5内核)

    不过实际需求中不在使用浏览器自身的导航栏,而是全屏显示并且使用自己的导航系统,这个就有点纠结,因为上述两种打开之后都会有默认的导航条,这种情况下只能寄希望引入第三方组件来解决这个问题,比如Uniwebview或者其他的。

实现原理

浏览了一遍第三方组件,比如Github上的

https://github.com/gree/unity-webviewhttps://github.com/Kogarasi/Unity-Webview 或者Unity Store上的UniWebView,其原理离不开Android WebView , Android与我也是陌生人,具体大家可以查看github的代码吧

UniWebview

处理Apollo之外,第三方网页支持工作用的比较多可能的就是这个了.基于Android WebView开发,支持Android和IOS , 效率我没具体测试过,先给个下载地址吧:

Uniwebview-2.9.1 百度网盘下载

里面带的例子看完基本上就可以使用,主要关注几个回调接口的使用,包里面带有Android实现源码。

如果想参考手册,这里:

http://uniwebview.onevcat.com/manual(这个可以认真看下)

http://uniwebview.onevcat.com/reference/class_uni_web_view.html

如果想看中文具体的用法:

Unity中内嵌网页插件 UniWebView 2.8使用

Unity中内嵌网页插件UniWebView使用总结

附带自己使用UniWebView实现的一个库:代码链接 , 不过我的应该场景只用打开一个

遇到的问题

# 1.焦点问题

Unity工程是MainActivity ,网页是另外一个Activity, 通过监听Unity OnApplicationFocus 函数就会发现打开网页之后MainActivity会失去焦点。如果这个时候锁屏或者点击Home键,然后重新打开游戏就会发现网页是打开了,但是游戏是黑屏的,网页和Unity的通信也断开了(游戏处于Pause状态),更悲剧的是页面也关闭不了了。

优雅的解决方案,可以参考官网的说法:

In same the <activity...> tag, change the value of android:name to "com.onevcat.uniwebview.AndroidPlugin". This will use the UniWebView's activity to start your game. By doing so we, can avoid some issues for web view in Android. If you are using a main activity other than com.unity3d.player.UnityPlayerNativeActivity, com.unity3d.player.UnityPlayerActivity or com.unity3d.player.UnityPlayerProxyActivity, you have to modify the source code shipped with UniWebView to your own customization. Please refer to the next section Recompile Guide to know more about it.

具体做法可以参考:http://uniwebview.onevcat.com/manual

不过我使用的方式更粗暴一点,在Unity进入Pause的时候直接把网页隐藏,再激活的时候再打开网页,后面是否会有问题还不得而知:

    void OnApplicationPause(bool pauseStatus)
{
if (pauseStatus == true) {
if (mIsVisible){
mCurrentView.Hide();
isNeedResume = true;
}
}
else{
if (isNeedResume){
mCurrentView.Show();
}
isNeedResume = false;
}
}

2. 网页清除

经过测试,在打开一个网页后,修改网页,再次打开,显示的还是之前的网页,关闭Unity程序也无法清除缓存。解决的方法为关闭网页时调用插件自身的CleanCache ()方法,清除缓存,这样每次打开的都是新的网页。我做的可能稍稍麻烦点。在每次关闭的时候都会进行这个处理:

  while (mCurrentView.CanGoBack())
{
mCurrentView.GoBack();
}
SetVisible(false); mCurrentView.CleanCache();
mCurrentView.CleanCookie();

3. WebView 兼容性问题

Android我确实是学半天就开始用了,自觉是个易上手难精通的东西,对于WebView在不同系统不用机型下的情况不甚了解,不过H5开发那边强制接入腾讯浏览器X5内核,过程不算很难,可以参考:http://x5.tencent.com/doc?id=1003, 不过有点问题是不能直接使用MSDK的jar包直接进行开发(X5的版本太老,后续会更新),所以有导入了一份X5的jar包。

4. 视频全屏播放问题

http://blog.csdn.net/lx331675996/article/details/50634670

5. Manifest 配置

注意最后硬件加速和窗口的配置

       <activity android:name="com.onevcat.uniwebview.AndroidPlugin"
android:label="uniwebview"
android:hardwareAccelerated="true"
android:windowSoftInputMode = "stateHidden|adjustResize"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
</activity>

引申

Unity与Android交互:

https://docs.unity3d.com/Manual/PluginsForAndroid.html

Unity3D研究院之在Android中打开WebView

Unity3D研究院之打开Activity与调用JAVA代码传递参数

uniwebview 数据通信方式

https://developer.android.com/reference/android/webkit/WebView.html

WebView详解与简单实现Android与H5互调

Android中Java与JavaScript交互的几种方式

uniwebview重编译问题

UniWebView问题总结

附带测测试工程:http://git.oschina.net/rubbyzhang/UniWebView

Unity中使用WebView的更多相关文章

  1. Unity中内嵌网页插件UniWebView

    一.常见Unity中内嵌网页实现方式: 1.UnityWebCore只支持windows 2.Unity-Webview支持Android,IOS 3.UniWebView支持mac os,Andro ...

  2. Unity中使用Attribute

    Attribute是c#的语言特性 msdn说明如下: The Attribute class associates predefined system information or user-def ...

  3. 在Unity中使用UGUI修改Mesh绘制几何图形

    在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...

  4. Unity中创建二维码

    在网络上发现了一个可以把字符串转换成二维码的dll,但是我们要怎么使用他呢.不废话,直接进入主题. 用到的引用 using UnityEngine;using ZXing;using ZXing.Qr ...

  5. 在Unity中创建可远程加载的.unity3d包

    在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...

  6. 【原创翻译】初识Unity中的Compute Shader

    一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...

  7. Android中脱离WebView使用WebSocket实现群聊和推送功能

    WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...

  8. 【unity shaders】:Unity中的Shader及其基本框架

    shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...

  9. Unity中各个平台的预编译的运用方式

    1,unity中官方文档的一个操纵关键词   Platform Dependent Compilation 2,常用的预编译关键词    UNITY_EDITOR    编辑器调用.UNITY_STA ...

随机推荐

  1. mapReduce编程之Recommender System

    1 协同过滤算法 协同过滤算法是现在推荐系统的一种常用算法.分为user-CF和item-CF. 本文的电影推荐系统使用的是item-CF,主要是由于用户数远远大于电影数,构建矩阵的代价更小:另外,电 ...

  2. 【sublime xftp插件】 Host key verification failed ,错误处理

    错误背景: 1.CentOS7上面作为运行环境,Coding在本机的windows环境 2.在windows上安装sublime 3,然后保存代码通过xftp保存到centos7虚机上面. 3.Cen ...

  3. 两个已排序数组进行合并后的第K大的值--进军硅谷

    我看到此题时,首先想到一个一个比较遍历过去,这是最暴力的方法,后面我想到了已经排序,那么对每个数组进行二分,然后比较这两个值.此书第三种解法,挺不错,只对那个长度较小的数组进行二分查找,保证i+j-1 ...

  4. NTC 热敏电阻温度计算公式

    Rt = R *EXP(B*(1/T1-1/T2))这里T1和T2指的是K度即开尔文温度,K度=273.15(绝对温度)+摄氏度:其中T2=(273.15+25)Rt 是热敏电阻在T1温度下的阻值: ...

  5. Ubuntu16.04安装nginx

    //ubuntu //安装nginxcurl -LJO http://nginx.org/download/nginx-1.10.1.tar.gz tar zxvf nginx-1.10.1.tar. ...

  6. 从Eclipse迁移到Android Studio碰到的问题记录

    背景: 1. 一直在做.NET的开发,工作之余,学习了一下Android开发,写了一些Demo,当时用的Eclipse开发工具:这两天,刚好项目不是很忙,就打算把之前写的Demo,迁移到Android ...

  7. 【Java EE 学习 16 上】【dbcp数据库连接池】【c3p0数据库连接池】

    一.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: package day16.utils; import java.io.IOException; import java.lang.ref ...

  8. Android 框架练成 教你打造高效的图片加载框架(转)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41874561,本文出自:[张鸿洋的博客] 1.概述 优秀的图片加载框架不要太多, ...

  9. ubuntu下配置jdk

    1.首先下载jdk-7u51-linux-i586.tar.gz.并将它放在例如/home目录. 2.解压安装 sudo tar zxvf ./jdk-7u51-linux-i586.tar.gz  ...

  10. 提交form表单

    方法一: $.ajax({ }) $.ajax({ cache: true, type: "POST", url:ajaxCallUrl, data:$('#yourformid' ...