UnityでWeb上からテキスト等データを取得する

スポンサーリンク
Unity
スポンサーリンク
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)を指定します。
1 Star2 Stars3 Stars4 Stars5 Stars (まだ投票されていません)
読み込み中...

コメント

タイトルとURLをコピーしました