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)を指定します。
コメント