고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.
커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.
문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.
- 뒤끝 SDK 버전 : 뒤끝 5.18.1, 채팅 1.3.0
- 프로젝트명 : 테스트 프로젝트
- 스테이터스 코드 :
- 에러 코드 :
- 에러 메시지 :
현재 무료 요금제로 채팅 기능 테스트용 프로젝트를 구성하여
테스트 진행 중인데, 안드로이드 기기에서 잠시 네트워크가 연결 해제되고 복구되는 경우에는 자동 재접속이 정상적으로 처리되지 않는 듯하여 질문드립니다.
(Fallback으로 설정해둔 채널을 없는 상태입니다)
추가로 코드 문제일까 하여 구현 코드도 하단에 첨부하겠습니다.
에디터에서 인터넷을 잠시 연결 해제 후 다시 활성화 시 (정상)
(ChatClient 생성)
OnError 호출됨: error = DISABLED_CHANNEL, param =
OnJoinChannel 호출됨: channelInfo = channel-0001 / korean / 1
OnJoinChannelPlayer 호출됨
(네트워크 연결 해제)
OnLeaveChannel 호출됨: channelInfo = channel-0001 / korean / 1
(네트워크 재연결)
(약 15초 대기)
OnError 호출됨: error = DISABLED_CHANNEL, param =
OnError 호출됨: error = ALREADY_JOIN_CHANNEL, param =
OnJoinChannel 호출됨: channelInfo = channel-0001 / korean / 1
OnJoinChannelPlayer 호출됨
안드로이드 기기에서 인터넷을 잠시 연결 해제 후 다시 활성화 시 (비정상)
(ChatClient 생성)
OnError 호출됨: error = DISABLED_CHANNEL, param =
OnJoinChannel 호출됨: channelInfo = channel-0001 / korean / 1
OnJoinChannelPlayer 호출됨
(네트워크 연결 해제)
OnLeaveChannel 호출됨: channelInfo = channel-0001 / korean / 1
(네트워크 재연결)
(약 15초 대기)
OnError 호출됨: error = DISABLED_CHANNEL, param =
OnError 호출됨: error = ALREADY_JOIN_CHANNEL, param =
(무반응…)
에디터에서 장시간 백그라운드 → 재오픈 (정상)
(ChatClient 생성)
OnError 호출됨: error = DISABLED_CHANNEL, param =
OnJoinChannel 호출됨: channelInfo = channel-0001 / korean / 1
OnJoinChannelPlayer 호출됨
(백그라운드 전환 이후 재오픈)
OnLeaveChannel 호출됨: channelInfo = channel-0001 / korean / 1
(약 15초 대기)
OnError 호출됨: error = DISABLED_CHANNEL, param =
OnError 호출됨: error = ALREADY_JOIN_CHANNEL, param =
OnJoinChannel 호출됨: channelInfo = channel-0001 / korean / 1
OnJoinChannelPlayer 호출됨
안드로이드 기기에서 장시간 백그라운드 → 재오픈 (정상)
(ChatClient 생성)
OnError 호출됨: error = DISABLED_CHANNEL, param =
OnJoinChannel 호출됨: channelInfo = channel-0001 / korean / 1
OnJoinChannelPlayer 호출됨
(백그라운드 전환 이후 재오픈)
OnLeaveChannel 호출됨: channelInfo = channel-0001 / korean / 1
(약 15초 대기)
OnError 호출됨: error = DISABLED_CHANNEL, param =
OnError 호출됨: error = ALREADY_JOIN_CHANNEL, param =
OnJoinChannel 호출됨: channelInfo = channel-0001 / korean / 1
OnJoinChannelPlayer 호출됨
ChattingUI.cs
using System.Collections;
using System.Collections.Generic;
using BackEnd;
using BackndChat;
using TMPro;
using UnityEngine;
public class ChattingUI : MonoBehaviour, IChatClientListener
{
private ChatClient ChatClient;
private string targetChannelName = "korean";
private string targetChannelGroup = "channel-0001";
public TMP_Text text_Chat;
public TMP_InputField input_Chat;
private string chatLog = "";
private ChannelInfo currentChannelInfo = null;
public void Init()
{
ChatClient = new ChatClient(this, new ChatClientArguments
{
Avatar = "default",
Metadata = new()
});
input_Chat.onSubmit.AddListener(OnSubmitChat);
}
void OnSubmitChat(string message)
{
if (currentChannelInfo == null)
{
Debug.Log("채널 정보가 없습니다.");
return;
}
ChatClient.SendChatMessage(currentChannelInfo.ChannelGroup, currentChannelInfo.ChannelName, currentChannelInfo.ChannelNumber, message);
}
void Update() => ChatClient?.Update();
void OnApplicationQuit() => ChatClient?.Dispose();
public void OnJoinChannel(ChannelInfo channelInfo)
{
Debug.Log($"OnJoinChannel 호출됨: channelInfo = {channelInfo.ChannelGroup} / {channelInfo.ChannelName} / {channelInfo.ChannelNumber}");
currentChannelInfo = channelInfo;
string str = "";
// 이전 메시지 확인
foreach (var msg in channelInfo.Messages)
{
str += $"{msg.GamerName}: {msg.Message}\n";
}
chatLog = str;
text_Chat.text = chatLog;
}
public void OnLeaveChannel(ChannelInfo channelInfo)
{
currentChannelInfo = null;
Debug.Log($"OnLeaveChannel 호출됨: channelInfo = {channelInfo.ChannelGroup} / {channelInfo.ChannelName} / {channelInfo.ChannelNumber}");
}
public void OnJoinChannelPlayer(string channelGroup, string channelName, ulong channelNumber, PlayerInfo player)
{
if (channelName != targetChannelName)
{
return;
}
Debug.Log($"OnJoinChannelPlayer 호출됨");
}
public void OnLeaveChannelPlayer(string channelGroup, string channelName, ulong channelNumber, PlayerInfo player)
{
Debug.Log($"OnLeaveChannelPlayer 호출됨");
}
public void OnUpdatePlayerInfo(string channelGroup, string channelName, ulong channelNumber, PlayerInfo player)
{
Debug.Log($"OnUpdatePlayerInfo 호출됨");
}
public void OnChangeGamerName(string oldGamerName, string newGamerName)
{
Debug.Log($"OnChangeGamerName 호출됨");
}
public void OnChatMessage(MessageInfo messageInfo)
{
Debug.Log($"OnChatMessage 호출됨");
chatLog += $"{messageInfo.GamerName}: {messageInfo.Message}\n";
text_Chat.text = chatLog;
}
public void OnWhisperMessage(WhisperMessageInfo messageInfo)
{
Debug.Log($"OnWhisperMessage 호출됨");
}
public void OnTranslateMessage(List<MessageInfo> messages)
{
Debug.Log($"OnTranslateMessage 호출됨");
}
public void OnHideMessage(MessageInfo messageInfo)
{
Debug.Log($"OnHideMessage 호출됨");
}
public void OnDeleteMessage(MessageInfo messageInfo)
{
Debug.Log($"OnDeleteMessage 호출됨");
}
public void OnSuccess(SUCCESS_MESSAGE success, object param)
{
Debug.Log($"OnSuccess 호출됨: success = {success}, param = {param}");
}
public void OnError(ERROR_MESSAGE error, object param)
{
Debug.Log($"OnError 호출됨: error = {error}, param = {param}");
if (error == ERROR_MESSAGE.DISABLED_CHANNEL)
{
ChatClient.SendJoinOpenChannel(targetChannelGroup, targetChannelName);
}
}
}
ChatManager.cs
using BackEnd;
using TMPro;
using UnityEngine;
public class ChatManager : MonoBehaviour
{
public string loginId;
public ChattingUI ChattingUI;
public TMP_InputField input_Login;
public CanvasGroup group;
void Start()
{
// 뒤끝 초기화
Backend.Initialize();
input_Login.onSubmit.AddListener(OnSubmitLogin);
}
void OnSubmitLogin(string message)
{
group.alpha = 0;
loginId = message;
var result = Backend.BMember.CustomLogin(loginId, "PASSWORD");
if (!result.IsSuccess())
{
Backend.BMember.CustomSignUp(loginId, "PASSWORD");
// 닉네임 설정
Backend.BMember.UpdateNickname(loginId);
}
ChattingUI.Init();
}
}