게임종료시 자동저장이 안됩니다.

에러가 발생한 경우 아래 정보를 모두 제공해주시면 보다 정확한 답변이 가능합니다!

  • SDK 버전 : 5…2.0
  • 에러 코드 : 없음
  • 스테이터스 코드 :없음
  • 에러메시지 : 없음

커스텀 로그인으로 OnApplicationPause(또는 OnApplicationQuit)로 게임 종료시에 자동저장을 하려고 했는데 저장이 안됩니다.(종료시에만 저장이 안되고 게임 실행중에 저장하면 잘 됩니다.) 조언을 해줄수 있는지요?

종료시에 저장코드 (여기서 실행될때만 저장이 안됩니다.):
void OnApplicationPause(bool pause)
{
if (pause)
{
SaveGameData();
}
}

세이브 코드( 코드 동작자체는 문제는 없어보입니다.):

public void SaveGameData()
{

    int[] save_score = {
        Gem,
        Coin            
    };

    BackendAsyncClass.BackendAsync(Backend.GameInfo.GetPrivateContents, "GameData", UserDataBro =>
    {
        if (UserDataBro.IsSuccess())
        {
            Param data = new Param();

            data.Add("Scores", save_score);

            if (UserDataBro.GetReturnValuetoJSON()["rows"].Count > 0) 
            {
                string t_Indate = UserDataBro.GetReturnValuetoJSON()["rows"][0]["inDate"]["S"].ToString();
                BackendAsyncClass.BackendAsync(Backend.GameInfo.Update, "GameData", t_Indate, data, (t_callback) =>
                {
                   
                });
            }
            else 
            {
                BackendAsyncClass.BackendAsync(Backend.GameInfo.Insert, "GameData", data, (t_callback) =>
                {
                    
                });
            }
        }
    });
}

안녕하세요 개발자님

OnApplicationPause 또는 OnApplicationQuit 발생 시, 게임이 종료되거나 비활성화되면서 게임에 대한 쓰레드도 작동 중지되기 때문에 빠른 작업이 아닌 이상 작업이 실행되기 어렵습니다.

뒤끝은 서버에 요청을 보내고 그 요청을 받아야하는 작업이기에 서버가 원활하여 처리속도가 매우 빠르면 처리가 될 수 있으나 느릴경우에는 처리되지 않을 수 있어 불확실합니다.

그러므로 해당함수내에서 데이터가 저장되는 것 보다는 주기적으로 데이터를 저장하고 유저들이 올바른 방법으로 게임을 종료하도록 유도하시는 것이 좋을 거 같습니다.

또한 개발자님이 주신 코드중에 BackendAsyncClass는 SDK 버전 4.x 이후로 지원이 중단되고 성능을 개선하여 SendQueue로 대체되었으니 5.x 버전을 쓰실 경우에는 SendQueue를 사용하시는 것을 추천드립니다.

https://developer.thebackend.io/unity3d/guide/Async/SendQueue/