private void updateExistedInstallation(NCMBInstallation installation, string path)
        {
            //デバイストークンを更新
            NCMBQuery <NCMBInstallation> query = NCMBInstallation.GetQuery();                   //ObjectId検索

            installation.GetDeviceToken((token, error) => {
                query.WhereEqualTo("deviceToken", token);
                query.FindAsync((List <NCMBInstallation> objList, NCMBException findError) => {
                    if (findError != null)
                    {
                        OnRegistration(findError.ErrorMessage);
                    }
                    else if (objList.Count != 0)
                    {
                        installation.ObjectId = objList [0].ObjectId;
                        installation.SaveAsync((NCMBException installationUpdateError) => {
                            if (installationUpdateError != null)
                            {
                                OnRegistration(installationUpdateError.ErrorMessage);
                            }
                            else
                            {
                                OnRegistration("");
                            }
                        });
                    }
                });
            });
        }
        //ネイティブでデバイストークン取得後に呼び出されます
        internal void onTokenReceived(string token)
        {
            _token = token;             //onAnalyticsReceivedで使用。

            string path = SearchPath(); //currentInstallationのパスを設定

            //currentInstallationがあれば読み込み、更新の必要性を判定します
            string           jsonText     = "";
            NCMBInstallation installation = null;

            if ((jsonText = ReadFile(path)) != "")                      //currentInstallationあり
            {
                installation = new NCMBInstallation(jsonText);
            }
            else
            {
                installation = new NCMBInstallation();
            }

            installation.DeviceToken = _token;

            //端末情報をデータストアに登録
            installation.SaveAsync((NCMBException saveError) => {               //更新実行
                if (saveError != null)
                {
                    //対処可能なエラー
                    if (saveError.ErrorCode.Equals(NCMBException.DUPPLICATION_ERROR))
                    {
                        //過去に登録したデバイストークンと衝突。アプリの再インストール後などに発生
                        updateExistedInstallation(installation, path);
                    }
                    else if (saveError.ErrorCode.Equals(NCMBException.DATA_NOT_FOUND))
                    {
                        //保存失敗 : 端末情報の該当データがない
                        installation.ObjectId = null;
                        installation.SaveAsync((NCMBException updateError) => {
                            if (updateError != null)
                            {
                                OnRegistration(updateError.ErrorMessage);
                            }
                            else
                            {
                                OnRegistration("");
                            }
                        });
                    }
                    else
                    {
                        //想定外のエラー
                        OnRegistration(saveError.ErrorMessage);
                    }
                }
                else
                {
                    OnRegistration("");
                }
            });
        }
Beispiel #3
0
        /// <summary>
        /// <para>FindAsync用レスポンス処理</para>
        /// <para>_mergeFromServerを呼びレスポンスデータ(JSONテキスト)からNCMBObject(リスト)を作成する</para>
        /// </summary>
        private ArrayList _convertFindResponse(Dictionary <string, object> response)
        {
            ArrayList     answer  = new ArrayList();
            List <object> results = (List <object>)response ["results"];

            if (results == null)
            {
                Debug.Log("null results in find response");
            }
            else
            {
                object objectClassName = null;
                string resultClassName = null;
                if (response.TryGetValue("className", out objectClassName))
                {
                    resultClassName = (string)objectClassName;
                }

                if (resultClassName == null)
                {
                    resultClassName = this._className;
                }

                for (int i = 0; i < results.Count; i++)
                {
                    NCMBObject obj = null;
                    if (resultClassName.Equals("user"))
                    {
                        obj = new NCMBUser();
                    }
                    else if (resultClassName.Equals("role"))
                    {
                        obj = new NCMBRole();
                    }
                    else if (resultClassName.Equals("installation"))
                    {
                        obj = new NCMBInstallation();

                        /*
                         * } else if (resultClassName.Equals ("push")) {
                         *      obj = new NCMBPush ();
                         */
                    }
                    else if (resultClassName.Equals("file"))
                    {
                        obj = new NCMBFile();
                    }
                    else
                    {
                        obj = new NCMBObject(resultClassName);
                    }
                    obj._mergeFromServer((Dictionary <string, object>)results [i], true);
                    answer.Add(obj);
                }
            }
            return(answer);
        }
Beispiel #4
0
        /// <summary>
        /// 各型毎のURL作成
        /// </summary>
        private string _getSearchUrl(string className)
        {
            string url = "";

            if (className == null || className.Equals(""))
            {
                throw new ArgumentException("Not class name error. Please be sure to specify the class name.");

                /*
                 * } else if (className.Equals ("push")) {
                 *      // プッシュ検索API
                 *      url = new NCMBPush ()._getBaseUrl ();
                 */
            }
            else if (className.Equals("installation"))
            {
                // 配信端末検索API
                url = new NCMBInstallation()._getBaseUrl();
            }
            else if (className.Equals("file"))
            {
                // ファイル検索API
                url = new NCMBFile()._getBaseUrl();
            }
            else if (className.Equals("user"))
            {
                // 会員検索API
                //url = new NCMBUser().getBaseUrl(NCMBUser.URL_TYPE_USER);
                url = new NCMBUser()._getBaseUrl();
            }
            else if (className.Equals("role"))
            {
                // ロール検索API
                url = new NCMBRole()._getBaseUrl();
            }
            else
            {
                // オブジェクト検索API
                url = new NCMBObject(_className)._getBaseUrl();
            }
            return(url);
        }
Beispiel #5
0
        /// <summary>
        /// 現在の配信端末情報を取得します。
        /// </summary>
        /// <returns>配信端末情報 </returns>
        public static NCMBInstallation getCurrentInstallation()
        {
            NCMBInstallation currentInstallation = null;

            try {
                //ローカルファイルに配信端末情報があれば取得、なければ新規作成
                string currentInstallationData = NCMBManager.GetCurrentInstallation();
                if (currentInstallationData != "")
                {
                    //ローカルファイルから端末情報を取得
                    currentInstallation = new NCMBInstallation(currentInstallationData);
                }
                else
                {
                    currentInstallation = new NCMBInstallation();
                }
            } catch (SystemException error) {
                throw new NCMBException(error);
            }
            return(currentInstallation);
        }
		private void updateExistedInstallation (NCMBInstallation installation, string path)
		{
			//デバイストークンを更新
			NCMBQuery<NCMBInstallation> query = NCMBInstallation.GetQuery ();	//ObjectId検索
			query.WhereEqualTo ("deviceToken", installation.DeviceToken);
			query.FindAsync ((List<NCMBInstallation> objList, NCMBException findError) => {
				if (findError != null) {
					OnRegistration (findError.ErrorMessage);
				} else if (objList.Count != 0) {
					installation.ObjectId = objList [0].ObjectId;
					installation.SaveAsync ((NCMBException installationUpdateError) => {
						if (installationUpdateError != null) {
							OnRegistration (installationUpdateError.ErrorMessage);
						} else {
							OnRegistration ("");
						}
					});
				}
			});
		}
		//ネイティブでデバイストークン取得後に呼び出されます
		internal void onTokenReceived (string token)
		{
			_token = token;	//onAnalyticsReceivedで使用。

			string path = SearchPath ();	//currentInstallationのパスを設定

			//currentInstallationがあれば読み込み、更新の必要性を判定します
			string jsonText = "";
			NCMBInstallation installation = null;
			if ((jsonText = ReadFile (path)) != "") {	//currentInstallationあり
				installation = new NCMBInstallation (jsonText);
			} else {
				installation = new NCMBInstallation ();
			}

			installation.DeviceToken = _token;

			//端末情報をデータストアに登録
			installation.SaveAsync ((NCMBException saveError) => {	//更新実行
				if (saveError != null) {
					//対処可能なエラー
					if (saveError.ErrorMessage.Equals ("Duplication Error")) {
						//過去に登録したデバイストークンと衝突。アプリの再インストール後などに発生
						updateExistedInstallation (installation, path);
					} else {	
                        
						//想定外のエラー
						OnRegistration (saveError.ErrorMessage);
					}
				} else {
					OnRegistration ("");
				}
			});
		}
 /// <summary>
 /// 現在の配信端末情報を取得します。
 /// </summary>
 /// <returns>配信端末情報 </returns>
 public static NCMBInstallation getCurrentInstallation()
 {
     NCMBInstallation currentInstallation = null;
     try {
         //null check
         NCMBManager manager = new NCMBManager ();
         //ローカルファイルに配信端末情報があれば取得、なければ新規作成
         string currentInstallationData = manager.GetCurrentInstallation ();
         if (currentInstallationData != "") {
             //ローカルファイルから端末情報を取得
             currentInstallation = new NCMBInstallation (currentInstallationData);
         } else {
             currentInstallation = new NCMBInstallation ();
         }
     } catch (SystemException error) {
         throw new NCMBException (error);
     }
     return currentInstallation;
 }