앱이 검은 화면에서 멈춰 있는 현상에 대하여 여쭤볼게 있습니다.

평소에 잘 시작되던 앱이 테스트 해보려고 빌드 했더니 검은 화면에서 멈춰 실행이 되지 않습니다.
그래서 작업 중 뭔가 잘 못 건드린게 있나하여 확인 해봤더니 없는 것 같아 시작 부분(구글 로그인 및 뒤끝 로그인, 초기화 등등) 서버관련된 곳에 이상이 있는건가 하여 해당 씬만 제외하고 빌드를 해봤더니 실행이 되더군요.

그래서 문의를 위해 로그를 확인하기 위하여 해당 시작 씬을 다시 추가 한 후 빌드하고 검은화면에서

로그캣으로 르그를 출력하는 도중 아래와 같은 에러가 출력이 되었습니다.


네트워크의 상태가 일시적으로 불안정하여 호출/응답에 실패할 경우
statusCode : 400
errorCode : HttpRequestException
message : An error occurred while sending the request (2)
Error getting response stream (ReadDone2): ReceiveFailure


그런데 검은 화면에서 멈춘 현상은 단순히 일시적으로 불안정하다고 해서 뜨는 에러 떄문은 아닐 것 같아
로그캣 로그도 첨부합니다.


05-12 11:26:33.849 11441 11474 I Unity : TheBackend aar v1.0.9
05-12 11:26:33.849 11441 11474 I Unity : BackEnd.NativeInstance.AndroidInstance:.ctor()
05-12 11:26:33.849 11441 11474 I Unity : System.Reflection.MonoCMethod:InternalInvoke(Object, Object[])
05-12 11:26:33.849 11441 11474 I Unity : System.Activator:CreateInstance()
05-12 11:26:33.849 11441 11474 I Unity : System.Func1:Invoke() 05-12 11:26:33.849 11441 11474 I Unity : System.Lazy1:CreateValue()
05-12 11:26:33.849 11441 11474 I Unity : System.Lazy1:LazyInitValue() 05-12 11:26:33.849 11441 11474 I Unity : BackEnd.Backend:#Fsb() 05-12 11:26:33.849 11441 11474 I Unity : BackEnd.Backend:#p() 05-12 11:26:33.849 11441 11474 I Unity : BackEnd.Backend:#k(Boolean, BackendCustomSetting, BackendReturnObject&) 05-12 11:26:33.849 11441 11474 I Unity : BackEnd.Backend:Initialize(Boolean) 05-12 11:26:33.849 11441 11474 I Unity : ServerEngine:InitializeBackend() 05-12 11:26:33.849 11441 11474 I Unity : Main:Start() 05-12 11:26:33.849 11441 11474 I Unity : 05-12 11:26:33.850 11441 11474 I Unity : TheBackend dll v5.7.1 05-12 11:26:33.850 11441 11474 I Unity : System.Reflection.MonoCMethod:InternalInvoke(Object, Object[]) 05-12 11:26:33.850 11441 11474 I Unity : System.Activator:CreateInstance() 05-12 11:26:33.850 11441 11474 I Unity : System.Func1:Invoke()
05-12 11:26:33.850 11441 11474 I Unity : System.Lazy1:CreateValue() 05-12 11:26:33.850 11441 11474 I Unity : System.Lazy1:LazyInitValue()
05-12 11:26:33.850 11441 11474 I Unity : BackEnd.Backend:#r()
05-12 11:26:33.850 11441 11474 I Unity : BackEnd.Backend:#p()
05-12 11:26:33.850 11441 11474 I Unity : BackEnd.Backend:#k(Boolean, BackendCustomSetting, BackendReturnObject&)
05-12 11:26:33.850 11441 11474 I Unity : BackEnd.Backend:Initialize(Boolean)
05-12 11:26:33.850 11441 11474 I Unity : ServerEngine:InitializeBackend()
05-12 11:26:33.850 11441 11474 I Unity : Main:Start()
05-12 11:26:33.850 11441 11474 I Unity :
05-12 11:28:13.898 11441 11474 E Unity : Initialize err: statusCode : 400
05-12 11:28:13.898 11441 11474 E Unity : errorCode : HttpRequestException
05-12 11:28:13.898 11441 11474 E Unity : message : An error occurred while sending the request (2)
05-12 11:28:13.898 11441 11474 E Unity : The operation has timed out.
05-12 11:28:13.898 11441 11474 E Unity : BackEnd.Backend:Initialize(Boolean)
05-12 11:28:13.898 11441 11474 E Unity : ServerEngine:InitializeBackend()
05-12 11:28:13.898 11441 11474 E Unity : Main:Start()
05-12 11:28:13.898 11441 11474 E Unity :
05-12 11:28:13.902 11441 11474 I Unity : Starting Auth with token client.
05-12 11:28:13.902 11441 11474 I Unity : GooglePlayGames.Android.AndroidClient:Authenticate(Boolean, Action`1)
05-12 11:28:13.902 11441 11474 I Unity :
05-12 11:28:13.903 11441 11474 I Unity : [Play Games Plugin 0.10.14] 05-12-22 11:28:13 +09:00 DEBUG: Activating PlayGamesPlatform.
05-12 11:28:13.903 11441 11474 I Unity : System.Action:Invoke()
05-12 11:28:13.903 11441 11474 I Unity : GooglePlayGames.OurUtils.PlayGamesHelperObject:Update()
05-12 11:28:13.903 11441 11474 I Unity :
05-12 11:28:13.904 11441 11474 I Unity : [Play Games Plugin 0.10.14] 05-12-22 11:28:13 +09:00 DEBUG: PlayGamesPlatform activated: GooglePlayGames.PlayGamesPlatform
05-12 11:28:13.904 11441 11474 I Unity : System.Action:Invoke()
05-12 11:28:13.904 11441 11474 I Unity : GooglePlayGames.OurUtils.PlayGamesHelperObject:Update()
05-12 11:28:13.904 11441 11474 I Unity :
05-12 11:28:13.904 11441 11474 I Unity : [Play Games Plugin 0.10.14] 05-12-22 11:28:13 +09:00 DEBUG: Creating platform-specific Play Games client.
05-12 11:28:13.904 11441 11474 I Unity : System.Action:Invoke()
05-12 11:28:13.904 11441 11474 I Unity : GooglePlayGames.OurUtils.PlayGamesHelperObject:Update()
05-12 11:28:13.904 11441 11474 I Unity :
05-12 11:28:13.904 11441 11474 I Unity : [Play Games Plugin 0.10.14] 05-12-22 11:28:13 +09:00 DEBUG: Creating Android IPlayGamesClient Client
05-12 11:28:13.904 11441 11474 I Unity : System.Action:Invoke()
05-12 11:28:13.904 11441 11474 I Unity : GooglePlayGames.OurUtils.PlayGamesHelperObject:Update()
05-12 11:28:13.904 11441 11474 I Unity :
05-12 11:29:56.261 11441 11474 I Unity : [Play Games Plugin 0.10.14] 05-12-22 11:29:56 +09:00 DEBUG: Authentication succeeded

혹시 해당 관련 사항에서 의심 가시는 부분이 있는지 여쭤봅니다.
이전에도 잘 실행되던 코드가 갑자기 그래서 따로 코드 부분은 남기지 않았습니다.

현재 글을 다 남기기 전까지 다시 한번 실행해서 확인 해본 결과

  1. 게임을 실행
  2. 검은 화면에서 멈춤
  3. 기다리다 보면 에러 팝업(에러 발생 시 출력되게 구현 해둠)이 위에 기입한 에러가 출력 될 때
    화면이 나타납니다.

----------------- 내용 추가------------------

스마트폰으로 인터넷 서핑을 하는도중 와이파이는 풀로 되어있는데 페이징 속도가 비정상적인 것을
확인하여 통신사 네트워크(5G) 및 와이파이 OFF 후 다시 ON 하여 정상 동작하는 것을 확인하였습니다.

그래서 저는 초기화 및 로그인이 된 후 연결이 불안정한 것이 아닌 처음부터 그래서 그런건가 하여
아예 와이파이 OFF 및 모바일 네크워크도 OFF 모든 네트워크 차단 후 실행하니 바로 에러 메시지가 잘 나오더라고요. 그래서 그냥 넘기기에는 찜찜한 부분이 있서 확실하게 하고자 해당 문제는 해결 되었지만 혹시
왜 그랬는지 의심가는 부분이 혹시 보이신다면 답변 부탁드립니다.

모르고 위에 머릿말을 지워버려 혹시 몰라 정보를 댓글로 다시 기입합니다.

뒤끝 버전은 5.7.1 최신 버전 사용중이며 프로젝트 이름은 “검투사키우기” 입니다.

안녕하세요 개발자님,

로그캣을 통해 남겨주신 에러의 경우 네트워크 환경으로 인해 호출/응답에 실패할 경우 발생하는 에러로,
서버와 통신이 이루어진 상태에서 에러가 발생하는 경우는 statusCode 502의 에러가 발생하게 됩니다.

statusCode : 400
errorCode : HttpRequestException
message : An error occurred while sending the request (2) 
The operation has timed out.

앱 화면이 검게 보이는 것은 에러처리를 하지 않고 성공처리만 하여 그대로 rows[0][“inDate”]등으로 처리할 경우, 예외가 발생하면서 이후 로직이 작동하지 않아 발생하는 상황으로 예상됩니다.

추가해주신 내용의 경우
와이파이 신호가 최대치로 되어있더라도 공유기로 들어가는 네트워크 자체가 불안정한 경우일 수 있으며, 기다리던 중 에러가 팝업된것도 서버와의 통신이 이루어지지 않으면서 작업시간이 초과되었기 때문입니다.
또한 네트워크 및 와이파이를 꺼둔 상태에서는 당연히 통신이 이루어지지 않기에 에러가 발생한 것입니다.

참고하시어 바로 동일한 함수 다시한번 호출하는 등으로 에러 처리 로직을 추가해 주시면 좋을 것 같습니다. :D

혹시 뒤끝 사용 시 스턱(멈춤) 현상에 대해서 주의해야 할 점이있을가요?

예외처리는 isSuccess를 통하여 에러 메시지를 호출하는 것으로 예외처리는 되어 있습니다.
그래서 400 에러가 떳었고요. 그런데 그 뜨는 과정에서 보니간 스턱이 걸린 것 같습니다.

이렇게 생각하는 이유가 게임을 사용하다보면 502 Bad Gateway라고 문서에서 보면
일시적으로 과부하가 걸렸을 경우의 에러라고 나와있는데요.

다른 에러는 그냥 바로 출력이 되는데 해당 502 과부하 에러가 발생 했을 시 에러가 바로 출력되지 않고
다른 버튼이나 이런 것들이 안먹히는 내부적으로는 무슨처리가 되고 있겠지만 화면상으로는 멈춰있다가
일정시간 후에 출력이 되더라고요. 그래서 502와 위의400의 공통점은 네트워크 혹은 서버 관련이라
혹시 이것 외에 이런 멈춤 현상에 대해서 뒤끝 SDK를 사용하여 내부적으로 구현을 할 때
주의 해야 할 점이 있을가요?

부득이하게 동기 기능들을 사용해서 여러 조건문으로
뭐 예를 들면 동기 기능으로 유저를 가져오고 유저 레벨이 몇이면 동기 기능으로 돈 얼마 업데이트 해주고
이런식으로 비동기로 하기에는 확실히 이루어진 후에 이루어저야 하기에 동기 기능이 한 기능에 여러게 겹처진 부분이 있는데 이런 부분이 정상적일 때는 속도측면이나 뭐 이런 부분에서 아무 문제는 없는데 위와 같은
에러 상태에서는 문제가 될 수 있을가요?

안녕하세요 개발자님.

예외처리 없이 성공만 발생하는다는 가정으로 코드를 작성할 경우, 502 혹은 400 같은 공통 에러 케이스가 발생하면서 예외가 발생할 수 있습니다.

예외처리가 되어있을 경우 해당 문제는 아닌 것으로 예상되오며, 동기 방식으로 작성했을 경우 동기 처리로 서버를 오래 기다리면 클라이언트측에서 응답없음 상태가 되며 게임이 장시간 중지될 수 있습니다.

따라서 로그인을 제외하고는 되도록 비동기함수로 작성하는 것을 권장드립니다. 비동기가 아닌 SendQueue 방식을 이용하면 호출 순서에 따라서 콜백이 리턴되니 원하시는 동기의 방식도 쓸 수 있는 점 참고해주시기 바랍니다.