facebook twitter hatena line email

「Unity/Csharp/Request」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
行169: 行169:
 
==http通信許可==
 
==http通信許可==
  
===android==
+
===android===
  
===ios==
+
===ios===
 
"You are using download over http. Currently Unity adds NSAllowsArbitraryLoads to Info.plist to simplify transition, but it will be removed soon. Please consider updating to https."エラーが出る
 
"You are using download over http. Currently Unity adds NSAllowsArbitraryLoads to Info.plist to simplify transition, but it will be removed soon. Please consider updating to https."エラーが出る
  
 
#unity/build setting/ios/other setting
 
#unity/build setting/ios/other setting
 
#Allow downloads over HTTPをチェック
 
#Allow downloads over HTTPをチェック

2019年9月13日 (金) 00:13時点における版

Httpリクエストサンプル

以下delegateを使ったhttpリクエストサンプルコード

  • WebHttpRequest.cs
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class WebHttpRequest : MonoBehaviour {
    string text = "";
    public bool errorFlag = false;
    public enum ResponseType
    {
        Success,
        Failure,
        NetworkError
    }
    public delegate void CustomCallback(ResponseType responseType);
    private CustomCallback callbacks;
    public void AddCallback(CustomCallback callback)
    {
        callbacks += callback;
    }
    public void Exec (string url) {
        text = "";
        errorFlag = false;
        StartCoroutine(Get (url));
    }
    public IEnumerator Get (string url) {
        var request = new UnityWebRequest();
        request.downloadHandler = new DownloadHandlerBuffer();
        request.url = url;
        request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
        request.method = UnityWebRequest.kHttpVerbGET;
        yield return request.Send();
        if (request.isNetworkError) {
            errorFlag = true;
            if (callbacks != null)
            {
                callbacks(ResponseType.NetworkError);
            }
        } else {
            if (request.responseCode == 200) {
                text = request.downloadHandler.text;
                if (callbacks != null)
                {
                    callbacks(ResponseType.Success);
                }
            } else {
                errorFlag = true;
                if (callbacks != null)
                {
                    callbacks(ResponseType.Failure);
                }
            }
        }
   }
   public string GetBody() {
       return text;
   }
   public void Reset() {
       text = "";
       errorFlag = false;
   }
}

呼び出し元

  • NewBehaviourScript.cs
public class NewBehaviourScript : MonoBehaviour {
    WebHttpRequest request;
    // http送信
    void Start () {
        const string uri = "http://raw.githubusercontent.com/nlohmann/json/develop/test/data/json.org/1.json";
        string param1 = "value1";
        param1 = WWW.EscapeURL(param1);
        string query = "?hoge=" + param1;
        string url = uri + query;
        GameObject gameObj = new GameObject();
        request = gameObj.AddComponent<WebHttpRequest>();
        request.AddCallback(OnResponse);
        request.Exec(url);
        Debug.Log("request=" + url);
    }
    // httpのresponse受信
    public void OnResponse(WebHttpRequest.ResponseType responseType)
    {
        Debug.Log("OnResponse=" + responseType);
        if (request)
        {
            if (responseType.Equals(WebHttpRequest.ResponseType.Success))
            {
            Debug.Log("body=" + request.GetBody());
            } else if (responseType.Equals(WebHttpRequest.ResponseType.Failure)) {
                Debug.Log("errorFlag=" + request.errorFlag);
            }
            else if (responseType.Equals(WebHttpRequest.ResponseType.NetworkError))
            {
                Debug.Log("NetworkError" + request.errorFlag);
            }
            request.Reset();
        }
    }
}

Httpリクエストサンプル(これはDelegateを使ってないダメな例)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.Networking;
public class WebHttpRequest : MonoBehaviour {
   string text = "";
   public bool errorFlag = false;
   public void Exec (string url) {
      text = "";
      errorFlag = false;
      StartCoroutine(Get (url));
   }
   public IEnumerator Get (string url) {
     var request = new UnityWebRequest();
     request.downloadHandler = new DownloadHandlerBuffer();
     request.url = url;
     request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
     request.method = UnityWebRequest.kHttpVerbGET;
     yield return request.Send();
     if (request.isError) {
       Debug.Log(request.error);
     } else {
       if (request.responseCode == 200) {
         text = request.downloadHandler.text;
         Debug.Log(request.downloadHandler.text);
       }
     }
   }
   public string GetBody() {
       return text;
   }
   public void Reset() {
       text = "";
       errorFlag = false;
   }
}

呼び出し側

const string uri = "ttp://hogehoge.com/api?param1=";
string param1 = "value1";
param1 = WWW.EscapeURL (param1);
string url = uri + param1;
GameObject gameObj = new GameObject();
WebHttpRequest request = gameObj.AddComponent<WebHttpRequest>();
request.Exec (url);

呼び出し側で受信チェック

void Update ()
{
    if (request) {
        if (!request.GetBody ().Equals ("")) {
             // 処理
             request.Reset ();
        } else if (request.errorFlag) {
             request.errorFlag = false;
        }
    }
}

http通信許可

android

ios

"You are using download over http. Currently Unity adds NSAllowsArbitraryLoads to Info.plist to simplify transition, but it will be removed soon. Please consider updating to https."エラーが出る

  1. unity/build setting/ios/other setting
  2. Allow downloads over HTTPをチェック