[Unity]Firebase Realtimeで読み書きができるまで．


まずはFirebaseSDKをUnityProjectにつっこむ．そこからのやり方


# 始める前

![スクリーンショット 2016-11-30 12.29.50.png](https://qiita-image-store.s3.amazonaws.com/0/113504/b78a82be-d0cb-b933-21b2-e55e6b1e9871.png "スクリーンショット 2016-11-30 12.29.50.png")

![スクリーンショット 2016-11-30 12.29.54.png](https://qiita-image-store.s3.amazonaws.com/0/113504/a085dd5b-7b1d-2e5f-dadb-7aa9e2f7fe27.png "スクリーンショット 2016-11-30 12.29.54.png")


PlayerSetting
![スクリーンショット 2016-11-30 14.05.32.png](https://qiita-image-store.s3.amazonaws.com/0/113504/f049c708-3d76-afce-59cf-2618ee4ecadd.png "スクリーンショット 2016-11-30 14.05.32.png")


# Firebase プロジェクトを作成
https://console.firebase.google.com/?pli=1

Bandle ID設定
![スクリーンショット 2016-12-07 0.52.35.jpg](https://qiita-image-store.s3.amazonaws.com/0/113504/e930c934-be7f-a4a8-636d-717f8c4e00cf.jpeg "スクリーンショット 2016-12-07 0.52.35.jpg")

今回はIOSを選択
![スクリーンショット 2016-12-07 0.53.12.jpg](https://qiita-image-store.s3.amazonaws.com/0/113504/5b78e893-1cea-f668-bf1a-7dd8559dbc3c.jpeg "スクリーンショット 2016-12-07 0.53.12.jpg")

先ほど設定したBandle IDをペースト
![スクリーンショット 2016-12-07 0.53.26.jpg](https://qiita-image-store.s3.amazonaws.com/0/113504/fef7c9ae-a091-3473-3046-e6548f5b987c.jpeg "スクリーンショット 2016-12-07 0.53.26.jpg")


ダウンロードした`GoogleService-Info.plist`をUnityのプロジェクトにつっこむ．
![スクリーンショット 2016-12-07 0.55.54.jpg](https://qiita-image-store.s3.amazonaws.com/0/113504/9245829b-a06e-48c2-45f4-b8f7f452355f.jpeg "スクリーンショット 2016-12-07 0.55.54.jpg")







# ビルド
ビルドする

XCodeでRun 

失敗
![スクリーンショット 2016-12-09 16.36.57.png](https://qiita-image-store.s3.amazonaws.com/0/113504/8edf8a23-3a6f-aa18-a99c-0f9901005b50.png "スクリーンショット 2016-12-09 16.36.57.png")

Unityに戻ったらこのようなエラー
![スクリーンショット 2016-12-09 16.17.26.png](https://qiita-image-store.s3.amazonaws.com/0/113504/088aec23-cd0f-6abe-38e2-a7f84b3009dd.png "スクリーンショット 2016-12-09 16.17.26.png")

cocoapodsをダウンロード
途中で止まったので，以下のサイトを参考に直す
http://westhillworker.com/cocoapods-progrem/


Build & Runで成功


# Setting up public Access

下のサイトを参考に設定をpublicに変更

https://firebase.google.com/docs/database/security/quickstart#sample-rules



# 実践

スクリプトを書く

```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.Unity.Editor;
using Firebase.Database;

public class FirebaseManager : MonoBehaviour {
	
	public class QuestData
	{
		public int questId;
		public bool isCompleted;

		public QuestData(){
		}

		public QuestData(int questId, bool isCompleted){
			this.questId = questId;
			this.isCompleted = isCompleted;
		}
	}


	private DatabaseReference _databaseReference;

	// Use this for initialization
	void Start () {
		// Set this before calling into the realtime database.
		FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://アプリ名-数字.firebaseio.com/");

		// Get the root reference location of the database.
		_databaseReference = FirebaseDatabase.DefaultInstance.RootReference;

		// やりたい方のコメントアウトを外す
		// 書き込み
		//WriteNewQuestData (1001, 1, false);

		// 読み込み
		ReadQuestData(1001);

	}

	//書き込み
	void WriteNewQuestData(int userId, int questId, bool isCompleted){
		var questData = new QuestData (questId, isCompleted);
		string json = JsonUtility.ToJson (questData);

		// データベースにJson形式で書き込み
		_databaseReference
			.Child ("users")
			.Child (userId.ToString ())
			.SetRawJsonValueAsync (json);


		// 値を直接書き込む場合はこっち
//		_databaseReference
//			.Child ("users")
//			.Child (userId.ToString ())
//			.Child (questId.ToString ())
//			.SetValueAsync (isCompleted);
	}

	// 読み込み
	void ReadQuestData(int userId){
		FirebaseDatabase.DefaultInstance
			.GetReference("users")
			.GetValueAsync().ContinueWith(task=>{
				if(task.IsFaulted){
					Debug.LogError("失敗");
				}
				else if(task.IsCompleted){
					DataSnapshot snapshot = task.Result;
					string json = snapshot.Child(userId.ToString())
						.GetRawJsonValue();
					Debug.Log("Read: "+ json);
				}
			});
	}

}


```

読み書きできた．

書き込み
![スクリーンショット 2016-12-10 22.05.31.png](https://qiita-image-store.s3.amazonaws.com/0/113504/b448240f-0a6a-246a-d5b0-568e418dfda8.png "スクリーンショット 2016-12-10 22.05.31.png")

読み込み
![スクリーンショット 2016-12-10 23.21.12.png](https://qiita-image-store.s3.amazonaws.com/0/113504/4e27e13a-d9ab-537e-c2cb-53b4b673aa72.png "スクリーンショット 2016-12-10 23.21.12.png")