阅读主题
Windows / .NET 接入
交付 Windows C# 核心,目标 net8.0 和 netstandard2.1;命名空间 Starlight.GameSDK。下载中心提供源码、程序集及示例。托管 DLL 不是 C/C++ 原生 C ABI。
准备应用
注册开发者,创建或扩展 Windows 客户端,审核开通后取得该端 App ID。游戏服务器实现授权交换;服务器密钥不得进入桌面安装包。
.NET 8 示例
csharp
using System.Net.Http.Json;
using Starlight.GameSDK;
using var gameHttp = new HttpClient();
var configuration = new StarlightConfiguration(
"你的WindowsAppID", new Uri("https://account.example.com"));
using var sdk = new StarlightClient(configuration, async (authorization, ct) => {
// 此地址属于你自己的可信游戏服务器;客户端不发送平台服务端密钥。
using var response = await gameHttp.PostAsJsonAsync(
"https://game.example.com/session", authorization, ct);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<StarlightSession>(cancellationToken: ct)
?? throw new InvalidOperationException("无效交换响应");
}, new WindowsCredentialStorage());
await sdk.InitializeAsync();
var session = await sdk.RestoreSessionAsync();
if (session is null) session = await sdk.BrowserLoginAsync();
var center = await sdk.CenterAsync();本地测试配置 HTTP 时显式传 allowInsecureHttpForDevelopment: true,不改变正式默认 HTTPS 约束。Windows Credential Manager 保存当前系统用户的候选会话;RestoreSessionAsync 会先请求 /api/me 验证,再通知登录成功。
系统浏览器授权
BrowserLoginAsync 创建随机 state / PKCE,监听 127.0.0.1 临时端口,调用 /api/desktop/authorizations 后打开同一平台来源的授权页。用户在系统浏览器完成平台账号登录,平台只将一次性 code 与 state 回送本地回调。
授权事务 5 分钟、授权码 60 秒;码必须交由游戏服务器兑换。回调固定为 http://127.0.0.1:端口/starlight/callback,拒绝任意远程域名、其他路径、查询或片段。不要把平台令牌放入浏览器回调链接。
业务与生命周期
LoginAsync 支持宿主密码/SMS 表单。CancelLogin 取消当前授权;ClearSession 清理本地身份;LogoutAsync 同时尝试撤销平台会话。SessionChanged 从完成线程触发,游戏 UI 需切回自己的主线程。场景退出 Dispose,避免旧场景继续处理回调。
业务包括 CenterAsync、OrdersAsync、CreateOrderAsync、PayOrderAsync、RefundOrderAsync、ClaimGiftAsync、工单、会话撤销、RolesAsync、RealmsAsync、CapabilitiesAsync、ExportAccountAsync 与 DeleteAccountAsync。重试付款、退款或领取必须复用原 requestId,并在网络超时后先查单。
验证范围
本机 .NET 编译、HTTP 协议、Windows 凭据存取和实际本地 loopback 回调已验证。游戏全屏、输入法、多屏 DPI、发行安装包、Unity IL2CPP 与客户防火墙环境尚需宿主验收;没有将本地 .NET 测试代替这些设备场景。