- 뒤끝 SDK 버전 : 5.17.1
- 프로젝트명 : bpa
- 스테이터스 코드 :
- 에러 코드 :
- 에러 메시지 :
유니티를 사용중이고, Backend.IsInitialized == true 까지 확인한 상태에서
Backend.Notification.OnServerStatusChanged를 등록했는데 상태를 점검중이나 오프라인 등으로 변경해도
콜백이 날아오지 않습니다.
게스트로그인이나 버전 체크는 잘 동작하는것을 확인한 상태입니다.
SDK문서에서는 따로 전제 조건 같은게 보이지 않아서 어떤 설정을 더 해야
서버 설정 변경시 실시간 변경 콜백을 받을 수 있을지 궁금합니다.
https://docs.backnd.com/sdk-docs/backend/5.17.1/base/notify/handler-console/project-status 이 문서를 보고
아래와 같이 코드를 작성 했습니다.
public class MaintenanceModel
{
    private static UniTaskCompletionSource<bool> currentTcs;
    private static CancellationTokenSource currentCts;
    public static async UniTask<bool> WaitForMaintenance()
    {
        currentCts?.Cancel();
        currentTcs?.TrySetCanceled();
        currentCts?.Dispose();
        currentCts = new CancellationTokenSource();
        currentTcs = new UniTaskCompletionSource<bool>();
        CancellationToken token = currentCts.Token;
        while (!Backend.IsInitialized)
            await UniTask.Delay(100, cancellationToken: token);
        Debug.Log($"[서버 상태 변경 감지 대기 시작]");
        Backend.Notification.OnServerStatusChanged = (ServerStatusType serverStatusType) =>
        {
            Debug.Log(
                $"[서버 상태 변경 감지]\n" +
                $"| ServerStatusType : {serverStatusType}\n"
            );
            bool isUnavailable = serverStatusType == ServerStatusType.Maintenance || serverStatusType == ServerStatusType.Offline;
            currentTcs?.TrySetResult(isUnavailable);
        };
        try
        {
            bool onMaintenance = await currentTcs.Task.AttachExternalCancellation(token);
            if (onMaintenance)
                Debug.Log("[서버 유지보수 중]");
            else
                Debug.Log("[서버 온라인]");
            return onMaintenance;
        }
        catch (OperationCanceledException)
        {
            Debug.LogWarning("[WaitForMaintenance] 이전 요청이 취소됨");
            return false;
        }
    }
}
커뮤니티글을 보고
소셜 설정의 실시간 알림 설정을 활성화 해봤는데도 마찬가지 입니다.
혹시 에디터 환경에서는 테스트가 불가능한지요?
SDK에서 Backend.Notification.Connect();까지하면 문제가 해결됩니다.
고통받을실 분들을 위해 남겨둡니다.
