NIFCLOUD-mbaas / ncmb_unity

ニフクラ mobile backend Unity SDK
Apache License 2.0
55 stars 23 forks source link

queryの引数に文字列の配列、Listを渡す場合、空の値になる #34

Closed sensp closed 5 years ago

sensp commented 7 years ago

■再現環境  。Unity Ver=5.3.5  。Unity NCMB Ver=2.2.0  。Sample例

1.mBaasに下記のスクリプトを事前登録する 【powerup.js】  module.exports = function(req, res){  res.send(req.query);  };

2.Unityから下記を実行する 【unity】 //スクリプトを設定する NCMBScript script = new NCMBScript ("powerup.js", NCMBScript.MethodType.GET); //配列場合 string[] foods = new string[] { "aaa", "bbb" }; Dictionary<string, object> query = new Dictionary<string, object>() { { "name", foods } }; //実行結果 script.ExecuteAsync (null, null, query, (byte[] result, NCMBException e) => { if (e != null) { // 失敗 UnityEngine.Debug.Log("失敗:" + e); } else { // 成功 UnityEngine.Debug.Log("成功:" + System.Text.Encoding.ASCII.GetString(result)); } });

3.実行結果 ・成功:{"name":"System.String[]"} -> お客様の問い合わせとおりに配列値(System.String[])が見みえない状態でした。

4.設定影響 ・Unity SDKで利用できるデータ型の中、配列、Listなとの値設定に不具合が出ます。 (参考:http://mb.cloud.nifty.com/doc/current/sdkguide/unity/datastore.html)

■原因(Unity NCMB Ver=2.2.0(現在の最新)) 1.Unityからscript.ExecuteAsyncを実行 ↓ 2.NCMBScript.cs ExecuteAsync():非同期処理でスクリプトの実行を行う クエリ文字列作成の中、"pair.Value.ToString ()"でこのまま文字列に変換しております。★不具合★ ↓ 3.NCMBScript.cs Connect():通信

■改善 ・配列、Listのオブジェクトが正しくクエリに設定されるように修正する。

ncmbadmin commented 5 years ago

issue登録、ありがとうございました。 本件は対応完了されましたので、issueをクローズさせていただきます。

確認コード

       //スクリプトを設定する
        NCMBScript script = new NCMBScript("powerup.js", NCMBScript.MethodType.GET);
        //配列場合
        string[] foods = new string[] { "aaa", "bbb" };
        Dictionary<string, object> query = new Dictionary<string, object>() {
            { "name", foods }
        };

        //実行結果
        script.ExecuteAsync(null, null, query, (byte[] result, NCMBException e) =>
        {
            if (e != null)
            {
                // 失敗
                UnityEngine.Debug.Log("失敗:" + e);
            }
            else
            {
                // 成功
                UnityEngine.Debug.Log("成功:" + System.Text.Encoding.ASCII.GetString(result));
            }
        });

スクリプト


// powerup.js
module.exports = function(req, res) {
        if (req.query.name ) {
                res.send(req.query);
        } 
        res.send("Hello World");
}```