コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Firestore の DocumentReference.SetAsync はオフラインの場合 Task が完了しない

概要

using System.Collections.Generic;
using Firebase.Firestore;
using UnityEngine;

public class Example : MonoBehaviour
{
    private async void Start()
    {
        var firestore = FirebaseFirestore.DefaultInstance;

        var documentReference = firestore
                .Collection( "users" )
                .Document( "players" )
            ;

        var documentData = new Dictionary<string, object>
        {
            { "name", "ピカチュウ" },
        };

        Debug.Log( "開始" );
        
        await documentReference.SetAsync( documentData );

        Debug.Log( "完了" ); // オフラインの場合はここに来ない
    }
}

Firestore の DocumentReference.SetAsync
オフラインの場合 Task が完了しないため、await していると処理が進まなくなる

Firestore はオフラインの場合は端末にデータを保持し、
オンラインになった時にサーバーと同期を行う仕組みになっているため

using System.Collections.Generic;
using Firebase.Firestore;
using UnityEngine;

public class Example : MonoBehaviour
{
    private void Start()
    {
        var firestore = FirebaseFirestore.DefaultInstance;

        var documentReference = firestore
                .Collection( "users" )
                .Document( "players" )
            ;

        var documentData = new Dictionary<string, object>
        {
            { "name", "ピカチュウ" },
        };

        Debug.Log( "開始" );
        
        documentReference.SetAsync( documentData );

        Debug.Log( "完了" );
    }
}

プロジェクトによっては await しなくても問題ない

参考サイト様