unity webgl获取页面Token信息,及加载StreamingAssets下.txt
接收JS端传回的token信息,如:
jwt~eyJhbGciOiJIUzI1NiIsIlR5cGUiOiJKd3QiLCJ0eXAiOiJKV1QifQ.eyJwYXNzd29yZCI6IjEyMzQ1NiIsImV4cCI6MTY0MjEzODIyNCwidXNlcm5hbWUiOiIxMTkwMjA1MTY5In0.ucdrtqfwOpaEzQkMHOWY7S_nvSTgOroRPa2T9y3H4q0
或者UserInf信息,如:
userinfo~{"id":111,"mobile":"18400000000","password":null,"photo":null,"qq":null,"sex":0,"sn":"100100100","username":"刘X","clazzId":null,"clazzNo":"2021122801","roleId":1,"createDate":"2021-12-29T09:21:58","updateDate":null,"creator":null,"updater":null}
在打包出来的web文件内找到index,做如下修改
<script>
var gameInstance = UnityLoader.instantiate("gameContainer", "Build/TestDiaoYong2.json", {onProgress: UnityProgress});
if(!window.localStorage)
{
alert("浏览器不支持localstorage");
}
else
{
//写入localStorage
var storage=window.localStorage;
}
</script>
在打包出来的web文件内找到UnityProgress文件(路径:TemplateData/UnityProgress),做如下修改
if (progress == 1)
{
gameInstance.logo.style.display = gameInstance.progress.style.display = "none";
getLocalStorage();
}
}
function getLocalStorage(){
//读取localStorage,并调用函数传递信息到C#
JSCommand('jwt~' + storage.getItem('jwt'));
JSCommand('userinfo~' + storage.getItem('userinfo'));
}
//JS向C#传递信息
function JSCommand(str) {
console.log("JSCommand--" + str);
//三个参数:第一个参数是脚本所在物体名,第二个是脚本函数名,第三个是发送信息
gameInstance.SendMessage('MainScript', 'JSFunction', str);
}
接下来在场景中创建对象(名字:MainScript(根据js的填写进行修改)) ,添加脚本(名字:MainSceneManager(可任意起)),脚本内方法如下:
(对服务返回数据进行处理时需要导入Dll文件到Unity工程中
dll链接:链接:https://pan.baidu.com/s/1TdyJYOnicoDYxmvv5Md46A
提取码:o0gx )
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System;
using UnityEngine.Networking;
//使用json需要dll
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Runtime.InteropServices;
[System.Serializable]
public class TestData
{
public string url_login;
public string url_score;
}
public class MainSceneManager : MonoBehaviour
{
//该方法通过页面端调用 接收webgl的js传递的信息
string token = "";
string userInf = "";
string sn = "";
string classid = "";
public void JSFunction(string str)
{
public void JSFunction(string str)
{
Debug.LogWarning("接收js传递信息");
string[] tmpArray = str.Split('~');
if (tmpArray[0] == "jwt")
{
token = tmpArray[1];
Debug.LogWarning("token--" + token);
//token--eyJhbGciOiJIUzI1NiIsIlR5cGUiOiJKd3QiLCJ0eXAiOiJKV1QifQ.eyJwYXNzd29yZCI6IjEyMzQ1NiIsImV4cCI6MTY0MjEzODIyNCwidXNlcm5hbWUiOiIxMTkwMjA1MTY5In0.ucdrtqfwOpaEzQkMHOWY7S_nvSTgOroRPa2T9y3H4q0
}
if (tmpArray[0] == "userinfo")
{
//转换接收到数据,进行处理
JObject tmpObj = (JObject)JsonConvert.DeserializeObject(tmpArray[1]);
//{"id":111,"mobile":"18400000000","password":null,"photo":null,"qq":null,"sex":0,"sn":"100100100","username":"刘X","clazzId":null,"clazzNo":"2021122801","roleId":1,"createDate":"2021-12-29T09:21:58","updateDate":null,"creator":null,"updater":null}
userInf = tmpArray[1];
sn = tmpObj["sn"].ToString();
classid = (int)tmpObj["clazzId"];
}
}
}
}
当在网页端启动inde.html时,调用上述方法。
当获取的userinfo信息含有数组时,如:
{"code":0,"msg":"查询班级","timestamp":"2022-01-14 03:30:29","data":[{"username":"张3","id":1,"name":"计算机","info":null,"teacherSn":null,"function1":0,"function2":1,"function3":1,"createDate":"2021-12-29T09:22:35","creator":null,"updateDate":null,"updater":null,"clazzNo":"2021122801"},{"username":"张4","id":2,"name":"计算机","info":null,"teacherSn":null,"function1":1,"function2":1,"function3":1,"createDate":"2021-12-29T09:22:35","creator":null,"updateDate":null,"updater":null,"clazzNo":"2021122802"},{"username":null,"id":3,"name":"计算机","info":"2323","teacherSn":null,"function1":1,"function2":0,"function3":0,"createDate":"2021-12-31T11:35:11","creator":null,"updateDate":null,"updater":null,"clazzNo":"202112280刘"}],"ttl":null,"count":3}
可使用下述(加载StreamingAssets下。。。)中的方法进行处理;
加载StreamingAssets下urlID.txt获取服务器地址,携带token和服务器交互,获取跟多信息,并进行处理;
上述urlID.txt内地址需要自己修改成需要地址;
如何加载web端StreamingAssets下urlID.txt,调用Unity_Get请求(携带Token)以及对获取到包含数组的字符串处理如下:
using System.Collections;
using UnityEngine;
using System;
using UnityEngine.Networking;
//使用json需要dll
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
[System.Serializable]
public class TestData
{
public string url_login;
public string url_score;
}
public class MainSceneManager : MonoBehaviour
{
float timeStamp; //时间戳
string token = "";//登陆成功后token值
string sn = "";
int classid;
int func1;
int func2;
int func3;
string url_login = ""; //获取Get请求地址
string url_score = ""; //上传数据地址
void Start()
{
System.TimeSpan st = System.DateTime.UtcNow - new System.DateTime(1970, 1, 1, 0, 0, 0);//获取时间戳Debug.Log(Convert.ToInt64(st.TotalSeconds) );//时间戳转换Int64
timeStamp = Convert.ToInt64(st.TotalMinutes);
}
// 接收webgl的js传递的信息
public void JSFunction(string str)
{
Debug.LogWarning("接收js传递信息");
string[] tmpArray = str.Split('~');
if (tmpArray[0] == "jwt")
{
token = tmpArray[1];
Debug.LogWarning("token--" + token);
Data.token = token;
}
if (tmpArray[0] == "userinfo")
{
JObject tmpObj = (JObject)JsonConvert.DeserializeObject(tmpArray[1]);
sn = tmpObj["sn"].ToString();
classid = (int)tmpObj["clazzNo"];
StartCoroutine(Get_UrlData());
}
}
//通过urlID.txt 查找地址
IEnumerator Get_UrlData()
{
Debug.Log("加载streamingAssets下urlID.txt");
var uri = new System.Uri(Path.Combine(Application.streamingAssetsPath, "urlID.txt"));
UnityWebRequest www = UnityWebRequest.Get(uri);
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.downloadHandler.text);
string jsonStr = www.downloadHandler.text;
TestData testData = JsonUtility.FromJson<TestData>(jsonStr);
url_login = testData.url_login;
url_score = testData.url_score;
StartCoroutine(Get_AllData());
}
}
//通过token 查找信息
IEnumerator Get_AllData()
{
UnityWebRequest www = UnityWebRequest.Get(Data.url_login);
www.SetRequestHeader("admin-token", Data.token);
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.downloadHandler.text);
//返回数据string转json对象
JObject tmpObj = (JObject)JsonConvert.DeserializeObject(www.downloadHandler.text);
JArray jArray = (JArray)tmpObj["data"];
Debug.Log("jArray.Count--" + jArray.Count);
for (var i = 0; i < jArray.Count; i++)
{
JObject jo2 = (JObject)jArray[i];
if ((int)(jo2["clazzNo"]) == classid)
{
func1 = Convert.ToInt32(jo2["function1"]);
func2 = Convert.ToInt32(jo2["function2"]);
func3 = Convert.ToInt32(jo2["function3"]);
}
}
}
}
}
若想主动发起请求可参考:unity 发送消息与web前端交互_Monkey_Xuan的博客-CSDN博客