Files
youle_cocos/.claude/skills/native-bridge-contract/SKILL.md
T
2026-08-19 17:31:40 +08:00

3.2 KiB
Raw Blame History

name, description
name description
native-bridge-contract Use when 要实现/修改 Cocos 前端与原生侧、配置服务的对接——远程配置文件读取(gameserver / urlserver)、window.settings 同步取值、WebViewJavascriptBridge (WVJB) handler 注册与互调(分享/视频/语音/电话/通讯录/电量/网络/摇一摇),或需要核对这些接口名、数据格式、回调约定、URL 构造。

客户端侧适配约束:远程配置 / 原生数据接口 / 原生↔H5 桥接(须与原项目逐字一致)

继「服务器零改动」之后的第二类不可妥协约束:除 WebSocket 协议外,前端还通过「远程配置文件」与「原生接口」获取大量数据。新 Cocos 前端必须与原项目逐字一致地复刻这些读取/互调/注册方式(接口名、数据格式、回调约定、URL 构造),让原生侧与配置服务零改动即可对接。三类机制:

  1. 远程配置文件读取:入口 Game_Config.Debugger.gameserver(projects/Game_Surface_3/js/01_SubGame/00_SubGame_Config.js:11,远程 .txt URL + ifast_random() 防缓存 + serverType 切正式/本地)。读取链:Logic.setGameServer()(解析 URL 参数 gameconfig 或 Func.getothername("gameserver") 覆盖,12_Logic.js:1259-1281)→ get_config(gameserver)(引擎层函数,GET 远程 txt,12_Logic.js:521)→ ServerUrl_Succ(_msg) 回调(12_Logic.js:533)→ GameData.Server = _msg.data.urlserver(12_Logic.js:549)。URL 构造、请求方式、回包字段解析须一致。

  2. 原生同步数据接口(注入对象):Func.getothername(name) → window.settings.getothername(name)(js/00_Surface/05_Func.js:2467-2471)。window.settings 是原生注入的全局对象,用于同步取配置(如渠道/包信息/gameserver 覆盖)。

  3. 原生↔H5 异步桥 = WebViewJavascriptBridge (WVJB)(05_Func.js:2627 起):

    • 初始化 setupWebViewJavascriptBridge(callback)(经 window.WVJBCallbacks / WebViewJavascriptBridgeReady 事件 / wvjbscheme://__BRIDGE_LOADED__ iframe)。
    • H5 注册供原生调用:bridge.registerHandler("<name>", (data, responseCallback) => {…})。已注册 handler(名称/数据结构须一致):getVideoinfo、sharelogin、sharesuccess、gameui_play_voice、gameui_stop_voice、getphoneinfo、getAddressBook、phonestate、appservice、getaudiourl、getBattery、getwifiLevel、getnetwork、shakeEnd 等(05_Func.js:2651+)。
    • H5 调用原生:bridge.callHandler("<name>", data, responseCallback)(WVJB 约定)。
    • 覆盖能力:分享、视频、语音录制/播放、电话状态、通讯录、电量/wifi/网络、摇一摇等。

Cocos 适配注意:原项目是 H5(WebView + WVJB + window.settings + 引擎 get_config)。新 Cocos 前端无论走 WebView 还是原生(jsb),都必须对接同名 handler、同样的数据结构与回调约定,并保持远程配置读取流程一致,使原生侧与配置服务无需改动即可互通。这套桥接的落地属 sdk/平台层范畴(后续 Plan)。改这部分前先核对上述源码位置,不要臆测接口名或数据格式。