Unity内部打开Web网页——《UniWebView》插件的使用二

  参考博客地址: https://blog.csdn.net/qq_37310110/article/details/80469144

   插件下载连接  : https://download.csdn.net/download/qq_37310110/10318627


 前面简单记录了一下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后端也是可以得到你说传输的数据的。


扫描二维码关注公众号,回复: 2476365 查看本文章

而这些操作结束后都会有一个回调函数,里面的参数就可以用来验证执行 的结果是否成功。

在官方提供的sdk里 最新的3.0版本跟之前的旧版本2.8差距其实还是很大的,但是功能上只加不减,且调用起来更加方便。2.8版本的sdk插件里面有一个完整的demo包括各种调用,但是3.0版本的就没有相关的demo所以我们只能参考2.8的demo,我这里把官方的版本迁移说明文档地址 给大家  http://docs.uniwebview.com/guide/migration-guide.html  一点要看研究一下。

上一篇博客我只是抱着打开网页的态度去看的,所以有很多细节就没有记录下来,包括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<WebSceneManager> {
    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;
        }
    }

    /// <summary>
    /// 向web界面添加js方法
    /// </summary>
    /// <param name="webView">当前web</param>
    /// <param name="js">js方法名</param>
    /// <param name="type">传输的特定类型</param>
    /// <param name="data">web传输的json数据</param>
    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函数
    /// <summary>
    /// 运行web界面js函数
    /// </summary>
    /// <param name="webView">当前web界面</param>
    /// <param name="parameter">运行js的相关参数</param>
    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<UniWebView>();
        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 
 

猜你喜欢

转载自blog.csdn.net/qq_37310110/article/details/80469144
今日推荐