【Unity】UniWebView2を使ってPOST通信をする
ネイティブプラグインに憧れつつも、それに時間を取られていられないというのが現状。
サイト表示する上でPOST通信を絡めないといけなかったのでそのときの対応。
POST通信で表示する場合はUniWebViewで直接表示するのではなく、
別のところでPOST通信した結果をUniWebViewで表示するみたいな感じになります。
1.WWWクラスを使ってPOST通信を行う
一度通信はできている前提で書きます。流れなども必要であれば追記するとします。
下記getHtml関数を利用して取得できるwww.textを何らかの形で取り出す必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
IEnumerator getHtml (string url , string postData ){ // 通信用に収納 WWWForm form = new WWWForm (); form.AddField ("post_field", postData); WWW www = new WWW( url ,form); //何も返ってこない場合 // リクエストを受け取る処理(別メソッドでタイムアウト判定) yield return StartCoroutine(ResponseConnect( www , 30.0f ); if(!string.IsNullOrEmpty(www.error)){ // リクエストエラー yield break; // コルーチンを終了 } else if(string.IsNullOrEmpty(www.text)){ // 空で返ってきた場合 yield break; // コルーチンを終了 } else { // この中にデータが入っています //www.text; } } private IEnumerator ResponseConnect(WWW www, float timeout){ float requestTime = Time.time; while(!www.isDone) { if(Time.time - requestTime < timeout){ yield return null; } else { // エラー break; } } yield return www; } |
2.LoadHTMLString関数を利用して表示
急に雑な説明になりますが、先ほど取得した文字列を利用してページを表示。
表示領域のサイズ調整とかは別途しておく必要があります。
1 2 |
UniWebView webView = GetComponent<UniWebView> (); webView.LoadHTMLString( www.text , url ); |
ここのwww.textは純粋にタグなどの情報(Webページでのソース表示みたいなやつ)が入ってきます。
後ろのurlはページ内の相対リンクなどに合わせるために使っているパスになります。
ページ自体が自身で作られているサイト表示であれば、絶対パスで完結しておいたほうが無難です
Load関数かLoadHTMLString関数かの違いだけですが、POST通信でも一応ページ表示が出来るのはありがたいです。
パスさえしっかり通しておけば、JavaScriptも動くので便利と言わざるを得ない。。。
でも、時間ができたらやはり自分でプラグイン作りたいですな