실시간 알림 기능 구현 관련

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

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

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

  • 뒤끝 SDK 버전 :
  • 프로젝트명 :
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

안녕하세요! 실시간 알림기능을 이용하여 우편이 도착했는지 여부를 체크하고 싶어 구현중에 있습니다.

제가 이해하기로는 뒤끝 로그인을 한 후에, 아래 ConnectBackEndNotificationServer() 를 한번만 실행하면 핸들러가 정상적으로 동작할거라고 생각했습니다.

    public void ConnectBackEndNotificationServer()
    {
        Backend.Notification.OnAuthorize = (result, reason) =>
        {
            Debug.Log("실시간 서버 성공 여부 : " + result);
            Debug.Log("실패 시 이유 : " + reason);
        };

        RegisterBackEndNotifications();

        // 실시간 알림 서버로 연결
        Backend.Notification.Connect();
    }

    public void RegisterBackEndNotifications()
    {
        Backend.Notification.OnNewPostCreated = (postRepeatType, title, content, author) =>
        {
            {
                Debug.Log(
                    "[OnNewPostCreated(새로운 우편 생성)]\n" +
                    $"| postRepeatType : {postRepeatType}\n" +
                    $"| title : {title}\n" +
                    $"| content : {content}\n" +
                    $"| author : {author}\n"
                );
                // 필요한 작업 구현
                Debug.Log("OnNewPostCreated End");
            }
        };
    }

질문 1. OnAuthorize는 처음에 Connect에 성공하면 한번만 호출되어야 하는 거 아닌가요? 지금 아래 이미지와 같이, 처음 게임시작할때 한번 성공 로그를 받았는데, 우편을 발송하고 핸들러가 어떻게 동작했는지 잘 모르겠지만 몇초 뒤에 또 OnAuthorize 함수가 실행됩니다. 이부분이 일단 이해가 잘 가지 않습니다.
image

질문 2. 우편을 발송했을 때 OnNewPostCreated가 실행되는 경우가 있는데, 이 경우에도 정상적으로 실행되지 않고 초반부의 Debug.Log 부분만 출력되고 그 이후 로직은 무시가 됩니다. 후반부의 Debug.Log는 아예 호출이 되지 않습니다. 이 부분도 잘 납득이 가지 않습니다.

혹시 도움을 받을 수 있을까요~? 뒤끝 SDK 버전은 5.11.7을 이용중입니다. 감사합니다!!!

안녕하세요 개발자님.

  1. 실시간 알림의 경우, 통신 상태가 좋지 않을 경우 연결이 끊어지고 다시 접속되는 경우가 있습니다. 해당 때에는 접속 핸들러가 발생할 수 있습니다.

  2. 실시간 알림의 경우, 외부 쓰레드에서 동작하기 떄문에 해당 콜백 함수에서 유니티 함수를 호출할 경우, Exception이 발생합니다. 따라서 유니티 함수를 호출하고자 할 경우에는 아래처럼 동작을 메인쓰레드로 이동시켜 주는 로직이 필요합니다.
    (뒤끝 실시간 알림 과 dispatcher - Ransiee님의 글 #2)

public class BackendManager : MonoBehaviour
{
    // 메인쓰레드에서 호출하도록 Action을 저장하는 queue함수
    Queue<Action> mainThreadQueue = new Queue<Action>();
    void Start()
    {
        Backend.Notification.OnReceivedFriendRequest = () =>
        {
            Debug.Log($"실시간 알림[OnReceivedFriendRequest(친구 요청 도착)]");
            
            // 바로 호출하지 않고 Queue에 Action을 저장한다.(비동기 외부 쓰레드이기 떄문)
            mainThreadQueue.Enqueue( () => {
                NoticeAlram("OnReceivedFriendRequest", "");
            });
        };
    }

    // 메인쓰레드에서 매 프레임마다 호출하는 함수
    void Update() {
        // Queue에 행동이 저장되어 있을 경우
        if(mainThreadQueue != null && mainThreadQueue.Count > 0) {
            // Dequeue를 통해 행동을 추출 후 호출한다.(메인쓰레드이기 떄문)
            mainThreadQueue.Dequeue().Invoke();
        }
    }
좋아요 1