Unity问题记录(二) ------ UnityWebRequest进行http/https请求出现问题

24 篇文章 1 订阅

错误 :Cleartext HTTP traffic to xxx not permitted

出现原因 :在Android P系统(Android API >= 28)的设备上,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响,同样地,如果应用嵌套了webview,webview也只能使用https请求。

以下两者解决方式是从APP触发的,不过最好还是web端配置好受信任的证书

unity官方回答 : https://forum.unity.com/threads/unitywebrequest-report-an-error-ssl-ca-certificate-error.617521/#post-4254655

 

解决方式1 : 采用Android OKHttp进行https访问(限制 : Android8.0以上)

①.在build.gradle添加

 implementation "com.squareup.okhttp3:okhttp:3.10.0"

等待下载完成 

②.进行Post异步请求

  public void postDataWithParame(String uri) {
        String[] t = uri.split("%");
        key = t[0];
        uri = t[1];

        OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象。
        FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
        formBody.add("username", "zhangsan");//传递键值对参数
        Request request = new Request.Builder()//创建Request 对象。
                .url(uri)
                .post(formBody.build())//传递请求体
                .build();
        client.newCall(request).enqueue(new Callback() {

            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("kwwl", "获取数据失败");
            }

            @Override
            public void onResponse(Call call,  Response response) throws IOException {
              //  Log.d("kwwl", "获取数据成功了:"+response.body().string());
                //calldata.setText("获取数据为:" + response.body().string());
                final String data = response.body().string();
                mainHandler.post(new Runnable() {
                    @Override public void run() {
                        //已在主线程中,可以更新UI
                        UnityPlayer.UnitySendMessage("ScriptHolder","RequestBack",key +"%"+ data);
                    }
                });

            }
        });//回调方法的使用与get异步请求相同,此时略。
    }

请注意由于需求,我在传进来的地址前增加了key

③.打包成aar包及依赖包放入unity

调用如下 :

 public void HttpsRequest(string key, string uri, WebRequestTextEvent webRequestGetEvent)
    {
        if (KeyToWebEvent.ContainsKey(key))
        {
            KeyToWebEvent[key] = webRequestGetEvent;
        }
        else
            KeyToWebEvent.Add(key, webRequestGetEvent);
#if UNITY_ANDROID && !UNITY_EDITOR
        jo.Call("postDataWithParame", key + "%" + uri);
#endif
    }

unity与Android相互调用可参考这里:Unity功能记录(五)------ Android studio打包aar包后与unity互相通信

 

解决方式2 : AndroidManifest.xml文件中增加支持明文请求(但是在某些设备上使用WiFi还是会出现无法请求的问题)

android:usesCleartextTraffic="true"

 

参考列表 : 

Cleartext HTTP traffic to xxx not permitted解决办法

Android OKHttp使用详解

Android高版本联网失败报错:Cleartext HTTP traffic to xxx not permitted解决方法

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值