跳转到主要内容

执行

打开PlayNANOO客服中心,用户可以注册和确认咨询。

URL确认

功能 help.playnanoo.com 域名 使用。

功能概述

客服中心以两种模式运行:

  • 游客模式: 未登录用户也可以进行咨询
  • 玩家模式: 携带已登录用户信息进行咨询注册

认证 方式

玩家模式通过authKey参数进行认证。

AuthKey 创建

#include "Misc/Base64.h"

FString CreateAuthKey(const FString& GameId, const FString& UserId)
{
// AuthKey = Base64(GameId + UserId)
FString AuthKeySource = GameId + UserId;
return FBase64::Encode(AuthKeySource);
}

Unreal C++实现

以玩家模式打开

与登录用户信息一起打开客服中心。

void OpenHelpDeskPlayerMode()
{
// AuthKey 생성
FString AuthKey = CreateAuthKey(GameId, UUID);

// URL 생성
FString Url = FString::Printf(
TEXT("https://help.playnanoo.com/%s?userId=%s&authKey=%s"),
*GameId,
*FGenericPlatformHttp::UrlEncode(UUID),
*FGenericPlatformHttp::UrlEncode(AuthKey)
);

// 브라우저에서 열기
FPlatformProcess::LaunchURL(*Url, nullptr, nullptr);
}

URL 参数:

参数说明
userId用户唯一ID (UUID)
authKeyBase64编码的认证密钥

以游客模式打开

面向未登录用户的客服中心。无需认证。

void OpenHelpDeskGuestMode()
{
FString Url = FString::Printf(
TEXT("https://help.playnanoo.com/%s?mode=guest"),
*GameId
);

FPlatformProcess::LaunchURL(*Url, nullptr, nullptr);
}

可选参数 (Optional)

可以额外传递各游戏的自定义信息。

void OpenHelpDeskWithOptional()
{
// Optional 파라미터를 JSON으로 생성
TSharedPtr<FJsonObject> OptionalJson = MakeShareable(new FJsonObject());
OptionalJson->SetStringField(TEXT("GAME_SERVER"), TEXT("ASIA"));
OptionalJson->SetStringField(TEXT("PLAYER_LEVEL"), TEXT("50"));
OptionalJson->SetStringField(TEXT("CHARACTER_CLASS"), TEXT("Warrior"));

// JSON을 문자열로 변환
FString OptionalString;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OptionalString);
FJsonSerializer::Serialize(OptionalJson.ToSharedRef(), Writer);

// Base64 인코딩
FString OptionalBase64 = FBase64::Encode(OptionalString);

// AuthKey 생성
FString AuthKey = CreateAuthKey(GameId, UUID);

// URL 생성 (optional 파라미터 포함)
FString Url = FString::Printf(
TEXT("https://help.playnanoo.com/%s?userId=%s&authKey=%s&optional=%s"),
*GameId,
*FGenericPlatformHttp::UrlEncode(UUID),
*FGenericPlatformHttp::UrlEncode(AuthKey),
*FGenericPlatformHttp::UrlEncode(OptionalBase64)
);

FPlatformProcess::LaunchURL(*Url, nullptr, nullptr);
}

Optional参数示例

参数说明
GAME_SERVER游戏服务器 (例如: ASIA, NA, EU)
PLAYER_LEVEL玩家等级
CHARACTER_CLASS角色职业/类
GUILD_NAME公会/战队名称
LAST_STAGE最后游玩关卡
ERROR_CODE错误代码 (发生错误时)
可选参数的使用

通过可选参数在用户咨询时一同传递游戏状态信息,客服团队可以更快地发现和解决问题。

使用示例

根据登录状态的分支处理

void OpenHelpDesk()
{
if (bIsLoggedIn)
{
OpenHelpDeskPlayerMode();
}
else
{
OpenHelpDeskGuestMode();
}
}

发生错误时自动打开

void OnApplicationError(const FString& ErrorMessage)
{
// Optional에 에러 정보 포함
TSharedPtr<FJsonObject> OptionalJson = MakeShareable(new FJsonObject());
OptionalJson->SetStringField(TEXT("ERROR_MESSAGE"), ErrorMessage);
OptionalJson->SetStringField(TEXT("ERROR_TIME"), FDateTime::Now().ToString());

// ... (이후 OpenHelpDeskWithOptional과 동일)
}
多语言支持

客服中心会自动检测浏览器语言设置并以相应语言显示。

WebView 建议

为了更好的用户体验,建议使用WebView插件而不是FPlatformProcess::LaunchURL