using System.Collections;

using UnityEngine;

using Firebase;

using Firebase.Database;


public class dailyendcheck : MonoBehaviour

{

    private DatabaseReference databaseReference;

    public DateManager datemanager;

    int dailyend2;


    private void Start()

    {

        // Firebase 초기화

        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>

        {

            if (task.Result == DependencyStatus.Available)

            {

                // Firebase 초기화 성공

                databaseReference = FirebaseDatabase.DefaultInstance.RootReference;

                Debug.Log("Firebase 초기화 완료!");

                StartCoroutine(CheckdailyendRoutine());

            }

            else

            {

                Debug.LogError($"Firebase 초기화 실패: {task.Result}");

            }

        });

    }


    private IEnumerator CheckdailyendRoutine()

    {

        // 1분마다 반복 실행

        while (true)

        {

            CheckdailyendStatus();

            yield return new WaitForSeconds(60f);

        }

    }


    private void CheckdailyendStatus()

    {

        Debug.Log("확인 과정 실행");

        string id = MyScript.Instance.userId;

        string path = $"personal information/server/7/users/{id}/dailyend";


        databaseReference.Child(path).GetValueAsync().ContinueWith(task =>

        {

            if (task.IsFaulted)

            {

                Debug.LogError("데이터 읽기 실패");

            }

            else if (task.IsCompleted)

            {

                DataSnapshot snapshot = task.Result;

                if (snapshot.Exists)

                {

                    int dailyend = int.Parse(snapshot.Value.ToString());

                    if (dailyend == 1)

                    {

                        Debug.Log("dailyend가 1입니다!");

                        datemanager.Nextday();

                        UpdatedailyendToZero(path);

                    }

                }

                else

                {

                    Debug.LogError("데이터가 존재하지 않습니다.");

                }

            }

        });

    }

    void Update()

    {

        if(dailyend2 == 1)

        {

            //datemanager.Nextday();

            dailyend2 = 0;

        }

    }


    private void UpdatedailyendToZero(string path)

    {

        Debug.Log("초기화1");

        databaseReference.Child(path).SetValueAsync(0).ContinueWith(task =>

        {

            Debug.Log("초기화2");

            if (task.IsCompleted)

            {

                Debug.Log("dailyend 값을 0으로 업데이트 했습니다.");

            }

            else

            {

                Debug.LogError("값 업데이트 실패");

            }

        });

    }

}


안녕하세요. 저는 유니티 앱으로 firebase와 통신하는 기능을 제작 중입니다


realtimedatabase에 있는 dailyend가 1이 되면

클라이언트(앱)에서 이를 감지해 특정 코드 Nextday();를 실행 후

dailyend를 0으로 초기화 하는 코드입니다


문제는 다음과 같습니다


앱 실행 중 dailyend가 1이 된다?

의도대로 정상 작동합니다

nextday()가 실행되고 dailyend가 0이 되죠


24b0d121e09c28a8699fe8b115ef04699238f4bdf4



다만 앱이 종료된 상태에서 dailyend가 1이다?

이 경우, 앱을 실행 해도 dailyend만 초기화 되고

nextday()는 실행이 안 됩니다

24b0d121e09c28a8699fe8b115ef0468e3a9eebf



여기서 끝이 아닙니다


정말 이상한 점은

dailyend를 초기화 하는 함수 내부에

Debug.Log("초기화1"); 등

디버그 로그가 전혀 출력되지 않습니다




24b0d121e09c28a8699fe8b115ef046f5b4b9897ad

전 한 가지 가설을 세웠습니다


어쩌면 앱이 시작하자마자

타 오브젝트를 참조 해야하는 nextday() 함수를 실행하니까

그 부분만 작동하지 않는게 아닐까?


논리적으로 말이 안되는 가설이지만

한번 테스트 해봤습니다


여기서 정말 이상한 점 하나 더 나옵니다


dailyend 값을 검사하는 함수를

아예 실행하지 않았음에도 불구

앱을 실행하면 dailyend만 무조건 0으로 초기화됩니다 (그 외 어떠한 코드, 로그도 작동 x)


24b0d121e09c28a8699fe8b115ef046a7468e2c9



다만 앱을 실행 중인 상태에서 dailyend가 1이 되면

nextday() 등 다른 코드도 정상적으로 실행됩니다


+즉, dailyend가 1인 상태에서 앱 실행 시에만

문제가 터진다는 겁니다


+말이 안 되는게 dailyend를 0으로 초기화 하는 코드는

debug.log 및 nextday()등 다른 코드들의 실행 후

작동하게 되어있습니다


근데 다른 코드는 하나도 작동 하지 않고

dailyend만 초기화 된다?


전 여기서부터 뭔가 이상함을 느끼고

dailyend를 1이 아닌 3, 5 등 다른 숫자로 바꿔 테스트 했습니다

+

여전히 0이 됩니다

같은 버그가 발생한다는 겁니다


dailyend가 1인 경우에만 작동한다는

조건문도 무시하고

지 혼자 다 해먹고 있습니다


여전히 앱을 키면 dailyend만 초기화되고

nextday()등 다른 코드는 작동 할 생각을 안 합니다



24b0d121e09c28a8699fe8b115ef0468e1ade2ba63


+

+말 그대로 원인 조차 가늠 안되는

미친 버그입니다


제가 원하는 바는 간단합니다

+저 초기화 코드가 아무런 제어가 안 되는 이유를 찾고

버그를 해결 하고 싶습니다


현업인 분들도 많이 계시는 걸로 알고 있습니다.

도와주시면 정말 감사하겠습니다.