プロキシサーバーを使用環境のmBaaS接続方法

# 【Unity×mBaaS】プロキシサーバーを使用環境のmBaaS接続方法
* Unityで[ニフティクラウドmobile backend](http://mb.cloud.nifty.com/)(通称：mBaaS)を使ってUnityで開発を始めたい人向けのドキュメントです。
* 環境：Window7, Windows版Unity
* 条件：インターネント接続のLANにプロキシサーバーを使用する場合

# 事前準備のお願い
* 事前にニフティクラウド[mobil backendの登録](http://mb.cloud.nifty.com/)とアプリの新規作成をお願いします。

# 1.環境変数設定
 * コントロールパネルを開く
 * システムを開く
 * システムの詳細設定タブを開く
 * 環境変数をクリック
 * ユーザー環境変数に以下を追加(値：プロキシサーバー情報)

``` 環境変数:ユーザー環境変数欄
	変数名：http_proxy
	変数値：http://アドレス:ポート

	変数名：https_proxy
	変数値：http://アドレス：ポート

    ※変数名：大文字・小文字は関係ありません。
    ※https_proxy追加は影響ありませんが、一応設定する。
```
![env1.png](https://qiita-image-store.s3.amazonaws.com/0/126379/7c0e2ac6-3ad2-b1e0-7025-f6670acf0b52.png)

![env2.png](https://qiita-image-store.s3.amazonaws.com/0/126379/fecb8514-a88a-fc7e-c7e7-600b83e9c483.png)


# 2.NCMBConnection.csのメソッド(_returnRequest ())最後に下記を追加
* 場所：Unity Project名\Assets\NCMB\Script\NCMBConnection.cs

追加前

```csharp:NCMBConnection.cs	
		internal HttpWebRequest _returnRequest ()
		{
　　　　　　　　　　　　＜省略＞
			req.Headers.Add (HEADER_ACCESS_CONTROL_ALLOW_ORIGIN, "*");
			return req;
		}
```
追加後

```csharp:NCMBConnection.cs
		internal HttpWebRequest _returnRequest ()
		{
　　　　　　　　　　　　＜省略＞
			req.Headers.Add (HEADER_ACCESS_CONTROL_ALLOW_ORIGIN, "*");
　　　　　　　　　　　　//UNITYの実行のみ(アプリビルド以外)利用する為Define使って分ける
　　　　　　　　　　　　#if UNITY_EDITOR
   　　　　　　　　　　　 　//特殊なプロキシ設定追加開始
   　　　　　　　　　　　 　WebProxy myProxy = new WebProxy();
    　　　　　　　　　　　　//環境変数HTTP_Proxy値を取得・設定する
    　　　　　　　　　　　　myProxy = (WebProxy)req.Proxy;
    　　　　　　　　　　　　//ユーザー認証値を設定する
   　　　　　　　 　　　　　myProxy.Credentials = new System.Net.NetworkCredential(Windowユーザー名, Windowパスワード);
    　　　　　　　　　　　　req.Proxy = myProxy;
    　　　　　　　　　　　　//特殊なプロキシ設定追加終了
　　　　　　　　　　　　#endif
			return req;
		}　
```

環境変数を読み込めない場合

```csharp:NCMBConnection.cs
		#if UNITY_EDITOR
			// Platform (Mac)の場合下記を利用
			//特殊なプロキシ設定追加開始
			WebProxy myProxy = new WebProxy();
			//HTTP_Proxy値を直接設定する
			Uri proxyUri = new Uri("http://ユーザー名:パスワード@プロキシのサーバアドレス:ポート");
			myProxy.Address = proxyUri;
			//ユーザー認証値を設定する
			myProxy.Credentials = new System.Net.NetworkCredential(ユーザー名, パスワード);
			req.Proxy = myProxy;
			//特殊なプロキシ設定追加終了
			#endif
```

# 3.Unityからの<strong>実行</strong>する
#正常の場合
``` cmd:ログ内容
【StatusCode】:201
【Error】:
```
![unitysuccess.png](https://qiita-image-store.s3.amazonaws.com/0/126379/b9df9996-e7af-10b0-9df0-d3a3ae3cc3b4.png)

#※下記の<strong>The request timed out</strong>エラー発生の場合Tip
``` cmd:エラー内容
【StatusCode】:0
【Error】:NCMB.NCMBException: The request timed out
```
<発生について>

 * 理由：環境変数(http_proxy)が存在しない場合発生します。
 * 対案：環境変数(http_proxy)、変数値を追加する。
 
#※下記の<strong>ProxyNameResolutionFailure</strong>エラー発生の場合Tip
``` cmd:エラー内容
【StatusCode】:0
【Error】:NCMB.NCMBException: Error: ProxyNameResolutionFailure
```
<発生について>

 * 理由：変数値http://アドレス:ポートが正しくない場合発生します。
 * 対案：変数値http://アドレス:ポートが正しい値を設定する。
 
#※下記の<strong>SecureChannelFailure</strong>エラー発生の場合Tip
``` cmd:エラー内容
【StatusCode】:0
【Error】:NCMB.NCMBException: Error getting response stream (The remote server returned a 407 status code.): SecureChannelFailure
```
<発生について>

 * 理由：Windowユーザー名, Windowパスワードが正しくない場合発生します。
 * 対案：Windowユーザー名, Windowパスワードが正しい値を設定する。(NCMBConnection.cs)

#※下記の<strong>signature</strong>エラー発生の場合Tip
``` cmd:エラー内容
【StatusCode】:403
【Error】:NCMB.NCMBException: Unauthorized operations for signature.
【ResponseData】:{"code":"E403002","error":"Unauthorized operations for signature."}
```
<発生について>

 * 理由：シグネチャの生成する時、キー項目を「&」で連結作成する時、空白が有るとエラーになります。
 * 対案：アプリケーションキー、クライアントキーを入力する時、文字列最後に空白がないように設定します。
![Unity_NCMBSetting.png](https://qiita-image-store.s3.amazonaws.com/0/126379/385030ed-cc95-7fe6-31c8-1ed0338146d1.png)