PC SDK 接入指南

流程说明

PC 版 OnlySDK 统一采用:

  • onlysdk.dll 作为 Core
  • 渠道 DLL 作为可替换运行时
  • 游戏业务统一调用 SDK 暴露的接口

当前推荐流程:

  1. 游戏研发接入 默认联调渠道(通常是 nsdk
  2. 游戏完成联调后,交付基础包
  3. SDK / 发行侧再替换正式渠道 DLL 与配置

也就是说:

  • 游戏研发不用自己切正式渠道
  • TapTap / WeGame / 其它 PC 渠道 由 SDK / 发行侧后置替换

SDK 文件说明

PC 运行时通常包含这些文件:

文件说明
onlysdk.dllPC Core,必须
nsdk.dll / taptap.dll / wegame.dll渠道 DLL,按目标渠道放置
WebView2Loader.dllNSDK 登录页 / H5 能力依赖
onlysdk_config.json运行时配置,必须
login_ui.htmlNSDK 登录页资源
qrcode.min.jsNSDK 扫码页依赖

注意:游戏进程、onlysdk.dll、渠道 DLL 必须位数一致。
TapTap 当前按 x64 联调与出包。
Cocos Win32 本地联调默认按 x86

onlysdk_config.json 配置

至少需要配置:

{
  "ServerUrl": "https://xxx.xxx.com",
  "FallbackUrls": [
    "https://xxx2.xxx.com"
  ],
  "AppID": "23",
  "AppKey": "填写AppKey",
  "ChannelName": "nsdk",
  "ChannelID": "23036",
  "SubChannelID": "",
  "ConsentVersion": "1",
  "PackageName": "com.huanyou.game",
  "Version": "1.0.0",
  "VersionCode": "1"
}

关键字段说明:

字段说明
ServerUrl服务端地址
AppID游戏 AppID
AppKey游戏 AppKey
ChannelName当前渠道名,如 nsdk / taptap / wegame
ChannelID当前渠道 ID
PackageName游戏包名 / 标识
Version游戏版本号
VersionCode游戏版本码

正式参数请向技术或运营确认后填写。

Unity 接入

1. 导入 SDK 包

将 PC Unity 接入包导入工程:

  • OnlySDK-PC-Unity-*.unitypackage

导入后默认会得到:

  • Assets/OnlySDK/
  • Assets/Plugins/x86_64/onlysdk.dll
  • Assets/Plugins/x86_64/nsdk.dll
  • Assets/Plugins/x86_64/WebView2Loader.dll
  • Assets/Plugins/x86_64/onlysdk_config.json
  • Assets/Plugins/x86_64/login_ui.html
  • Assets/Plugins/x86_64/qrcode.min.js

默认联调渠道就是:

  • nsdk

2. 编写业务调用脚本

统一通过:

  • OnlySDK.Runtime.OnlySDK

调用示例:

using UnityEngine;
using RuntimeSDK = OnlySDK.Runtime.OnlySDK;

public class OnlyTest : MonoBehaviour
{
    private void Start()
    {
        RuntimeSDK.OnAnyEvent += OnAnyEvent;
    }

    public void OnClickInit()
    {
        RuntimeSDK.Init();
    }

    public void OnClickLogin()
    {
        RuntimeSDK.Login();
    }

    public void OnClickLogout()
    {
        RuntimeSDK.Logout();
    }

    public void OnClickExit()
    {
        RuntimeSDK.ExitSDK();
    }

    public void OnClickOpenSurvey()
    {
        RuntimeSDK.OpenSurvey(new OnlySDK.Runtime.OnlySDKSurveyRequest
        {
            userId = RuntimeSDK.LoginData?.userId ?? 0,
            serverId = "1",
            roleId = "role_001",
            roleName = "测试角色",
            formKey = "运营提供的问卷表单Key",
            extra = ""
        });
    }

    public void OnClickGetSurveyForms()
    {
        RuntimeSDK.GetSurveyForms(new OnlySDK.Runtime.OnlySDKSurveyRequest
        {
            userId = RuntimeSDK.LoginData?.userId ?? 0,
            serverId = "1",
            roleId = "role_001",
            roleName = "测试角色",
            extra = ""
        });
    }

    public void OnClickGetWelfareInfo()
    {
        RuntimeSDK.GetWelfareInfo(new OnlySDK.Runtime.OnlySDKWelfareInfoRequest
        {
            userId = RuntimeSDK.LoginData?.userId ?? 0,
            serverId = "1",
            serverName = "测试一区",
            roleId = "role_001",
            roleName = "测试角色",
            extra = ""
        });
    }

    private void OnAnyEvent(OnlySDK.Runtime.OnlySDKEvent e)
    {
        Debug.Log($"code={e.code} action={e.action} status={e.status} msg={e.message}");
    }
}

3. 本地联调

研发本地默认只需要:

  1. 导入 unitypackage
  2. 修改 Assets/Plugins/x86_64/onlysdk_config.json
  3. 写业务按钮调用脚本

打包时:

  • Assets/OnlySDK/Editor/OnlySDKPostBuild.cs

会自动把 Assets/Plugins/x86_64/ 下的运行时文件复制到最终运行目录。

4. 正式渠道出包

Unity 工程内通常保留默认联调态:

  • nsdk.dll + onlysdk_config.json

正式出包时,再由 SDK / 发行侧替换成:

  • taptap.dll + taptap_api.dll + TapTap 配置
  • wegame.dll + rail_api*.dll + WeGame 配置

Cocos 接入

1. 先在 Cocos Creator 中构建一次 Windows 原生工程

先执行:

  1. 构建发布
  2. 平台选 Windows
  3. 点一次 构建

生成原生目录后,再执行下一步。

2. 运行一键联调脚本

pwsh .\tools\setup-cocos-dev.ps1 -CocosProjectRoot "D:\YourCocosProject"

这条脚本会自动完成:

  1. 拷贝 OnlySDKCocosBridge.* / OnlySDKAutoRegister.*
  2. 拷贝 OnlySDK.js / OnlySDK.d.ts
  3. 修改 AppDelegate.cpp
  4. 修改 .vcxproj
  5. 把默认 nsdk 运行时注入 Debug.win32
  6. 做一轮体检,确认接入是否齐全

3. VS 重新生成并运行

执行顺序:

Cocos Build -> setup-cocos-dev.ps1 -> VS 重新生成 -> 运行

4. 业务调用示例

统一通过:

  • window.OnlySDK

调用示例:

OnlySDK.on('login', function (event) {
  if (event.code === 0) {
    console.log('login success', event.data);
  } else {
    console.log('login fail', event.message);
  }
});

OnlySDK.init();
OnlySDK.login();

只要 Cocos Creator 重新 Build 过,就需要重新执行一次 setup-cocos-dev.ps1

初始化(必接)

请求参数

(无)

返回结果

参数类型必选描述
codeint状态码
statusstringsuccess / error
actionstring固定为 init
messagestring提示信息

示例:

{
  "code": 0,
  "status": "success",
  "action": "init",
  "message": ""
}

登录(必接)

请求参数

(无)

返回结果

参数类型必选描述
codeint状态码
statusstringsuccess / error / cancel
actionstring固定为 login
messagestring提示信息
dataJSON登录结果

成功时常用字段:

参数类型描述
userIdlongOnlySDK 用户 ID
tokenstring登录 Token
channelIdstring/int渠道 ID
channelUserIdstring渠道用户 ID
channelUserNamestring渠道用户名

支付

请求参数

参数类型必选描述
userIdlong用户 ID
cpOrderIdstringCP 订单号
productIdstring商品 ID
productNamestring商品名称
productDescstring商品描述
priceint价格,单位分
currencystring币种,通常 CNY
serverIdstring区服 ID
serverNamestring区服名称
roleIdstring角色 ID
roleNamestring角色名称
roleLevelint角色等级

返回结果

参数类型描述
statusstringsuccess / fail / cancel
messagestring提示信息

数据上报

请求参数

参数类型必选描述
typeint1 创建角色,2 进入游戏,3 升级,4 退出,6 充值到账
userIdlong用户 ID
serverIdstring服务器 ID
serverNamestring服务器名
roleIdstring角色 ID
roleNamestring角色名
roleLevelint角色等级
moneyint当前货币余额
vipstringVIP 等级
roleCreateTimelong角色创建时间,秒级时间戳

问卷与福利站(选接)

以下接口需要在登录成功后调用,并传入当前登录用户与角色信息。userId 建议使用 OnlySDK.LoginData.userId

打开问卷调查

用于打开运营配置的问卷页面。PC 端会通过系统默认浏览器打开问卷链接。

请求参数:

参数类型必选描述
userIdlongOnlySDK 用户 ID,登录成功后返回
serverIdstring区服 ID
roleIdstring角色 ID
roleNamestring角色名称
formKeystring问卷表单 Key,由运营提供
extrastring扩展参数,原样透传

调用示例:

OnlySDK.OpenSurvey(new OnlySDKSurveyRequest
{
    userId = OnlySDK.LoginData.userId,
    serverId = "1",
    roleId = "role_001",
    roleName = "测试角色",
    formKey = "运营提供的问卷表单Key",
    extra = ""
});

OnlySDK.OnOpenSurvey += evt =>
{
    Debug.Log($"open survey: success={evt.IsSuccess}, url={evt.url}, msg={evt.message}");
};

返回结果:

参数类型描述
statusstringsuccess / error
actionstring固定为 open_survey
urlstring实际打开的问卷链接
messagestring提示信息

获取用户可填写问卷列表

用于获取当前用户可填写的问卷列表,游戏可根据返回列表决定是否展示问卷入口。

请求参数:

参数类型必选描述
userIdlongOnlySDK 用户 ID,登录成功后返回
serverIdstring区服 ID
roleIdstring角色 ID
roleNamestring角色名称
extrastring扩展参数,原样透传

调用示例:

OnlySDK.GetSurveyForms(new OnlySDKSurveyRequest
{
    userId = OnlySDK.LoginData.userId,
    serverId = "1",
    roleId = "role_001",
    roleName = "测试角色",
    extra = ""
});

OnlySDK.OnSurveyForms += evt =>
{
    Debug.Log($"survey forms: success={evt.IsSuccess}, data={evt.serverDataBodyRaw}");
};

服务端响应会放在 evt.serverDataRaw,其中常用字段如下:

参数类型描述
codeint状态码
msgstring提示信息
dataarray问卷表单列表

data 列表常用字段:

参数类型描述
appIdint游戏 ID
formKeystring问卷唯一标识,打开问卷时传入
formUrlstring问卷表单链接
formNamestring问卷表单名称
formDescstring问卷表单描述
expireTimelong问卷链接过期时间,秒级时间戳
orderint问卷表单排序

获取企业微信-福利站信息

用于获取平台配置的企业微信 / 福利站信息。

请求参数:

参数类型必选描述
userIdlongOnlySDK 用户 ID,登录成功后返回
serverIdstring区服 ID
serverNamestring区服名称
roleIdstring角色 ID
roleNamestring角色名称
extrastring扩展参数,原样透传

调用示例:

OnlySDK.GetWelfareInfo(new OnlySDKWelfareInfoRequest
{
    userId = OnlySDK.LoginData.userId,
    serverId = "1",
    serverName = "测试一区",
    roleId = "role_001",
    roleName = "测试角色",
    extra = ""
});

OnlySDK.OnWelfareInfo += evt =>
{
    Debug.Log($"welfare info: success={evt.IsSuccess}, data={evt.serverDataBodyRaw}");
};

服务端响应会放在 evt.serverDataRaw,其中 data 常用字段如下:

参数类型描述
mpUrlstring小程序跳转链接
qwPicUrlstring添加企业微信图片
templatePicstring模板图片

常见问题

现象排查
Failed to load onlysdk.dllonlysdk.dll 不在运行目录,或位数不匹配
Failed to load channel plugin渠道 DLL 缺失,或 ChannelName 与当前 DLL 不匹配
登录页空白WebView2 Runtime,或缺 login_ui.html / qrcode.min.js
Unity Editor 中 DllNotFoundException: onlysdk插件导入设置未启用 Editor + Win64
Cocos 中 native api missing: init原生桥未注册成功,重新执行 setup-cocos-dev.ps1

正式出包说明

游戏研发交付基础包后,由 SDK / 发行侧使用渠道盖包脚本替换正式运行时,例如:

pwsh tools/stamp-cocos-channel.ps1 -GameBuild "D:\builds\GameBase" -Channel nsdk -OutDir "D:\release\nsdk" -Arch x86
pwsh tools/stamp-cocos-channel.ps1 -GameBuild "D:\builds\GameBase" -Channel taptap -OutDir "D:\release\taptap" -Arch x64

研发侧无需自己切正式渠道。