facebook twitter hatena line email

「Unity/Firebase/Realtimedatabase」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
 
(同じ利用者による、間の6版が非表示)
行8: 行8:
  
 
[[Unity/Firebase/Realtimedatabase/リスト]]
 
[[Unity/Firebase/Realtimedatabase/リスト]]
 +
 +
[[Unity/Firebase/Realtimedatabase/削除]]
  
 
[[Unity/Firebase/Realtimedatabase/切断]]
 
[[Unity/Firebase/Realtimedatabase/切断]]
  
 +
[[Unity/Firebase/Realtimedatabase/chat]]
  
==階層==
+
[[Unity/Firebase/Realtimedatabase/timestamp]]
/で区切ったり、
+
.Child("na/me")
+
Childでつなげたり。
+
.Child("na").Child("me")
+
 
+
==keyを生成==
+
userに存在しないキーを生成
+
string key = FirebaseDatabase.DefaultInstance.GetReference("user").Push().Key;
+
 
+
==リスト==
+
追加、更新、削除を検知
+
<pre>
+
using UnityEngine;
+
using UnityEngine.UI;
+
using Firebase.Database;
+
using System.Collections.Generic;
+
using System;
+
 
+
public class SampleScene : MonoBehaviour
+
{
+
    void Start()
+
    {
+
        DatabaseReference userReference = FirebaseDatabase.DefaultInstance.GetReference("user");
+
        userReference.ChildAdded += HandleChildAdded;
+
        userReference.ChildChanged += HandleChildChanged;
+
        userReference.ChildRemoved += HandleChildRemoved;
+
 
+
        InputField input = GameObject.Find("/Canvas/InputField").GetComponent<InputField>();
+
        GameObject.Find("AddButton").GetComponent<Button>().onClick.AddListener(delegate {
+
            AddUser(input.text);
+
        });
+
    }
+
    // 受信 追加された時
+
    void HandleChildAdded(object sender, ChildChangedEventArgs args)
+
    {
+
        if (args.DatabaseError != null)
+
        {
+
            Debug.LogError(args.DatabaseError.Message);
+
            return;
+
        }
+
        string json = args.Snapshot.GetRawJsonValue();
+
        Debug.Log("HandleChildAdded=" + json); // {"email":"ttt@example","username":"ttt"}
+
 
+
        User user = JsonUtility.FromJson<User>(json);
+
        Debug.Log("HandleChildAdded username=" + user.username);
+
    }
+
    // 受信 更新された時
+
    void HandleChildChanged(object sender, ChildChangedEventArgs args)
+
    {
+
        if (args.DatabaseError != null)
+
        {
+
            Debug.LogError(args.DatabaseError.Message);
+
            return;
+
        }
+
        string json = args.Snapshot.GetRawJsonValue();
+
        Debug.Log("HandleChildChanged=" + json); // {"email":"ttt@example","username":"ttt"}
+
 
+
        User user = JsonUtility.FromJson<User>(json);
+
        Debug.Log("HandleChildChanged username=" + user.username);
+
    }
+
    // 受信 削除された時
+
    void HandleChildRemoved(object sender, ChildChangedEventArgs args)
+
    {
+
        if (args.DatabaseError != null)
+
        {
+
            Debug.LogError(args.DatabaseError.Message);
+
            return;
+
        }
+
        string json = args.Snapshot.GetRawJsonValue();
+
        Debug.Log("HandleChildRemoved=" + json); // {"email":"ttt@example","username":"ttt"}
+
 
+
        User user = JsonUtility.FromJson<User>(json);
+
        Debug.Log("HandleChildRemoved username=" + user.username);
+
    }
+
    void AddUser(string name)
+
    {
+
        User user = new User(name, name + "@example");
+
        string json = JsonUtility.ToJson(user); // {"email":"ttt@example","username":"ttt"}
+
        // userに存在しないキーを生成
+
        // FirebaseDatabase.DefaultInstance.GetReference("user").Push().Key;
+
#if Unity_EDITOR
+
        string userId = "pc";
+
#elif UNITY_ANDROID
+
        string userId = "android";
+
#elif UNITY_IPHONE
+
        string userId = "iphone";
+
#endif
+
        FirebaseDatabase.DefaultInstance.GetReference("user").Child(userId)
+
            .SetRawJsonValueAsync(json);
+
    }
+
}
+
</pre>
+
 
+
==切断==
+
DatabaseReference.GoOffline();
+
とか?切断できてるか不明・・・。
+
==参考==
+
https://firebase.google.com/docs/database/unity/save-data?hl=ja
+

2021年10月1日 (金) 14:43時点における最新版

Unity/Firebase/Realtimedatabase/インストール

Unity/Firebase/Realtimedatabase/基本

Unity/Firebase/Realtimedatabase/更新

Unity/Firebase/Realtimedatabase/json

Unity/Firebase/Realtimedatabase/リスト

Unity/Firebase/Realtimedatabase/削除

Unity/Firebase/Realtimedatabase/切断

Unity/Firebase/Realtimedatabase/chat

Unity/Firebase/Realtimedatabase/timestamp