안녕하세요.

파이어베이스 FireStore 저장 타이밍이 애매해서 질문 여쭙니다.

참고로 초짜입니다.



void OnApplicationQuit()

{

    fm.DataSave(false); //저장

    fm.LogOut(); //로그아웃

}


 public async void DataSave()

 {

     if (auth.CurrentUser == null)

     {

         Debug.Log("auth.CurrentUser == null");

         return;

     }

     Debug.Log("저장 시작");


     Dictionary<string, object> userData = new Dictionary<string, object>

     {

         { "device_id",  gm.device_id},

         { "lastLogin", gm.Time_now },


         { "gold",  gm.gold}

     };


     if (docRef == null) docRef = db.Collection("UserInfo").Document(gm.uid);

     try

     {

         Debug.Log("Firestore 데이터 저장 시도");

         await docRef.SetAsync(userData, SetOptions.MergeAll);

         Debug.Log("Firestore 데이터 저장 완료");

     }

     catch (Exception e)

     {

         Debug.LogError($"Firestore 데이터 저장 실패: {e.Message}");

     }

 }



작성한 코드입니다. 앱 종료시 저장을 하고 있습니다. (안드로이드)

OnApplicationQuit 에서 async 호출하면 중간에 앱 아예 꺼지면서 끊기는거는 알고 있었지만

저장이 되기는 되더라구요?

물론 로그 찍힌거 보면 await docRef.SetAsync(userData, SetOptions.MergeAll); 이후로는 로그가 안찍힙니다. (데이터 저장 시도 까지만 로그찍힘)


저장 잘 되면 됐지 뭐가 문제냐하면

앱 종료하고 다시 로그인 했을 때 저장이 또 진행됩니다.

버튼 눌러서 수동 저장하는 식으로도 해봤는데 그럴때는 괜찮은거 봐서는

파이어베이스 Auth에서 자체적으로 OnApplicationQuit 에서 실행된 DataSave가 마저 진행이 안됐다고 판단하고 또 보내는것 같아유.


그래서 궁금한건

1. OnApplicationQuit 에서 안정적으로 저장을 끝낼 수 있는 방법이 있는지

2. 1번이 불가능하다면 다른 저장 타이밍이나, 자동저장 꿀팁을 알려주십사..

두가지입니다.

미리 감사합니다.

최적의 타이밍은 유저가 게임 종료할때라고 생각하는데 참 어렵네요.