通用游戏账号系统 SDK 框架设计 一、框架核心目标 通用性:支持多平台(PC / 移动端 / 主机)、多账号体系(手机号、邮箱、第三方登录:微信 / QQ/Google/Facebook 等)、多游戏项目复用。 安全性:保障账号认证、数据传输、Token 管理、支付关联的安全性。 可扩展性:支持插件化扩展功能(如防沉迷、实名认证、账号绑定),适配不同游戏的定制化需求。 易用性:提供简洁的 API 接口,降低游戏客户端 / 服务端接入成本,支持同步 / 异步调用。 稳定性:兼容网络异常、服务降级、重试机制,确保账号核心流程(登录 / 注册 / 找回)可靠运行。 二、框架整体架构(分层设计) 采用「核心层 + 扩展层 + 适配层 + 工具层」的四层架构,解耦核心逻辑与定制化需求: plaintext ┌─────────────────────────────────────────────────────────────┐ │ 适配层(Adapter Layer):平台适配、协议适配、存储适配 │ ├─────────────────────────────────────────────────────────────┤ │ 扩展层(Extension Layer):插件化功能(防沉迷、实名认证等) │ ├─────────────────────────────────────────────────────────────┤ │ 核心层(Core Layer):账号核心流程、认证授权、数据管理 │ ├─────────────────────────────────────────────────────────────┤ │ 工具层(Utility Layer):日志、加密、网络、异常处理、配置 │ └─────────────────────────────────────────────────────────────┘ 三、各层详细设计 (一)工具层(Utility Layer)- 基础支撑 封装通用工具类,为上层提供基础能力,确保 SDK 轻量化且可复用。 1. 日志工具(Logger) 功能:分级日志(DEBUG/INFO/WARN/ERROR)、日志输出(控制台 / 文件 / 远程上报)、日志脱敏(隐藏手机号 / Token 等敏感信息)。 接口:Logger.debug(tag, msg)、Logger.error(tag, msg, error)。 2. 加密工具(Crypto) 核心能力: 对称加密(AES):加密账号密码、本地存储的敏感数据。 非对称加密(RSA):传输过程中加密 Token、验证码。 哈希算法(SHA-256):密码加盐哈希存储(客户端不存储明文密码)。 签名算法(HMAC):接口请求签名,防止请求篡改。 接口:Crypto.encryptAES(data, key)、Crypto.hashSHA256(data, salt)、Crypto.signRequest(params, secret)。 3. 网络工具(Http/HttpClient) 功能:支持 HTTP/HTTPS、RESTful/ProtoBuf 协议、超时重试、断点续传、网络状态监听、请求拦截(添加公共参数如设备信息)、响应拦截(统一错误处理)。 接口:HttpClient.get(url, params, config)、HttpClient.post(url, data, config)、HttpClient.setInterceptor(requestInterceptor, responseInterceptor)。 4. 异常处理(Exception) 定义统一异常体系,便于接入方捕获和处理: 系统异常(NetworkException/StorageException):网络错误、本地存储失败。 业务异常(AuthException/AccountException):Token 过期、账号冻结、参数错误。 接口:SDKException(code, message, cause)、ExceptionManager.registerHandler(handler)(自定义异常处理器)。 5. 配置管理(Config) 功能:加载 SDK 配置(服务端地址、超时时间、加密密钥、第三方登录 AppID 等),支持本地配置 + 远程配置动态更新。 接口:Config.init(configMap)、Config.get(key, defaultValue)。 (二)核心层(Core Layer)- 账号核心能力 封装账号生命周期的核心流程,是 SDK 的核心逻辑,对外提供标准化 API。 1. 账号模型(AccountModel) 统一账号数据结构,包含核心字段: javascript 运行 class AccountModel { accountId: string; // 全局唯一账号 ID(SDK 内部生成,与游戏账号解耦) username: string; // 用户名(可选) phone: string; // 手机号(脱敏存储) email: string; // 邮箱(可选) loginType: LoginType; // 登录方式(PHONE/EMAIL/WX/GOOGLE 等) token: TokenModel; // 认证 Token 信息 bindAccounts: BindAccount[]; // 绑定的第三方账号列表 status: AccountStatus; // 账号状态(NORMAL/FROZEN/BANNED) createTime: number; // 创建时间戳 } // Token 模型(支持刷新机制) class TokenModel { accessToken: string; // 访问 Token(短期有效) refreshToken: string; // 刷新 Token(长期有效) expiresIn: number; // 过期时间(秒) tokenType: string; // Token 类型(Bearer) } 2. 认证授权(AuthService) 核心功能:Token 生成、验证、刷新、销毁,是账号安全的核心。 接口: javascript 运行 class AuthService { // 生成 Token(内部调用,无需接入方直接使用) generateToken(account: AccountModel): Promise; // 验证 Token 有效性 verifyToken(token: string): Promise; // 刷新 Token(Access Token 过期时自动调用) refreshToken(refreshToken: string): Promise; // 销毁 Token(退出登录) revokeToken(accountId: string): Promise; // 检查 Token 是否过期(本地+远程双重校验) isTokenExpired(): boolean; } 3. 账号核心流程(AccountService) 封装注册、登录、找回密码、退出登录等核心操作,支持同步 / 异步调用: javascript 运行 class AccountService { // 1. 注册(手机号/邮箱) register(params: RegisterParams): Promise; // 注册参数:手机号/邮箱 + 验证码 + 密码 + 设备信息 // 2. 登录(多方式) login(params: LoginParams): Promise; // 登录参数:登录类型 + 账号凭证(手机号+验证码/邮箱+密码/第三方 code) // 3. 退出登录(清除本地 Token + 远程销毁 Token) logout(accountId?: string): Promise; // 4. 找回密码(重置密码) retrievePassword(params: RetrieveParams): Promise; // 找回参数:手机号/邮箱 + 验证码 + 新密码 // 5. 获取当前登录账号信息 getCurrentAccount(): AccountModel | null; // 6. 检查账号状态(是否冻结/封禁) checkAccountStatus(accountId: string): Promise; } 4. 账号绑定(BindService) 功能:支持多账号体系绑定(如手机号绑定微信、邮箱绑定 Google),实现一号多登。 接口: javascript 运行 class BindService { // 绑定第三方账号 bindThirdAccount(accountId: string, params: BindParams): Promise; // 解绑第三方账号 unbindThirdAccount(accountId: string, loginType: LoginType): Promise; // 获取已绑定的账号列表 getBindAccounts(accountId: string): Promise; } 5. 本地存储(StorageService) 功能:安全存储账号信息、Token、配置等数据,适配不同平台的存储方案(本地缓存 / Keychain/SharedPreferences)。 安全策略:敏感数据(Token / 密码)加密存储,支持数据加密 / 解密、过期清理。 接口: javascript 运行 class StorageService { set(key: string, value: any, encrypt = true): Promise; get(key: string, decrypt = true): Promise; remove(key: string): Promise; clear(): Promise; // 清除所有 SDK 存储数据 } (三)扩展层(Extension Layer)- 插件化功能 采用「核心 + 插件」模式,核心层提供基础能力,扩展层通过插件化机制支持定制化功能,接入方可按需启用。 1. 插件接口规范(IPlugin) 所有扩展功能需实现统一插件接口,便于 SDK 加载和管理: javascript 运行 interface IPlugin { pluginName: string; // 插件名称(唯一标识) init(sdk: GameAccountSDK): Promise; // 插件初始化(传入 SDK 实例,可调用核心能力) destroy(): Promise; // 插件销毁 getConfig(): PluginConfig; // 获取插件配置 } 2. 内置核心插件 插件名称 功能描述 核心接口 验证码插件(SMSPlugin) 支持手机号 / 邮箱验证码发送、验证(对接短信服务商 / 邮箱服务商) sendCode(phone/email, type)、verifyCode(phone/email, code, type) 实名认证插件(RealNamePlugin) 对接国家实名认证系统,支持身份证验证、人脸核验(防未成年人冒用) realNameAuth(idCard, realName)、getAuthStatus(accountId) 防沉迷插件(AntiAddictionPlugin) 基于实名认证结果,限制未成年人游戏时长、消费金额(适配不同地区政策) checkPlayTime(accountId)、limitConsumption(accountId, amount) 支付关联插件(PaymentBindPlugin) 绑定支付账号(如支付宝 / 微信支付 / PayPal),关联账号 ID 与支付账号 bindPaymentAccount(accountId, paymentType, paymentAccount) 设备绑定插件(DeviceBindPlugin) 限制账号登录设备数量,检测异常设备登录(安全防护) bindDevice(accountId, deviceId)、checkDeviceValid(accountId, deviceId) 3. 插件管理(PluginManager) 功能:插件加载、启用、禁用、卸载,支持接入方自定义插件。 接口: javascript 运行 class PluginManager { loadPlugin(plugin: IPlugin): Promise; // 加载插件 enablePlugin(pluginName: string): Promise; // 启用插件 disablePlugin(pluginName: string): Promise; // 禁用插件 getPlugin(pluginName: string): IPlugin | null; // 获取插件实例 } (四)适配层(Adapter Layer)- 跨平台 / 跨协议适配 解决不同平台、不同协议、不同存储方案的兼容性问题,隔离底层差异,确保核心层逻辑统一。 1. 平台适配(PlatformAdapter) 定义平台抽象接口,针对不同平台(Web/Android/iOS/Unity/Unreal)实现具体适配类: javascript 运行 interface PlatformAdapter { platformType: PlatformType; // 平台类型(WEB/ANDROID/IOS/UNITY) getDeviceInfo(): DeviceInfo; // 获取设备信息(设备 ID、系统版本、机型) getNetworkType(): NetworkType; // 获取网络类型(WIFI/4G/5G) requestPermission(permission: string): Promise; // 请求权限(如短信/存储权限) } // 各平台实现示例:WebPlatformAdapter、AndroidPlatformAdapter 等 2. 第三方登录适配(ThirdPartyLoginAdapter) 适配不同第三方登录平台(微信 / QQ/Google/Facebook),统一登录接口: javascript 运行 interface ThirdPartyLoginAdapter { loginType: LoginType; // 第三方登录类型(WX/QQ/GOOGLE) login(): Promise; // 调用第三方登录 SDK,返回授权码/code getUserInfo(accessToken: string): Promise; // 获取第三方用户信息 } // 示例实现:WXLoginAdapter、GoogleLoginAdapter 3. 存储适配(StorageAdapter) 适配不同平台的存储方案,统一存储接口: javascript 运行 interface StorageAdapter { set(key: string, value: string): Promise; get(key: string): Promise; remove(key: string): Promise; clear(): Promise; } // 实现类:WebLocalStorageAdapter(localStorage)、AndroidKeychainAdapter(Keychain)等 4. 协议适配(ProtocolAdapter) 支持不同数据传输协议(JSON/ProtoBuf),统一序列化 / 反序列化接口: javascript 运行 interface ProtocolAdapter { serialize(data: any): string | Uint8Array; // 序列化 deserialize(data: string | Uint8Array, type: string): any; // 反序列化 } // 实现类:JsonProtocolAdapter、ProtoBufProtocolAdapter 四、SDK 对外 API 设计(接入方核心调用接口) SDK 对外提供统一的入口类 GameAccountSDK,隐藏内部实现细节,接入方只需通过该类调用核心功能: javascript 运行 class GameAccountSDK { // 1. 初始化 SDK(必须先调用) static init(config: SDKInitConfig): Promise; // 初始化配置:服务端地址、平台类型、第三方登录配置、启用的插件等 // 2. 账号核心操作(委托给 AccountService) static register(params: RegisterParams): Promise; static login(params: LoginParams): Promise; static logout(): Promise; static retrievePassword(params: RetrieveParams): Promise; static getCurrentAccount(): AccountModel | null; // 3. 账号绑定操作(委托给 BindService) static bindThirdAccount(params: BindParams): Promise; static unbindThirdAccount(loginType: LoginType): Promise; // 4. 插件操作(委托给 PluginManager) static loadPlugin(plugin: IPlugin): Promise; static getPlugin(pluginName: string): IPlugin | null; // 5. 配置与工具 static getConfig(key: string): any; static setExceptionHandler(handler: ExceptionHandler): void; static enableLog(enable: boolean): void; // 开启/关闭日志 } 接入示例(游戏客户端) javascript 运行 // 1. 初始化 SDK await GameAccountSDK.init({ baseUrl: "https://account-game.com/api", // 账号服务端地址 platformType: "UNITY", // 平台类型 timeout: 10000, // 网络超时时间 thirdPartyLoginConfig: { WX: { appId: "wx123456" }, GOOGLE: { clientId: "google-client-id" } }, enabledPlugins: ["RealNamePlugin", "AntiAddictionPlugin"] // 启用的插件 }); // 2. 手机号登录 try { const account = await GameAccountSDK.login({ loginType: "PHONE", phone: "13800138000", code: "123456" // 验证码(通过 SMSPlugin 获取) }); console.log("登录成功,账号 ID:", account.accountId); // 传入游戏服务端验证 Token gameServer.verifyToken(account.token.accessToken); } catch (e) { if (e instanceof AuthException) { console.log("登录失败:", e.message); // 处理 Token 过期、账号冻结等问题 } } // 3. 绑定微信账号 const bindResult = await GameAccountSDK.bindThirdAccount({ loginType: "WX" }); console.log("微信绑定成功:", bindResult); 五、安全性设计 数据传输安全:所有接口采用 HTTPS 传输,敏感参数(密码、验证码)通过 RSA 加密后传输。 Token 安全:Access Token 短期有效(如 2 小时),Refresh Token 长期有效(如 7 天),支持自动刷新;Token 存储采用加密存储(如 Android Keychain/iOS Keychain),防止本地窃取。 接口防篡改:所有请求添加 HMAC 签名(基于请求参数 + 时间戳 + 设备 ID),服务端验证签名合法性,防止请求被篡改。 密码安全:客户端不存储明文密码,注册 / 登录时通过 SHA-256 加盐哈希后传输,服务端存储哈希值而非明文。 账号安全:支持设备绑定、异常登录检测(异地登录提醒)、账号冻结 / 解封机制,插件化支持短信验证、人脸核验等二次验证。 六、可扩展性设计 插件化扩展:通过 IPlugin 接口扩展新功能(如防诈骗提醒、账号注销),无需修改核心代码。 适配层扩展:新增平台(如主机平台 PS5/Xbox)时,实现对应的 PlatformAdapter 和 StorageAdapter 即可,核心逻辑无需改动。 协议扩展:新增数据传输协议(如 Thrift)时,实现 ProtocolAdapter 即可,兼容现有接口。 配置动态更新:支持通过服务端接口动态更新 SDK 配置(如调整 Token 过期时间、启用新插件),无需客户端升级。 七、部署与接入建议 服务端依赖:SDK 需配合后端账号服务(提供注册 / 登录 / Token 验证接口),后端需实现与 SDK 对应的加密、签名、数据存储逻辑。 接入流程: 客户端:集成 SDK → 初始化配置 → 调用登录 / 注册 API → 传入 Token 到游戏服务端。 游戏服务端:接收客户端 Token → 调用账号服务端接口验证 Token → 获取账号 ID 并关联游戏角色。 版本管理:SDK 采用语义化版本(Semantic Versioning),兼容旧版本 API,避免破坏性更新。 测试环境:提供测试环境配置(测试服务端地址、测试第三方登录账号),便于接入方调试。 八、总结 该 SDK 框架通过分层设计、插件化扩展、跨平台适配,实现了「通用化、安全化、易用化」的核心目标,可适配不同类型游戏、不同平台的账号系统需求。接入方只需关注业务逻辑,无需关心底层实现,大幅降低账号系统的开发和维护成本;同时,框架支持功能扩展和平台适配,可随着游戏业务的发展持续迭代升级。