Backendless系のmBaaSアプリ（GMO mBaaSなど）からニフティクラウドmobile backendに切り替える方法（Unityt版）

#mBaaSとは

最近アプリ開発でサーバー機能を便利にするものとしてmBaaSの名をよく聞いています。
簡単に言いますと[mBaaSとは](http://qiita.com/thuydg@github/items/22c17a1269563f915752)スマートフォンアプリのバックエンド機能が開発不要になるクラウドサービス。海外だと有名なのは[Parse](https://parse.com/), [Backendless](http://backendless.jp/)..があります、国内だと[ニフティクラウドmobile backend](http://mb.cloud.nifty.com/), [Appiaries](http://www.appiaries.com/jp/)ありますよね。
mBaaSについては[このブログ](http://blog.mb.cloud.nifty.com/?p=3779)でも書かれているとおり開発が便利になりますが、サーバーといった大事なところを他社に依存するのでリスクがあり、選定には「事業者の信頼性」も検討する必要があります。

今回はmBaaS利用の紹介ではなく、もしものために他社mBaaSへと乗り換えるの方法を紹介します。今回はBackendlessからニフティクラウドmobile backendへの乗り換えを想定した方法を記述します。

# Backendlessとは

アメリカの会社が作ったmBaaSです。日本ではGMO社が担ぎ、GMO-mBaaSのベースになったものでもあります。無料から利用でき、機能も充実しています（分析、カスタムコードなど）

# ニフティクラウドmobile backendとは

ニフティクラウドが提供する国産のmBaaSサービスです。高いスペックでプッシュ通知、データー管理など無料で使えます。日本語ドキュメントとサポートがあり！

# Backendlessからニフティクラウドmobile backendに切り替える基本的なステップ

* SDKをインポート
* ニフティクラウドmobile backendでアプリ作成、キー(ApplicationKey, ClientKey)を取得
* 実装コードを変更
* その他：データー移行、設定変更

実際にやってみましょー

# 前提

Backendlessでデータストアを利用するコードは以下になります。

```csharp:hello.cs
using System.Collections;
using System.Collections.Generic;
using BackendlessAPI;
using BackendlessAPI.Async;
using BackendlessAPI.Data;
using BackendlessAPI.Persistence;
using UnityEngine;
public class hello : MonoBehaviour {
//データ型を＃C クラスで定義します
	class Contact :BackendlessEntity
	{
		public string Name{ get; set;}
		public int Age { get; set;}
		public string Phone { get; set;}
		public string Title { get; set;}
	}
	void Start(){
	//オブジェクト生成します。
	Contact contact = new Contact{Name="Jack Daniels", Age = 47,Phone="0123-45-6789",Title="Favorites"};
	//非同期呼び出し完了時のコールバックメソッド
	AsyncCallback<Contact> callback = new AsyncCallback<Contact>(
			savedData => {
				Debug.Log("saved"+savedData.Name);
			},
			fault =>
			{
				Debug.Log(fault);
			});
			//上記コールバックメソッドを指定してデータ保存
			Backendless.Persistence.Of<Contact>().Save(contact, callback);
		}
		//Update is called once per frame
	void Update(){}
}
```
UnitySDKは下記のものを活用しました。
https://github.com/Backendless-Game-SDK/Unity-SDK

導入に関しては下記のドキュメントを参考にしましたが、ドキュメント内で言われていたUnityPackageがなかったので自力でサンプルなどをコピペしてりようしました。・・・見つけ切れなかったなぁ。

https://github.com/Backendless-Game-SDK/Unity-SDK/blob/master/document/Backendless_Unity_SDK_start-up_m.pdf
※この↑PDFに記載されているサンプルコードをhello.csに記載しています。

# (1) ニフティクラウドmobile backendのSDKをインポート

こちらのSDKダウンロードページの通りに、[Githubのリリースページ](https://github.com/NIFTYCloud-mbaas/ncmb_unity/releases)にてSDK(NCMB.2.0.0.zip) をダウンロードします。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/55227/bc8e1d21-9262-0d97-7ded-9582043e4c5b.png)

DLしたZIPを展開すると以下のようなファイル構成になっています。

![a3b2cdc8-7bd5-738b-3e3e-ebd67d9f1ae2.png](https://qiita-image-store.s3.amazonaws.com/0/55227/e0cdaa9e-b87a-2b7a-d841-e9be28d5c02c.png)

インポートしたいUnityプロジェクトを開いた状態で上記の赤丸で囲われた部分のファイルをダブルクリックしてくださいすると下記のようなダイアログが出てきます。

![add5aa30-f296-4f63-c5ee-a7b7f28d775f.png](https://qiita-image-store.s3.amazonaws.com/0/55227/0e8a48ce-02c4-f247-c55d-35341ae58f99.png)

右下のImportをクリックするとインポートが行えます。

するとAssetにncmbのフォルダが現れます

次にキーの設定に移ります
キーはスタートシーンに設定します。
スタートシーンを開いてください。

スタートシーンにGameobjectを作っていただき、
NCMBSettingsとご入力ください

そしてncmbフォルダ内のNCMBSettings.csをアタッチしてください

![2279fa4b-9170-3949-f800-aa7254480fd8.png](https://qiita-image-store.s3.amazonaws.com/0/55227/e367ee1a-b660-a590-b137-7f27ca459b27.png)

インスペクタが下記のような表示になります

![daf5111b-7c3e-bdfe-cae5-0612ea2f8f0e.png](https://qiita-image-store.s3.amazonaws.com/0/55227/54312dc3-1b0b-902a-4f63-550291f7682d.png)

赤丸部分に上から順にニフティクラウドmobile backend で発行されるアプリケーションキー, クライアントキーをコピペします。【ここポイント！】
次はその二つの発行の発行を行います。

# (2)ニフティクラウドmobile backendでアプリ作成、キー(アプリケーションキー, クライアントキー)を発行

ニフティクラウドmobile backendに登録後、アプリ作成、アプリ名を設定し、アプリ作成完了すると、二つキー（ApplicationKey, ClientKey）が作成されます。

![09d6702f-e5d3-f69b-2f98-f9b156b8542a.png](https://qiita-image-store.s3.amazonaws.com/0/55227/434b43ff-2cc4-762b-5738-920f54f28715.png)
![f240fbf1-aea5-307d-50df-6aa959d1ca65.png](https://qiita-image-store.s3.amazonaws.com/0/55227/fa092ac8-ba8d-deda-e944-3798cac5cc27.png)

このアプリケーションキー, クライアントキーを【ここポイント！】の赤丸の部分にコピペします！

# (3)実装コードを変更

上記のhello.csを下記のように変更します。

```csharp:hello_niftyver.cs

using UnityEngine;
using System.Collections;
using NCMB;

public class hello : MonoBehaviour {

	// Use this for initialization
	void Start () {
		NCMBObject contactClass = new NCMBObject("Contact");
		contactClass["Name"] = "Jack Daniels";
		contactClass ["Age"] = 47;
		contactClass["Phone"] = "0123-45-6789";
		contactClass["Title"] = "Favorites";
		contactClass.SaveAsync();

	
	}
	
	// Update is called once per frame
	void Update () {}
}


```

#(4)その他：データー移行、設定変更など

ここに関しては難しいところかなと思いますので、知っている範囲で書きます。
・backendlessではExport機能ありますが、CSV形式になります。
ニフティクラウドmobile backendではデーターストアの新規クラス作成する時、CSV、Json, txtどちらもインポートできますが、会員データーやinstallation(プッシュ通知配信端末)データーという既存のものであればできません。
・アプリ設定はそれぞれ違うので、検討した方が良さそうです！