using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class MyBehaviour : MonoBehaviour {
void Start() {
StartCoroutine(GetText());
}
IEnumerator GetText() {
UnityWebRequest www = UnityWebRequest.Get("http://www.my-server.com");
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError) {
Debug.Log(www.error);
}
else {
// 結果をテキストとして表示します
Debug.Log(www.downloadHandler.text);
// または、結果をバイナリデータとして取得します
byte[] results = www.downloadHandler.data;
}
}
}
基本はこんな感じですが、UnityWebRequestはメインスレッド制約があるので注意が必要です。
iOSでデータ取得に失敗する問題
iOSではApp Transport Security(ATS)により、デフォルトで非SSLサイトへのアクセスが制限されています。
なので、実機で動かすとデバッグコンソールに「Thre resource could not be loaded because the App Transport Security policy requires the use of a secure connection.」というメッセージが出て取得に失敗します。
対象サイトをSSL化するのが一番現実的な対応ですが、非SSLサイトも例外としてアクセスしたい場合はXCodeで以下のように設定します。
- ツリービューからInfo.plistをクリックします。
- Key,Type,Valueのリストが表示されるので、適当な所に右クリックで「Raw Keys & Values」をクリックします。これで本来のKey名で表示されます(他サイトではこの生Key名で説明してる所が多いです)。
- NSAppTransportSecurityの項目を探し、NSAllowsArbitaryLoadsがYesになっている事を確認します。
- NSAppTransportSecurityの子に「NSExceptionDomains」Keyの行を追加します。TypeはDictionaryです。
- NSExceptionDomainsの子にドメイン名の行を追加します。URLでなくドメインです。TypeはDictionaryです。
- ドメインの行に「NSTemporaryExceptionAllowsInsecureHTTPLoads」の行を追加します。TypeはBooleanで、Valueに1(YES)を指定します。




コメント