Skip to main content

客户端账号接入

从本文开始,跟着指引一步步接入 PlayerNetwork SDK吧!

note

若需人工服务,可以到企业微信咨询 Player Network助手

游戏注册&配置

注册和配置游戏,需要登录Player Network Console,详情可参考Player Network Console使用文档

客户端接入

步骤一:在游戏工程中,导入PlayerNetwork SDK

1、Player Network SDK 接入

引擎版本支持情况

SDK 版本号支持的 UE 版本
SDK 1.26 及以后的版本UE4.21 ~ UE4.27 & UE5 ~ UE5.5
SDK 1.26 之前版本UE4.21 ~ UE4.27 & UE5 ~ UE5.4

2、 拷贝文件到工程中

LevelInfiniteINTLSDK 目录拷贝至游戏工程的 Plugins 目录中。如果项目没有 Plugins 目录,可以手动创建一个。

图片:LevelInfinite File Structure
文件夹说明
LevelInfinitePlayer Network 引擎层代码&相关依赖库
INTLSDKPlayer Network SDK 引擎层代码&相关依赖库
SymbolsPlayerNetwork SDK的符号表文件,用于还原堆栈
note

LevelInfiniteAssetVersion.lua 的文件拓展名为 LUA 而并非 LUAC,是因为里面包含了 LI PASS 的版本号,方便业务同学了解我们的 LI PASS 版本,便于定位问题。

Symbols目录下的文件,需妥善保存,游戏上线后,排查线上问题,有可能需要用到符号表。

3、在游戏工程中添加PlayerNetwork SDK依赖

打开游戏项目的构建文件,即 {项目名}.Build.cs 文件,并按照示例将 LevelInfinite 插件添加为模块的私有依赖:

public INTLSample(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay" });

// Add the following code
PrivateDependencyModuleNames.AddRange(new string[] {
"INTLCore",
"INTLFoundation",
"INTLConfig",
"LevelInfinite"
});
}

4、 将 PNT Lua 资源打进首包

将 PNT Lua 资源打进首包,在 Packaging/Additional Non-Asset 选项中添加:

  • ../Plugins/LevelInfinite/Content

图片:INTLLua directory

note

业务需要根据实际存放 LevelInfinite 文件夹的路径进行填写,例如实际存放路径是 ../Plugins/Template/LevelInfinite,则在此需要添加的是 ../Plugins/Template/LevelInfinite/Content

5、 将 PNT uasset 资源打进首包

将 PNT uasset 资源打进首包,在 Packaging/Additional Asset 选项中添加: /LevelInfinite

图片:INTLLua directory

步骤二:配置 INTLConfig.ini 文件

  • INTLConfig.ini 文件包含 PNT 服务的配置项,是游戏使用PNT服务必需的配置文件。
  • 在下载 SDK 的时候,INTLConfig.ini 会生成默认的配置,游戏可使用这些配置体验 PNT 相关功能。
  • 若有修改INTLConfig.ini配置项的需求,可选择使用游戏引擎的可视化配置编辑工具来修改,或直接修改 INTLConfig.ini 文件。

特别的,需要配置可见的品牌名称

BRAND_NAME: xxxxxx

通过编辑器工具栏 LITools > Config Editor 打开可视化配置编辑工具。

图片:INTLLua 菜单

有关各配置项的详情,可在编辑器选中选项来自动展示选项的简述,或参见 SDK 的所有配置 查看完整的配置项列表。

[可选] 第三方渠道登录时获取玩家邮箱
note

此项设置属于 Player Network 控制台的 第三方渠道配置,Web 端运营角色将无权限访问,请联系业务完成配置。

要使用 Web 绑定模块的快速绑定功能,需先设置在第三方渠道登录时获取玩家邮箱的权限。

  • 基于合规考虑,可针对特定来源对返回的 email 做 mask 处理,如有需求请联系 Player Network 助手打开。
  • 可在后台流水日志中上报 hash 后的 base64(sha256(email)),如有需求请联系 Player Network 助手打开。
  • 可用于验证玩家信息或绑定列表是否包含 email 信息,如有需求请联系 Player Network 助手打开。
  • 可用于 iOS Firebase 的 Private Set Membership(PSM)功能,详见 Firebase iOS 工程配置

以下为支持返回玩家邮箱的第三方渠道:

Apple

note

Apple 获取玩家邮箱需要玩家授权,如果玩家拒绝授权将无法获取到玩家邮箱,详见 Login 接口传入 emailfullName

  1. 使用编辑工具,将 email 权限添加到 [Dynamic] 下的 APPLE_LOGIN_PERMISSION

  2. Player Network 控制台 开启 email 返回功能,将 return_email 设置为 YES,详细步骤请参见 第三方渠道配置

Google

Player Network 控制台 开启 email 返回功能,将 return_email 设置为 YES,详细步骤请参见 第三方渠道配置

Facebook

  1. 使用编辑工具,将 email 权限添加到 [Dynamic] 下的 FACEBOOK_LOGIN_PERMISSION。如果 INTLConfig.ini 没有配置 FACEBOOK_LOGIN_PERMISSION,则会自动带上 email 权限。

  2. Meta for Developers 配置 email 权限。email 权限需要有 高级访问级别,才能让所有应用都能获取到玩家的 email。

    图片: Facebook 权限申请

  3. 在 Player Network 控制台开启 email 返回功能,将 return_email 设置为 YES,详细步骤请参见 第三方渠道配置

Twitter

  1. Twitter Developer PlatformUser authentication settings 下,勾选 Request email from users

    图片:OAUTH1.OA SETTINGS
  2. Player Network 控制台 开启 email 返回功能,将 return_email 设置为 YES,详细步骤请参见 第三方渠道配置

步骤三:初始化 PNT

游戏启动的时候,应调用PNTSDK提供的初始化接口 INTLAPI.InitSDKLevelInfinite.InitLIP

  • 初始化过程会检查当前资源版本是否有可用的热更资源;
  • 若有资源更新,将会自动下载新版资源,然后加载新版资源;
  • 资源加载完成后,会触发 PNT 事件回调(LIEventObserver)中的 GN_READY 事件,此时 PNT 初始化完成。
#include "INTLSDKAPI.h" // Include the INTL header file

UINTLSDKAPI::Init();
FString Version = FApp::GetBuildVersion();
ULevelInfiniteAPI::InitLIP(GetGameInstance<UGameInstance>(), Version, TEXT("en"));

步骤四:设置 PNT 界面和邮件的语言

  • 设置 PNT 界面使用的语言, 调用 SetLanguage 接口。
  • 建议此处设置的语言与游戏语言保持一致;
  • 设置好的语言类型也会作用于电子邮件中,比如 验证码邮件 等。
note

注意在切换游戏语言的时候,需要再次设置 SetLanguage 接口

接口详情:SetLanguage

ULevelInfiniteAPI::SetLanguage(TEXT("en"));

步骤五:设置UI根节点

在使用其他 PNT 功能之前,需调用 SetUIRoot 设置所有 PNT 界面的根节点,保证 UI 显示正确。

note

设置 UI 根节点后,请不要销毁该节点,否则 PNT UI 界面无法挂载,会产生预期外的行为。

PNT 界面的释放请通过界面按钮操作,不要强制销毁。在切换场景时若由 Unity 控制 GC(垃圾回收)可能会造成空指针错误出现。

接口详情: SetUIRoot

note

Unreal Engine,设置UI根节点时,需要将根节点铺满整个屏幕。

ULevelInfiniteAPI::SetUIRoot(uiRoot);
note

可能遇到的问题

1. Cook 时的路径报错:LongPackageNameToFilename failed to convert ...

在 Cook 的时候如果报错 LongPackageNameToFilename failed to convert '/LevelInfinite'. Path does not map to any roots,需要修改 Cook 的路径 /LevelInfinite -> /LevelInfinite/,一般常出现在低于 UE4.27 版本。

如果接入过程中遇到问题,请参见 常见问题

步骤六:添加回调处理

// Add callbacks
AuthResultObserver = UINTLSDKAPI::GetAuthResultObserver().AddUObject(this, &ULevelInfiniteWindow::OnAuthResult_Callback);
// Handle AuthResultObserver callback result
void ULevelInfiniteWindow::OnAuthResult_Callback(FINTLAuthResult AuthResult)
{
if(AuthResult.MethodId == (int32)LIEnterGameMethodId::kLILoginEnterGame)
{
}
else if (AuthResult.MethodId == (int32)LIEnterGameMethodId::kLIAutoLoginEnterGame)
{
}
}

// Add callbacks
FDelegateHandle LIEventObserver;
LIEventObserver = ULevelInfiniteAPI::GetEventDelegate().AddUObject(this, &ULevelInfiniteWindow::OnLIEvent_Callback);

// Handle LIEventObserver callback result
void ULevelInfiniteWindow::OnLIEvent_Callback(FLIBaseEvent Event)
{
FString logStr;
switch(Event.EventType){
case ELIEventType::GN_READY:
{
break;
}
}
}

步骤七:完成 PNT 登录流程

ULevelInfiniteAPI::LoginChannelWithLIPass(EINTLLoginChannel::kChannelSteam);
  • 第三方渠道授权后,如果当前账号尚未关联 PNT 账号,且玩家是第一次进入游戏,将显示关联 PNT 账号的用户界面;
  • 登录完成后,若当前玩家的合规流程没有走完,会自动进入LI PASS的合规流程。

步骤八:配置第三方渠道信息

以 steam 为例

更多Steam 渠道接入信息,可浏览 Steam 渠道接入
更多Epic 渠道接入信息,可浏览Epic 渠道接入

步骤九:其他的配置

配置跳过关联

  • 若游戏不希望首次登录的时候强制关联 PNT 账号,可以在Player Network Console上可以配置可跳过关联 PNT 账号
  • 若开启跳过关联 PNT 账号配置,PNT的登录面板会出现 Skip 按钮,玩家点击该按钮可以跳过关联。

商店渠道号配置

计划在Steam或Epic商店上架的游戏,需要在INTLConfig.ini中添加商店渠道号:

[INTL Tools]
WINDOWS_STORE_CHANNEL = 101