jynew 项目 TapTap Login PC 端登录接入实战:Mac/Windows 平台编译配置与 URL Scheme 协议详解
2026/9/16 13:16:29 网站建设 项目流程

jynew 项目 TapTap Login PC 端登录接入实战:Mac/Windows 平台编译配置与 URL Scheme 协议详解

【免费下载链接】jynewJinYongLegend-like RPG Game Framework with full Modding support and 10+ hours playable samples of game.项目地址: https://gitcode.com/GitHub_Trending/jy/jynew

本文以 jyx2/TapSdkFiles/TapTap/Login/PC.md 为骨架,结合 jynew 仓库中 TapTap.Login SDK 的实际目录结构、编辑器构建脚本与游戏侧调用源码,完整讲解如何在 Mac 与 Windows 平台上将 TapTap 账号登录接入 Unity 游戏。读完本文,你将掌握 Xcode 工程与 Info.plist 的 URL Scheme 配置、Windows 注册表协议关联的完整写法,以及从TapLogin.Init到登录回调的端到端接入流程。

TapTap.Login PC 端能力概览

TapTap.Login 的 PC 支持覆盖Windows 与 Mac 两个平台,提供两种授权形态:

  • Web 浏览器授权:通过系统浏览器打开 TapTap 授权页完成登录;
  • TapTap 客户端扫码登录:在游戏内弹出二维码窗口,用 TapTap 客户端扫码确认(PC 端默认形态)。

这一能力在 SDK 的 CHANGELOG.md 中有明确演进记录:3.2.0 版本"支持 PC 端使用 TapTap 登录",3.5.2 版本新增"PC Web 授权登录"。仓库内置的 SDK 版本为 3.16.5(见 package.json)。

从仓库的 SDK 目录结构看,PC 接入所需的运行时组件非常完整:

jyx2/TapSdkFiles/TapTap/Login/ ├── PC.md # 本文对应的 PC 平台配置文档 ├── Documentation/README.md # 登录 API 使用说明 ├── README.md ├── CHANGELOG.md # 版本演进记录 ├── package.json # 包名 com.taptap.tds.login,版本 3.16.5 ├── Editor/ │ └── TapLoginIOSProcessor.cs # iOS/macOS 构建后自动注入 plist 配置 ├── Plugins/ │ ├── Android/libs/TapLogin_3.16.5.aar │ ├── iOS/TapLoginSDK.framework # iOS/macOS 原生 Framework │ ├── TapTap.Login.dll │ └── zxing.unity.dll # 二维码解析库 └── QRCode/Resources/ # PC 端二维码登录窗 UI 资源

其中zxing.unity.dllQRCode/Resources下的TapTapSdkQRCodeWindow.prefabTapTapSdkWindow.prefab等资源,正是 PC 端"扫码登录"交互的 UI 载体。

使用前提:依赖 TapTap.Common

使用 TapTap.Login 必须依赖 TapTap.Common 基础库。这一点在 package.json 的依赖声明中有硬性体现:

"dependencies": { "com.taptap.tds.common": "https://github.com/TapTap/TapCommon-Unity.git#3.16.5" }

TapTap.Common 提供客户端初始化、统一错误类型(TapExceptionTapErrorCode)等公共能力,登录模块的所有接口都建立在该库之上。若游戏需要支持 PC 平台,则按本文 PC.md 完成平台侧配置;若还需支持 iOS/Android,则分别在对应平台补充配置。

Mac 平台接入

1. 编译配置

在 Unity 中按以下步骤准备 Mac 构建:

  1. 打开Build Settings,选择PC, Mac & Linux Standalone平台;
  2. Target Platform选择MacOS
  3. 勾选Create XCode Project,将工程输出为 Xcode 工程后再用 Xcode 完成编译打包。

选择 Xcode 工程方式的原因在于:Mac 平台需要借助 Xcode 工程对应用包内的Info.plist进行定制,而 SDK 的构建后处理脚本(见下文"自动化注入")也正是面向 Xcode 工程工作的。

2. 配置 URL Types(URL Scheme)

TapTap 客户端在 PC 端完成授权后,需要通过自定义 URL Scheme 回调将授权结果送回游戏进程。因此必须为应用注册如下 Scheme:

open-taptap-{clientId}

其中{clientId}替换为 TapTap 开发者中心分配给游戏的Client ID(与TapLogin.Init(clientID)传入的值一致)。

配置方式有两种:

方式一:Xcode 工程内配置

打开导出的 Xcode 工程,选择Target → Info → URL Types,检查是否已自动添加该 URL Scheme,未添加则手动添加:

  • URL Schemes:open-taptap-{clientId}
  • Identifier:TapWeb

方式二:直接修改 Info.plist

Info.plist中加入以下配置块:

<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>TapWeb</string> <key>CFBundleURLSchemes</key> <array> <string>open-taptap-{client_id}</string> </array> </dict> </array>

CFBundleURLName固定为TapWebCFBundleURLSchemes数组中填写open-taptap-{client_id}

3. 构建后自动注入(仓库实现佐证)

仓库中的 TapLoginIOSProcessor.cs 展示了官方 SDK 的自动化做法:使用[PostProcessBuild(103)]标记构建后处理函数,在 Unity 导出 Xcode 工程后自动执行:

  • 构建目标为BuildTarget.iOS时,调用TapCommonCompile.HandlerPlistTDS-Info.plist中的配置合并进生成的Info.plist
  • 构建目标为BuildTarget.StandaloneOSX时(即 Mac 平台),同样调用HandlerPlist并传入true参数,对project.pbxproj所在路径做兼容处理(UNITY_2020_1_OR_NEWERUNITY_2019_1_OR_NEWER的工程路径拼接方式不同)。

该脚本会查找项目Assets/Plugins/目录下的TDS-Info.plist文件,若缺失会输出错误日志"TapSDK Can't find TDS-Info.plist in Project/Assets/Plugins/"。因此使用此机制时,需保证TDS-Info.plist存在且其中已声明open-taptap-{clientId}等相关配置。若不走自动注入,则按上文手动修改导出后的Info.plist即可。

Windows 平台接入

Windows 平台不依赖 Xcode/Info.plist,而是通过注册表自定义 URL 协议实现 TapTap 客户端的回调唤起,即把open-taptap-{client_id}协议与游戏可执行程序关联起来。

注册表配置脚本

{client_id}替换为实际 Client ID、{游戏名称}替换为应用名、{程序.exe 安装路径}替换为游戏 exe 的绝对路径,保存为.reg文件后双击导入:

Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\open-taptap-{client_id}] @="{游戏名称}" "URL Protocol"="{程序.exe 安装路径}" [HKEY_CLASSES_ROOT\open-taptap-{client_id}\Shell\Open] [HKEY_CLASSES_ROOT\open-taptap-{client_id}\Shell\Open\Command] @="\"{程序.exe 安装路径}\" \"%1\""

各键值说明:

注册表项作用
HKEY_CLASSES_ROOT\open-taptap-{client_id}注册自定义 URL 协议,@值为协议显示名称,URL Protocol声明这是一个 URL 协议键
...\Shell\Open\Command定义该协议被唤起时执行的命令行,"%1"接收完整回调 URL(含授权结果参数)

注:原文档中URL Protocol的值写作"{程序.exe 安装路径}}"(含多余右花括号),实际应为安装路径本身,本文已按可运行形式呈现,导入前请自行核对。

校验方式

打开 Windows 注册表编辑器,定位到HKEY_CLASSES_ROOT\open-taptap-{clientId},检查:

  1. 该键是否存在;
  2. 目录下是否包含DefaultIcon
  3. Shell\Open\Command中的 exe 路径是否与上文中URL Protocol参数匹配。

只有协议注册正确,TapTap 客户端授权完成后才能把回调 URL 正确唤起游戏进程。

URL Scheme 协议与回调流程解析

无论是 Mac 的CFBundleURLTypes还是 Windows 的注册表协议,本质都是在操作系统层面登记同一个自定义协议open-taptap-{clientId},其完整授权回调链路为:

  1. 游戏调用TapLogin.Login(),在 PC 端展示二维码(默认)或 Web 授权页;
  2. 用户在 TapTap 客户端/浏览器中确认授权;
  3. 系统按协议名解析到游戏进程(macOS 经open-taptap-协议、Windows 经注册表Shell\Open\Command),唤起游戏并把回调 URL 作为参数传入;
  4. SDK 截获回调 URL,换取/返回AccessToken,登录流程完成。

jynew 游戏侧对这条链路的封装可见 InitScene.cs 中的注释与调用:

// 在 iOS、Android 系统下,会唤起 TapTap 客户端或以 WebView 方式进行登录 // 在 Windows、macOS 系统下显示二维码(默认)和跳转链接(需配置) var accessToken = await TapLogin.Login();

这段注释与 PC.md 的说明互相印证:PC 端默认展示二维码,若要支持"跳转链接"(Web 浏览器授权)形态,需要在 TapTap 开放平台完成对应配置。

代码接入:在 jynew 中的实际调用

在完成平台侧配置后,代码侧通过TapTap.Login命名空间下的接口完成接入。完整 API 见 Documentation/README.md:

// 1. 初始化(若配合 TapBootstrap 使用则无需手动调用) TapLogin.Init(string clientID); // 2. 唤起 TapTap 网页或客户端登录,成功返回 AccessToken var accessToken = await TapLogin.Login(); // 2.1 指定权限范围(默认 public_profile) var accessToken = await TapLogin.Login(new []{ "public_profile" }); // 3. 获取当前 AccessToken var accessToken = await TapLogin.GetAccessToken(); // 4. 获取用户 Profile(昵称、头像等基本信息) var profile = await TapLogin.FetchProfile(); // 5. 获取篝火测试资格 var boolean = await TapLogin.GetTestQualification(); // 6. 退出登录 TapLogin.Logout();

jynew 项目在 InitScene.cs 中给出了一个完整的落地示例,接入流程可总结为:

  1. 读取 ClientId 配置:通过Resources.Load<TextAsset>("TAPTAP_BUILD_PARAMS")加载TAPTAP_BUILD_PARAMS.txt(JSON 格式),解析出ClientId字段作为TapLogin.Init的参数(InitScene.cs#L46-L64)。配置缺失或缺少ClientId时会输出对应错误日志;
  2. 检查登录状态CheckTapLoginStatus()调用TapLogin.GetAccessToken(),若抛出异常则判定未登录,显示登录按钮(InitScene.cs#L70-L84);
  3. 触发登录:点击按钮后调用TapLogin.Login(),登录成功立即进行后续防沉迷流程,失败则捕获异常并恢复按钮(InitScene.cs#L90-L114);
  4. 异常分类处理:通过TapException(来自 TapTap.Common)统一处理错误,其中TapErrorCode.ERROR_CODE_BIND_CANCEL表示用户取消登录(InitScene.cs#L104-L111)。

需要注意的是,jynew 中的 TapTap 相关代码整体包裹在#if DEVELOP_TAPTAP条件编译块中,只有定义了DEVELOP_TAPTAP宏才会编译并执行 TapTap 登录流程,否则直接加载0_GameStart场景进入游戏。因此在实际工程中启用 TapTap 登录,需在 Player Settings 中配置该脚本宏。

验证与排错建议

  • Mac:确认导出后的 Xcode 工程中Info.plist存在CFBundleURLTypes且 Scheme 为open-taptap-{clientId}(与开发者中心 Client ID 完全一致,注意大小写与连字符);
  • Windows:打开注册表编辑器核对HKEY_CLASSES_ROOT\open-taptap-{clientId}及其Shell\Open\Command;可在命令行手动执行start open-taptap-{clientId}:验证协议能否唤起游戏;
  • 日志排查:登录失败时,TapExceptioncodemessage会打印到 Unity 控制台(InitScene.cs#L106),结合CHANGELOG.md中关于"修复登录模块对系统 URL 回调的使用方式"(3.11.1)等历史修复记录,可快速定位是协议注册问题还是 SDK 版本问题;
  • 版本一致性com.taptap.tds.logincom.taptap.tds.common建议保持相同版本(仓库中均为 3.16.5),避免因版本不匹配导致的编译或运行时异常。

总结

TapTap Login 的 PC 端接入本质上只有两件事:平台协议注册(Mac 的Info.plist/ Windows 的注册表)与代码 API 调用TapLogin.InitLogin→ 回调处理)。本文以 jynew 仓库中的 PC.md 为主线,结合 TapLoginIOSProcessor.cs 的自动注入机制与 InitScene.cs 的实际接入代码,完整覆盖了从构建配置到登录回调的整条链路,可作为将 TapTap 账号体系接入 Unity PC 游戏(Windows/macOS)的参考指南。

【免费下载链接】jynewJinYongLegend-like RPG Game Framework with full Modding support and 10+ hours playable samples of game.项目地址: https://gitcode.com/GitHub_Trending/jy/jynew

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询