欢迎加入Unity业内qq交流群:956187480
qq扫描二维码加群
https://download.csdn.net/download/qq_37310110/11004869
一直有人咨询锁屏失去焦点的问题 整理了一下(安卓端)
在安卓平台使用最大的问题是Unity失去焦点的问题。经过使用OnApplicationFocus方法测试,调用平台WebView打开界面时默认打开另一个Activity,Unity本身为一个Activity,当打开另外一个Activity时Unity会失去焦点,此时焦点不在Unity程序身上,如果锁屏或者按Home键再打开后只会调出最后一个显示的Activity,也就是UniWebView打开的网页,而不是Unity程序。也就是在打开网页的界面按下Home键或者锁屏后程序将无法正常返回。主要的问题在于Unity程序和打开的网页属于不同的Activity,解决的方法为更改Unity工程中的安卓配置文件,使一个Activity继承于另一个,显示在同一个Activity上。
参考博客地址: https://blog.csdn.net/qq_37310110/article/details/80469144
插件下载连接 : https://download.csdn.net/download/qq_37310110/10318627
在官方提供的sdk里 最新的3.0版本跟之前的旧版本2.8差距其实还是很大的,但是功能上只加不减,且调用起来更加方便。2.8版本的sdk插件里面有一个完整的demo包括各种调用,但是3.0版本的就没有相关的demo所以我们只能参考2.8的demo,我这里把官方的版本迁移说明文档地址 给大家 http://docs.uniwebview.com/guide/migration-guide.html 一点要看研究一下。本篇基于3.0版本。
前面简单记录了一下unity打开原生浏览器访问网址的方法,今天咱们可以稍微深入一下一起探讨unity前端应用如何跟访问的web后端进行数据上的交互。有兴趣的可以研究一下UniWebView的api http://docs.uniwebview.com/api/。在aoi上很多东西都写的很清楚。
今天我这里主要记录unity前端如何跟web后端数据传输。参考文档
web服务器传过来的消息模式是要遵循一定的模式的,即unity接收到的额message里面需要包含三个属性Scheme,path,Args。主要可以通过path属性区分消息类型。
然后我们如果想要给web服务器传输数据就可以调用他们的js脚本把参数传过去然后运行方法,websever就弄了个获取到你传过去的 数据。
还有一个功能就是unity前段可以自己自定义js脚本方法添加到web端,然后再传入参数自己调用,web后端也是可以得到你说传输的数据的。
而这些操作结束后都会有一个回调函数,里面的参数就可以用来验证执行 的结果是否成功。
上一篇博客我只是抱着打开网页的态度去看的,所以有很多细节就没有记录下来,包括ios 安卓双平台的差异化以及界面布局等一些自带属性的调整,如果大家这方面有需求的话就去参考文档吧,写的很清楚了已经。
最后我把我这这个完整代码贴出来 不应定大家都适用的我这是经过服务器老大哥的指点后精简的
#region 模块信息
// **********************************************************************
// Copyright (C) 2018 Blazors
// Please contact me if you have any questions
// File Name: TheInterface
// Author: romantic123fly
// WeChat||QQ: at853394528 || 853394528
// **********************************************************************
#endregion
using com.blazors.xfd.msg.req;
using System;
using UnityEngine;
using UnityEngine.UI;
public class WebSceneManager : BaseManager {
public Text result;
#if UNITY_IOS || UNITY_ANDROID || UNITY_WP8
public void LoadWeb(string url) {
var _webView = CreateWebView();
_webView.Frame = new Rect(0, 0, Screen.width, Screen.height/2);
_webView.Load(url);
_webView.Show();
_webView.OnPageFinished += _webView_OnPageFinished;
_webView.OnMessageReceived += _webView_OnMessageReceived;
_webView.OnPageErrorReceived += _view_OnPageErrorReceived; ;
_webView.OnShouldClose += _view_OnShouldClose;
}
//网页加载出错
private void _view_OnPageErrorReceived(UniWebView webView, int errorCode, string errorMessage)
{
GameTool.MakeToast("网页加载出错:" + errorMessage);
}
//接收到网页事件消息
private void _webView_OnMessageReceived(UniWebView webView, UniWebViewMessage message)
{
GameTool.MakeToast("接收到信息:" + message.Path);
switch (message.Path)
{
case "close":
Destroy(webView.gameObject);
webView.CleanCache();
break;
case "applist"://app列表
var applistdata = "{'qq':'qq1','wechat':'微信','weibo':'微博'}";
RunScript(webView, "jxfd.applistcallback" + "(" + applistdata + ")");
break;
case "phones"://通信录
var phonesdata = "{'小明':0,'小花':'2','小了':'5'}";
//RunScript(webView, "jxfd.phonescallback" + "(" + phonesdata + ")" );
var r = new CMD_CR_UploadPhones();
r.userId = PlayerManager.GetInstance.UserID;
r.phonesJson = phonesdata;
NetworkManager.GetInstance.SendMessage(r,Protocol.S_LOBBY.MDM_H5,Protocol.S_LOBBY.CMD_H5.SUB_C_UP_PHONES);
break;
case "callrecord"://通话记录
var callrecorddata = "{'A':2,'B':'3','C':'6'}";
RunScript(webView, "jxfd.callrecordcallback" + "(" + callrecorddata + ")" );
break;
case "cgps"://gps信息
var cgpsdata = "{'东经':'168.26.24','北纬':'56.23.1'}";
RunScript(webView, "jxfd.cgpscallback" + "(" + cgpsdata + ")" );
break;
default:
break;
}
}
///
/// 向web界面添加js方法
///
/// 当前web
/// js方法名
/// 传输的特定类型
/// web传输的json数据
public void AddScript(UniWebView webView,string js,string type,string data) {
if (webView == null) {
result.text = "Please open the web view first.";
return;
}
webView.AddJavaScript(js, (payload) => {
if (payload.resultCode.Equals("0"))
{
GameTool.MakeToast("添加成功");
RunScript(webView, type+"("+data+","+js+");");
}
else
{
GameTool.MakeToast(payload.resultCode);
}
});
}
//运行web界面js函数
///
/// 运行web界面js函数
///
/// 当前web界面
/// 运行js的相关参数
public void RunScript(UniWebView webView,string parameter) {
GameTool.MakeToast("运行参数:" + parameter);
webView.EvaluateJavaScript(parameter, (payload) => {
if (payload.resultCode.Equals("0"))
{
GameTool.MakeToast("运行js函数成功: " + payload);
}
else
{
GameTool.MakeToast("运行js函数失败:"+payload.resultCode);
}
});
}
//网页加载成功
private void _webView_OnPageFinished(UniWebView webView, int statusCode, string url)
{
//AddScript(webView);
GameTool.MakeToast("网页加载成功");
}
//退出关闭网页
private bool _view_OnShouldClose(UniWebView webView)
{
webView.Hide();
webView.OnMessageReceived -= _webView_OnMessageReceived;
webView.OnShouldClose -= _view_OnShouldClose;
webView.OnPageErrorReceived -= _view_OnPageErrorReceived; ;
webView.OnPageFinished -= _webView_OnPageFinished;
webView.OnMessageReceived -= _webView_OnMessageReceived;
webView.CleanCache();
Destroy(webView.gameObject);
GameTool.MakeToast("网页关闭");
return true;
}
UniWebView CreateWebView() {
var webViewGameObject = new GameObject("UniWebView");
var webView = webViewGameObject.AddComponent();
return webView;
}
#else
void Start() {
Debug.LogWarning("UniWebView only works on iOS/Android/WP8. Please switch to these platforms in Build Settings.");
}
#endif
}
插件下载连接 : https://download.csdn.net/download/qq_37310110/10318627
参考博客地址: https://blog.csdn.net/qq_37310110/article/details/80469144
欢迎加入Unity业内qq交流群:956187480
qq扫描二维码加群