본문으로 건너뛰기

실행

플레이나누 헬프데스크를 열어 사용자가 문의를 등록하고 확인할 수 있습니다.

URL 확인

이 기능은 help.playnanoo.com 도메인을 사용합니다.

기능 개요

헬프데스크는 두 가지 모드로 동작합니다:

  • 게스트 모드: 로그인하지 않은 사용자도 문의 가능
  • 플레이어 모드: 로그인한 사용자 정보와 함께 문의 등록

인증 방식

플레이어 모드는 authKey 파라미터를 통해 인증합니다.

AuthKey 생성

using System;
using System.Text;

public static string CreateAuthKey(string gameId, string userId)
{
// AuthKey = Base64(GameId + UserId)
string authKeySource = gameId + userId;
return Convert.ToBase64String(Encoding.UTF8.GetBytes(authKeySource));
}

Unity C# 구현

헬프데스크 클래스

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;

public class HelpDesk
{
private static string baseUrl = "https://help.playnanoo.com";
private static Dictionary<string, string> optionalParams = new Dictionary<string, string>();

public static void ClearOptional()
{
optionalParams.Clear();
}

public static void SetOptional(string key, string value)
{
if (optionalParams.ContainsKey(key))
optionalParams[key] = value;
else
optionalParams.Add(key, value);
}

private static string DictionaryToJson(Dictionary<string, string> dict)
{
if (dict.Count == 0) return "{}";

string json = "{";
bool first = true;
foreach (var kvp in dict)
{
if (!first) json += ",";
json += $"\"{kvp.Key}\":\"{kvp.Value}\"";
first = false;
}
json += "}";
return json;
}

private static string CreateAuthKey(string gameId, string userId)
{
string authKeySource = gameId + userId;
return Convert.ToBase64String(Encoding.UTF8.GetBytes(authKeySource));
}

public static void OpenView(string url, Action onClose = null)
{
Debug.Log($"Opening WebView: {url}");
Application.OpenURL(url);

onClose?.Invoke();
}

public static void OpenPlayerMode(Action onClose = null)
{
string uuid = DataManager.Instance.UUID;
string authKey = CreateAuthKey(HttpClient.GameId, uuid);

string url = $"{baseUrl}/{HttpClient.GameId}" +
$"?userId={UnityWebRequest.EscapeURL(uuid)}" +
$"&authKey={UnityWebRequest.EscapeURL(authKey)}";

// Optional 파라미터를 Base64 JSON으로 인코딩
if (optionalParams.Count > 0)
{
string optionalJson = DictionaryToJson(optionalParams);
string optionalBase64 = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(optionalJson));
url += $"&optional={UnityWebRequest.EscapeURL(optionalBase64)}";
}

OpenView(url, onClose);
}

public static void OpenGuestMode(Action onClose = null)
{
string url = $"{baseUrl}/{HttpClient.GameId}?mode=guest";

// Optional 파라미터를 Base64 JSON으로 인코딩
if (optionalParams.Count > 0)
{
string optionalJson = DictionaryToJson(optionalParams);
string optionalBase64 = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(optionalJson));
url += $"&optional={UnityWebRequest.EscapeURL(optionalBase64)}";
}

OpenView(url, onClose);
}
}

주요 메서드

ClearOptional()

선택적 파라미터를 모두 제거합니다.

HelpDesk.ClearOptional();

SetOptional(string key, string value)

선택적 파라미터를 설정합니다. 게임별 커스텀 정보를 전달할 때 사용합니다.

파라미터:

  • key: 파라미터 키
  • value: 파라미터 값
HelpDesk.SetOptional("GAME_SERVER", "ASIA");
HelpDesk.SetOptional("GAME_NICKNAME", "PlayerName");
Base64 JSON 인코딩

설정된 선택적 파라미터는 내부적으로 JSON으로 변환된 후 Base64로 인코딩되어 URL의 optional 파라미터로 전달됩니다.

OpenPlayerMode(Action onClose = null)

플레이어 모드로 헬프데스크를 엽니다. 로그인한 사용자 정보가 자동으로 포함됩니다.

파라미터:

  • onClose: 헬프데스크 종료 시 호출될 콜백 (선택)

URL 파라미터:

파라미터설명
userId사용자 고유 ID (UUID)
authKeyBase64 인코딩된 인증키

OpenGuestMode(Action onClose = null)

게스트 모드로 헬프데스크를 엽니다. 로그인하지 않은 사용자도 문의할 수 있습니다. 인증이 필요 없습니다.

파라미터:

  • onClose: 헬프데스크 종료 시 호출될 콜백 (선택)

사용 예제

게스트 모드로 열기

using PlayNANOO;
using UnityEngine;

public class PlayNANOOExample : MonoBehaviour
{
public void OpenHelpDeskGuestMode()
{
HelpDesk.ClearOptional();
HelpDesk.SetOptional("GAME_SERVER", "ASIA");
HelpDesk.SetOptional("GAME_NICKNAME", "NICKNAME");
HelpDesk.OpenGuestMode(() => {
Debug.Log("HelpDesk Closed");
});
}
}

플레이어 모드로 열기

using PlayNANOO;
using UnityEngine;

public class PlayNANOOExample : MonoBehaviour
{
public void OpenHelpDeskPlayerMode()
{
HelpDesk.ClearOptional();
HelpDesk.SetOptional("GAME_SERVER", "ASIA");
HelpDesk.SetOptional("GAME_NICKNAME", "NICKNAME");
HelpDesk.OpenPlayerMode(() => {
Debug.Log("HelpDesk Closed");
});
}
}

UI 버튼에 연결

using PlayNANOO;
using UnityEngine;
using UnityEngine.UI;

public class HelpDeskUI : MonoBehaviour
{
public Button helpButton;

void Start()
{
helpButton.onClick.AddListener(OnHelpButtonClick);
}

void OnHelpButtonClick()
{
// 로그인 여부 확인
if (DataManager.Instance.IsLoggedIn)
{
OpenHelpDeskWithPlayerInfo();
}
else
{
OpenHelpDeskAsGuest();
}
}

void OpenHelpDeskWithPlayerInfo()
{
HelpDesk.ClearOptional();

// 게임 서버 정보 추가
HelpDesk.SetOptional("GAME_SERVER", GetCurrentServer());

// 플레이어 레벨 정보 추가
HelpDesk.SetOptional("PLAYER_LEVEL", GetPlayerLevel().ToString());

// 마지막 플레이 시간 추가
HelpDesk.SetOptional("LAST_PLAY_TIME", System.DateTime.Now.ToString());

HelpDesk.OpenPlayerMode(() => {
Debug.Log("플레이어 모드 헬프데스크 종료");
});
}

void OpenHelpDeskAsGuest()
{
HelpDesk.ClearOptional();
HelpDesk.SetOptional("GAME_SERVER", GetCurrentServer());

HelpDesk.OpenGuestMode(() => {
Debug.Log("게스트 모드 헬프데스크 종료");
});
}

string GetCurrentServer()
{
// 현재 서버 정보 반환
return "ASIA";
}

int GetPlayerLevel()
{
// 플레이어 레벨 반환
return 50;
}
}

선택적 파라미터

SetOptional 메서드를 사용하여 다양한 게임 정보를 헬프데스크에 전달할 수 있습니다:

파라미터 예시설명
GAME_SERVER게임 서버 (예: ASIA, NA, EU)
GAME_NICKNAME게임 내 닉네임
PLAYER_LEVEL플레이어 레벨
CHARACTER_CLASS캐릭터 직업/클래스
GUILD_NAME길드/클랜 이름
LAST_STAGE마지막 플레이 스테이지
GAME_VERSION게임 버전
ERROR_CODE에러 코드 (에러 발생 시)
선택적 파라미터 활용

선택적 파라미터를 통해 사용자 문의 시 게임 상태 정보를 함께 전달하면, 고객 지원팀이 문제를 더 빠르게 파악하고 해결할 수 있습니다.

다국어 지원

헬프데스크는 브라우저 언어 설정을 자동으로 감지하여 해당 언어로 표시됩니다.

WebView 권장

헬프데스크는 기본적으로 Application.OpenURL을 사용하지만, 더 나은 사용자 경험을 위해 WebView 플러그인 사용을 권장합니다.