실행
플레이나누 헬프데스크를 열어 사용자가 문의를 등록하고 확인할 수 있습니다.
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) |
| authKey | Base64 인코딩된 인증키 |
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 플러그인 사용을 권장합니다.