iOS 백그라운드 상태 전환 시 SendQueue 관련 에러

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : v5.9.6
  • 프로젝트명 : 포레스트 아일랜드

안녕하세요, iOS 테스트 도중 SendQueue 관련 에러를 확인해서 문의드립니다.
iPhone 7+ 기기에서 게임 실행 도중에 백그라운드로 진입 시 간헐적으로 SendQueue 관련 에러가 발생하고 있습니다.
참고로 게임에서는 뒤끝에서 제공하는 SendQueueMgr를 사용하고 있습니다. 혹시 이슈 원인에 대해 확인해주실 수 있으신가요? 자세한 에러 내용이 표기된 로그파일을 첨부해놓았습니다.
SendQueue_error.txt (6.2 KB)

안녕하세요 개발자님,
문의해주신 내용 확인하여 답변드릴 수 있도록 하겠습니다.
답변까지 다소 시일이 소요될 수 있는 점 양해 부탁드립니다.

좋아요 1

확인 시 추측되는 상황은 다음과 같습니다.
ThreadAbortException은 C#에서 쓰레드가 중단될 때 발생하는 에러입니다

  1. 아이폰 7+를 포함한 핸드폰 환경에서 뒤끝의 SendQueue를 통해 함수를 호출함
  2. SendQueue는 요청을 비동기로 호출하며 쓰레드 발생
  3. 비동기에서 응답을 기다리는 동안 백그라운드 상태로 전환
  4. 핸드폰이 보안이나 휴대폰 발열, 혹은 성능상의 문제로 백그라운드 최적화가 이루어지며 쓰레드가 제거됨
  5. 다시 돌아왔을 떄 자신이 호출한 쓰레드에 대한 메모리를 찾을 수 없어서 에러 발생

요청이 호출되고 난 이후에 요청을 받는 쓰레드가 사라졌기 때문에
해당 요청이 성공하여 서버 내 데이터가 바뀌더라도, Exception으로 발생하여 응답을 받지 못할 수 있습니다.(callback이 작동하지 않음)

좋아요 1

확인해주셔서 감사합니다 :) 말씀해주신 상황에 대해 예외처리를 하고자 한다면 SendQueueMgr.Update() 함수 내부에서 호출되는 BackEnd.SendQueue.Poll() 함수를 try-catch 문으로 감싸는 방식으로 처리하면 될까요? 혹시 다른 예외처리 방식이 있다면 조언해주시면 감사하겠습니다.

void Start()
{
        // 만약 SendQueue가 초기화 되지 않았다면 초기화 수행
        if (SendQueue.IsInitialize == false)
        {
            // SendQueue는 시작과 동시에 초기화가 수행됩니다.
            // 디버그 로그 활성화, 예외 이벤트 핸들러 등록
            SendQueue.StartSendQueue(true, ExceptionEvent);
        }
}

// SendQueue 내부에서 예외가 발생했을 경우  
// 아래 이벤트 핸들러를 통해 예외 이벤트가 전달됩니다.
void ExceptionEvent(Exception e)
{
    Debug.Log(e.ToString());
}

위와 같이 Exception에 대한 이벤트를 설정할 수 있습니다.
SendQueueMgr 의 스크립트 내부에 존재합니다

좋아요 1

넵 상세히 안내해주셔서 감사합니다 :+1: