Files
frontend-app/docs/douyin-ios-return-20260911.md
T

5.0 KiB
Raw Blame History

iOS 抖音支付回跳修复(2026-09-11)

二次修复:SDK 要求完整回跳 URL(插件 0.2.3)

用户确认重新打包安装了 f568fa0 的完整 IPA,支付后仍停在抖音,商城未打开。前次仅修复 Universal Link 选择,遗漏了 SDK 参数格式,不能视为真机回跳问题已经解决。

本次读取官方 OpenSDK 集成指南原文和官方 App 调起支付文档。注册示例明确将 <scheme>://dypay 传给 callbackScheme,不能直接传系统注册的裸 Scheme。

两个配置的值不同:

  • manifest.json 的 ios.urltypes、Info.plist 的 CFBundleURLSchemes:仍为 trustbridgeapp。
  • iOS 原生 DypayAPI 注册的 callbackScheme:必须为 trustbridgeapp://dypay,appId 仍为服务端返回的签名 appid。

app-ios/index.uts 在调用 Swift 前将裸 Scheme 或带 :// 的根地址补齐为完整回跳 URL;已经完整的 URL 不重复拼接,非法格式在修改共享配置及调用原生前拒绝。JS 入口仍传宿主 Scheme,Android 不变。导出资源确认 TbDouyinPayHook 已生成且记录在 hooksClass 中,不额外添加重复 Hook。保留前次移除默认无效 Universal Link 的修复。

56 项支付回归通过,新增测试运行实际 iOS index.uts 转译代码,捕获送入原生桥接的参数,验证裸 Scheme、根地址、完整 URL、非法地址和回调转发。原生 SDK 使用模拟边界;尚无完整 IPA 编译或真机成功回跳的验证结果。必须重新打包安装包含插件 0.2.3 的完整 IPA/自定义基座,WGT 无法更新本次 UTS 原生代码。

HBuilderX 5.24 于 13:58:18 App 资源编译、导出成功,仅既有 CSS 警告;已检查生成的 Swift,确认 callbackURL 拼接、格式验证、原生 initialize 参数及 hooksClass 均生成。此检查不等同 Xcode 编译或真机支付。

前次修复记录(插件 0.2.2,未解决完整 URL 格式)

基于 charles/frontend-app 的 dev_codex / 355ad11。用户已确认在实际 iPhone 上打开 trustbridgeapp:// 可以唤起商城。

发现与修改

该基线已经在 manifest.json 和 info.plist 注册了 trustbridgeapp,但支付初始化又默认传入 https://app.tbmall.xin/uni-universallinks/__UNI__4910728/。项目所带 DypaySDK 的 DypayAPI.h 明确说明:有 Universal Link 时优先使用它,降级使用 Scheme。

2026-09-11 10:48—10:49(北京时间)外网 GET 检查发现,该域名的 /.well-known/apple-app-site-association 和 /apple-app-site-association 都返回 HTTP 200、Content-Type text/html,正文是官网首页,不是 Apple 关联 JSON。默认回跳 URL 本身同样返回官网首页。缺少有效关联文件的链接不能作为已经验证可唤起 App 的 Universal Link;本次没有取得手机日志,不能把网络检查等同于具体真机失败路径的证明。

  • iOS 支付初始化固定使用宿主已注册且用户实测有效的 trustbridgeapp,不带 ://。支付接口里的回跳 Scheme 和 Universal Link 不覆盖该值;支付单号、金额、签名参数保持原值。
  • 移除抖音支付入口对 Universal Link 的默认传入。Android 保留原有 Scheme 选择,Android 原生初始化仍只使用 appId。
  • iOS 桥接收到空 Universal Link 时,调用官方两参数 register(withAppID:callbackScheme:)。插件的显式非空 Universal Link 调用仍保留三参数 API,便于其他已验证宿主使用。
  • 插件升级至 0.2.2。已有 UTSiOSHookProxy 的 URL/Universal Link 回调接收、App.onShow 查单及服务端确认后跳转成功页继续沿用。不以 URL 回跳本身判断支付到账。

本次不修改微信、支付宝的 Universal Link 配置、后端、SQL 或业务接口,也不部署 AASA 文件。

验证与发布

node --test tests/douyin-integration.test.cjs tests/douyin-uts.test.cjs(设置 HBUILDERX_HOME)53 项通过。新增测试验证 iOS 遇到错误 Scheme、带 :// 的 Scheme 和两种 Universal Link 字段时仍注册正确宿主 Scheme,且签名参数不变、成功仍以服务端查单为准;Android 原有选择行为保留。

UTS 测试将实际共享 UTS 转译为 JS 运行,不是原生 Swift 编译。当前 Windows 无 Xcode,完整 IPA 编译和真机回跳需要发布端验证。

HBuilderX 5.24 cli publish --platform APP --type appResource 于 10:51:59 编译、导出成功,只有既有 CSS Autoprefixer 注释警告。资源导出成功不代表完整 IPA 原生构建通过。

发布必须重新云打包并安装完整 IPA 或自定义基座;只有 WGT 无法更新本次 Swift 原生修改。安装后验收支付成功、取消、手动返回 App、杀进程恢复,以及确认到账后只跳转一次支付成功页。若仍不能从抖音返回,请保留该包的构建版本和真机 SDK 日志继续定位,不通过直接标记支付成功绕过查单。