WebRequestでGet/Postリクエストやウェブリダイレクト[Unity]

Unityで実装するたびに毎回調べてる気がするのでパターンまとめておく!通しでアクセスするサンプルのURLは「https://example.com」とします。ちなみにこんなページ存在しないからね。

目次

WebRequestを使ってWebリクエスト

最近のUnityではWebRequestを使ってhttp/httpsアクセスをするのが主流です。Webサイトの情報を取得する方法として覚えておきましょう。ゲーム用のサーバーへアクセスするのもこれ。

Getリクエスト(シンプル)

一番基本!特定のサイトやAPIにひとまずアクセスするといえばこれ。基本的にサーバー側のデータを取得したりするときに使用します。

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class Example : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(GetRequest("http://example.com"));
    }

    private IEnumerator GetRequest(string uri)
    {
        using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
        {
            yield return webRequest.SendWebRequest();

            if (webRequest.result != UnityWebRequest.Result.Success)
            {
                Debug.Log(webRequest.error);
            }
            else
            {
                Debug.Log(webRequest.downloadHandler.text);
                byte[] results = webRequest.downloadHandler.data;
            }
        }
    }
}

byteデータで受け取ることで、画像ファイルとして扱うことも可能です。

Getリクエストにパラメータを含める

Getリクエストでは、引数のようにパラメータを渡すことが可能です。たとえばyoutubeの動画リンクの後ろにt=123とかついているのは、動画の123秒から再生!という意味になったりします。ここでは下の表の2つのパラメータを追加する場合の変更になります。

パラメータ名パラメータ
key1value1
key2value2
    private void Start()
    {
        StartCoroutine(GetRequest("http://example.com?key1=value1&key2=value2"));
    }
スライム

GetリクエストはURLだけ見れば分かるシンプル設計!

Postリクエスト(シンプル)

Postリクエストはサーバー側の状態が変化するようなリクエストを行います。例えばアンケートのフォームなどを登録したりするのもPostリクエストがよく使われます。含めるパラメータは以下の表。

パラメータ名パラメータ
key1value1
key2value2
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class Example : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(PostRequest("http://example.com"));
    }

    IEnumerator PostRequest(string url)
    {
        WWWForm form = new WWWForm();
        form.AddField("key1", "value1");
        form.AddField("key2", "value2");

        using (UnityWebRequest webRequest = UnityWebRequest.Post(url, form))
        {
            yield return webRequest.SendWebRequest();
            if (webRequest.result != UnityWebRequest.Result.Success)
            {
                Debug.Log(webRequest.error);
            }
            else
            {
                if (webRequest.downloadHandler != null)
                {
                    string text = webRequest.downloadHandler.text;
                }
            }
        }
    }
}
フェアリー

PostリクエストはWWWFormを利用して、パラメータを入れるんですね

ヘッダーパラメータを含める

Get/Post各リクエストにはヘッダーパラメータを含めることが出来ます。というか場所によっては含めないとデータを取得出来なかったり、アクセスを拒否されることがあります。代表的なパラメータは以下

パラメータ役割サンプルデータ
Content-Typeリクエストボディのメディアタイプ
Jsonデータやテキストなどを指定する
application/json
text/html
multipart/form-data
Authorization認証情報
APIキーなどを指定。
your_api_key
Bearer your_token
(トークンの前にBearerが必要)
Acceptクライアントが理解できるレスポンスのメディアタイプ
パラメータ的にはContent-Typeと同じもの
application/json
など
User-AgentクライアントのソフトウェアタイプMozilla/5.0 (ここ省略) Safari/537.3
Content-Lengthリクエストボディのバイト数を指定数字
UnityWebRequest webRequest = UnityWebRequest.Post(url, postData);
webRequest.SetRequestHeader("Content-Type", "application/json");
webRequest.SetRequestHeader("Authorization", "Bearer your_token_here");
スライム

各リクエスト時に作られたUnityWebRequestに対して、SetRequestHeaderで必要なパラメータをセットしてください。

Webリダイレクト

リクエスト系に比べると、ややあっさりしてますがこちらもよく使うやつ。アプリ内でプライバシーポリシーなどでWebページにジャンプしてほしいこととかありますよね。それ

ボタンが押されたらリダイレクト

下のスクリプトをゲームオブジェクトに貼り付けて、インスペクターにボタンをセットしてください。あとはゲーム実行してボタン押せば、セットしているURLにリダイレクトしてくれます。

using UnityEngine;
using UnityEngine.UI;

public class WebRedirect : MonoBehaviour
{
    [SerializeField] private Button button;
    private void Start()
    {
        button.onClick.AddListener(() =>
        {
            Application.OpenURL("http://example.com");
        });
    }
}

リダイレクト時の注意点

ありきたりな注意点ではありますが、リダイレクト時には下記に注意してください。

  • セキュリティについて
    • ユーザーをリダイレクトするURLは信頼できるものでなければならない
    • 危険なサイトへ誘導すると、ユーザーのセキュリティを脅かすことになります
  • ユーザーエクスペリエンス
    • アプリケーションから離脱することに関して注意が必要です。
    • 必要以上にこの機能を使うべきではないでしょう
  • プラットフォームの制約
    • 利用するプラットフォームによってはサポートされていないことがあります
    • この操作は想定されるプラットフォームでのみ行うようにしてください
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次