<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
		<id>https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Unity%2FFirebase%2FRealtimedatabase%2Fchat</id>
		<title>Unity/Firebase/Realtimedatabase/chat - 変更履歴</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Unity%2FFirebase%2FRealtimedatabase%2Fchat"/>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Unity/Firebase/Realtimedatabase/chat&amp;action=history"/>
		<updated>2026-04-19T19:32:52Z</updated>
		<subtitle>このウィキのこのページに関する変更履歴</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.nonip.net/index.php?title=Unity/Firebase/Realtimedatabase/chat&amp;diff=14123&amp;oldid=prev</id>
		<title>2021年10月1日 (金) 05:52にAdminによる</title>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Unity/Firebase/Realtimedatabase/chat&amp;diff=14123&amp;oldid=prev"/>
				<updated>2021-10-01T05:52:12Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;←前の版&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2021年10月1日 (金) 05:52時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;行109:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;行109:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; string key = FirebaseDatabase.DefaultInstance.GetReference(&amp;quot;chatmsgs&amp;quot;).Push().Key;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; string key = FirebaseDatabase.DefaultInstance.GetReference(&amp;quot;chatmsgs&amp;quot;).Push().Key;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;var now &lt;/del&gt;= &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;DateTime.UtcNow&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Msg msg &lt;/ins&gt;= &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;new Msg(key, text, 0)&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;long unixtime &lt;/del&gt;= (&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;long)(now - new DateTime(1970&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1, 1))&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;TotalSeconds&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;json &lt;/ins&gt;= &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;json.Replace&lt;/ins&gt;(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;\&amp;quot;unixtime\&amp;quot;:0&amp;quot;&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;\&amp;quot;unixtime\&amp;quot;:{\&amp;quot;&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;sv\&amp;quot; : \&amp;quot;timestamp\&amp;quot;}&amp;quot;)&lt;/ins&gt;; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;// unixtimeをサーバー日時で設定&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; Msg msg = new Msg(key, text, unixtime);&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; string json = JsonUtility.ToJson(msg);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; string json = JsonUtility.ToJson(msg);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; FirebaseDatabase.DefaultInstance.GetReference(&amp;quot;chatmsgs&amp;quot;).Child(key)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; FirebaseDatabase.DefaultInstance.GetReference(&amp;quot;chatmsgs&amp;quot;).Child(key)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>https://wiki.nonip.net/index.php?title=Unity/Firebase/Realtimedatabase/chat&amp;diff=14031&amp;oldid=prev</id>
		<title>Admin: ページの作成:「==chatサンプル== ChatScene.cs &lt;pre&gt; using UnityEngine; using UnityEngine.UI; using Firebase.Database; using System;  public class ChatScene : MonoBehaviour {     void...」</title>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Unity/Firebase/Realtimedatabase/chat&amp;diff=14031&amp;oldid=prev"/>
				<updated>2021-09-20T05:11:14Z</updated>
		
		<summary type="html">&lt;p&gt;ページの作成:「==chatサンプル== ChatScene.cs &amp;lt;pre&amp;gt; using UnityEngine; using UnityEngine.UI; using Firebase.Database; using System;  public class ChatScene : MonoBehaviour {     void...」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==chatサンプル==&lt;br /&gt;
ChatScene.cs&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using UnityEngine.UI;&lt;br /&gt;
using Firebase.Database;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
public class ChatScene : MonoBehaviour&lt;br /&gt;
{&lt;br /&gt;
    void Start()&lt;br /&gt;
    {&lt;br /&gt;
        DatabaseReference userReference = FirebaseDatabase.DefaultInstance.GetReference(&amp;quot;chatusers&amp;quot;);&lt;br /&gt;
        userReference.ChildAdded += HandleChildAdded;&lt;br /&gt;
        userReference.ChildChanged += HandleChildChanged;&lt;br /&gt;
        userReference.ChildRemoved += HandleChildRemoved;&lt;br /&gt;
        DatabaseReference msgReference = FirebaseDatabase.DefaultInstance.GetReference(&amp;quot;chatmsgs&amp;quot;);&lt;br /&gt;
        msgReference.ChildAdded += ChatChildAdded;&lt;br /&gt;
&lt;br /&gt;
        InputField input = GameObject.Find(&amp;quot;/Canvas/InputField&amp;quot;).GetComponent&amp;lt;InputField&amp;gt;();&lt;br /&gt;
        GameObject.Find(&amp;quot;EnterButton&amp;quot;).GetComponent&amp;lt;Button&amp;gt;().onClick.AddListener(delegate {&lt;br /&gt;
            AddUser(input.text);&lt;br /&gt;
        });&lt;br /&gt;
        InputField chatInput = GameObject.Find(&amp;quot;/Canvas/ChatInputField&amp;quot;).GetComponent&amp;lt;InputField&amp;gt;();&lt;br /&gt;
        GameObject.Find(&amp;quot;ChatButton&amp;quot;).GetComponent&amp;lt;Button&amp;gt;().onClick.AddListener(delegate {&lt;br /&gt;
            SendChatMsg(chatInput.text);&lt;br /&gt;
            chatInput.text = &amp;quot;&amp;quot;;&lt;br /&gt;
        });&lt;br /&gt;
        // userReference.OnDisconnect();&lt;br /&gt;
        // DatabaseReference.GoOffline();&lt;br /&gt;
    }&lt;br /&gt;
    // 受信 追加された時&lt;br /&gt;
    void HandleChildAdded(object sender, ChildChangedEventArgs args)&lt;br /&gt;
    {&lt;br /&gt;
        if (args.DatabaseError != null)&lt;br /&gt;
        {&lt;br /&gt;
            Debug.LogError(args.DatabaseError.Message);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        string json = args.Snapshot.GetRawJsonValue();&lt;br /&gt;
        Debug.Log(&amp;quot;HandleChildAdded=&amp;quot; + json); // {&amp;quot;email&amp;quot;:&amp;quot;ttt@example&amp;quot;,&amp;quot;username&amp;quot;:&amp;quot;ttt&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        User user = JsonUtility.FromJson&amp;lt;User&amp;gt;(json);&lt;br /&gt;
        Debug.Log(&amp;quot;HandleChildAdded username=&amp;quot; + user.username);&lt;br /&gt;
    }&lt;br /&gt;
    // 受信 更新された時&lt;br /&gt;
    void HandleChildChanged(object sender, ChildChangedEventArgs args)&lt;br /&gt;
    {&lt;br /&gt;
        if (args.DatabaseError != null)&lt;br /&gt;
        {&lt;br /&gt;
            Debug.LogError(args.DatabaseError.Message);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        string json = args.Snapshot.GetRawJsonValue();&lt;br /&gt;
        Debug.Log(&amp;quot;HandleChildChanged=&amp;quot; + json); // {&amp;quot;email&amp;quot;:&amp;quot;ttt@example&amp;quot;,&amp;quot;username&amp;quot;:&amp;quot;ttt&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        User user = JsonUtility.FromJson&amp;lt;User&amp;gt;(json);&lt;br /&gt;
        Debug.Log(&amp;quot;HandleChildChanged username=&amp;quot; + user.username);&lt;br /&gt;
    }&lt;br /&gt;
    // 受信 削除された時&lt;br /&gt;
    void HandleChildRemoved(object sender, ChildChangedEventArgs args)&lt;br /&gt;
    {&lt;br /&gt;
        if (args.DatabaseError != null)&lt;br /&gt;
        {&lt;br /&gt;
            Debug.LogError(args.DatabaseError.Message);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        string json = args.Snapshot.GetRawJsonValue();&lt;br /&gt;
        Debug.Log(&amp;quot;HandleChildRemoved=&amp;quot; + json); // {&amp;quot;email&amp;quot;:&amp;quot;ttt@example&amp;quot;,&amp;quot;username&amp;quot;:&amp;quot;ttt&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        User user = JsonUtility.FromJson&amp;lt;User&amp;gt;(json);&lt;br /&gt;
        Debug.Log(&amp;quot;HandleChildRemoved username=&amp;quot; + user.username);&lt;br /&gt;
    }&lt;br /&gt;
    // chat 受信 追加された時&lt;br /&gt;
    void ChatChildAdded(object sender, ChildChangedEventArgs args)&lt;br /&gt;
    {&lt;br /&gt;
        if (args.DatabaseError != null)&lt;br /&gt;
        {&lt;br /&gt;
            Debug.LogError(args.DatabaseError.Message);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        string json = args.Snapshot.GetRawJsonValue();&lt;br /&gt;
        Debug.Log(&amp;quot;ChatChildAdded=&amp;quot; + json);&lt;br /&gt;
&lt;br /&gt;
        Msg msg = JsonUtility.FromJson&amp;lt;Msg&amp;gt;(json);&lt;br /&gt;
        GameObject.Find(&amp;quot;Chat3Text&amp;quot;).GetComponent&amp;lt;Text&amp;gt;().text = GameObject.Find(&amp;quot;Chat2Text&amp;quot;).GetComponent&amp;lt;Text&amp;gt;().text;&lt;br /&gt;
        GameObject.Find(&amp;quot;Chat2Text&amp;quot;).GetComponent&amp;lt;Text&amp;gt;().text = GameObject.Find(&amp;quot;Chat1Text&amp;quot;).GetComponent&amp;lt;Text&amp;gt;().text;&lt;br /&gt;
        Text chat1 = GameObject.Find(&amp;quot;Chat1Text&amp;quot;).GetComponent&amp;lt;Text&amp;gt;();&lt;br /&gt;
        chat1.text = msg.text + &amp;quot;(&amp;quot; + msg.timestamp +&amp;quot;)&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    // 送信&lt;br /&gt;
    void AddUser(string name)&lt;br /&gt;
    {&lt;br /&gt;
        User user = new User(name, name + &amp;quot;@example&amp;quot;);&lt;br /&gt;
        string json = JsonUtility.ToJson(user); // {&amp;quot;email&amp;quot;:&amp;quot;ttt@example&amp;quot;,&amp;quot;username&amp;quot;:&amp;quot;ttt&amp;quot;}&lt;br /&gt;
#if Unity_EDITOR&lt;br /&gt;
        string userId = &amp;quot;pc&amp;quot;;&lt;br /&gt;
#elif UNITY_ANDROID&lt;br /&gt;
        string userId = &amp;quot;android&amp;quot;;&lt;br /&gt;
#elif UNITY_IPHONE&lt;br /&gt;
        string userId = &amp;quot;iphone&amp;quot;;&lt;br /&gt;
#endif&lt;br /&gt;
        FirebaseDatabase.DefaultInstance.GetReference(&amp;quot;chatusers&amp;quot;).Child(userId)&lt;br /&gt;
            .SetRawJsonValueAsync(json);&lt;br /&gt;
    }&lt;br /&gt;
    void SendChatMsg(string text)&lt;br /&gt;
    {&lt;br /&gt;
        // userに存在しないキーを生成&lt;br /&gt;
        string key = FirebaseDatabase.DefaultInstance.GetReference(&amp;quot;chatmsgs&amp;quot;).Push().Key;&lt;br /&gt;
&lt;br /&gt;
        var now = DateTime.UtcNow;&lt;br /&gt;
        long unixtime = (long)(now - new DateTime(1970, 1, 1)).TotalSeconds;&lt;br /&gt;
&lt;br /&gt;
        Msg msg = new Msg(key, text, unixtime);&lt;br /&gt;
        string json = JsonUtility.ToJson(msg);&lt;br /&gt;
        FirebaseDatabase.DefaultInstance.GetReference(&amp;quot;chatmsgs&amp;quot;).Child(key)&lt;br /&gt;
            .SetRawJsonValueAsync(json);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User.cs&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class User&lt;br /&gt;
{&lt;br /&gt;
    public string username;&lt;br /&gt;
    public string email;&lt;br /&gt;
&lt;br /&gt;
    public User()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public User(string username, string email)&lt;br /&gt;
    {&lt;br /&gt;
        this.username = username;&lt;br /&gt;
        this.email = email;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Msg.cs&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class Msg&lt;br /&gt;
{&lt;br /&gt;
    public string key;&lt;br /&gt;
    public string text;&lt;br /&gt;
    public long timestamp;&lt;br /&gt;
&lt;br /&gt;
    public Msg()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public Msg(string key, string text, long timestamp)&lt;br /&gt;
    {&lt;br /&gt;
        this.key = key;&lt;br /&gt;
        this.text = text;&lt;br /&gt;
        this.timestamp = timestamp;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>