facebook twitter hatena line email

Unity/Firebase/Realtimedatabase/リスト

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

リスト

追加、更新、削除を検知

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);
    }
}