开放娱乐平台

浏览器返回协议

这是可选的父页面与游戏iframe消息协议,不影响通过launch_url启动游戏。所有消息包含channel为api-client.navigation、version为1及instanceId。

  1. Loader向直接父窗口发送hello,携带随机instanceId,不含凭据。
  2. 父页面可回复capabilities,声明returnToPlatform为true,原样携带instanceId。
  3. 游戏请求返回时发送request-return及requestId。
  4. 父页面接受处理后回复return-accepted,原样携带requestId。未收到确认时Loader会撤销返回能力。

父页面必须同时校验event.source等于当前iframe.contentWindow、event.origin等于启动URL的origin,以及当前instanceId。重新挂载时清理旧实例。接受返回不表示玩家已经退出或钱包关闭,是否调用kick由平台的明确退出动作决定。

request-return可以携带confirmed:true,表示游戏错误窗口中用户已明确确认返回;父页面可直接关闭当前游戏窗口并刷新钱包,避免重复确认。普通请求仍按平台自己的确认流程处理。

capabilities可另声明loaderReady:true,Loader初始化可接管加载提示后发送ready。父页面在验证来源后移除外层加载提示。ready不代表子游戏资源、登录或对局恢复完成;iframe的load也不能证明业务就绪。超时保留返回或重新获取入口的操作。

协议channel名称是公开契约,磁盘目录改为provider/client后仍保持不变。

消息示例

以下为 postMessage 的对象,不是 HTTP API。所有消息均带 channel、version、type、instanceId;返回请求和确认额外带 requestId,字符串应原样回传。

{
  "channel": "api-client.navigation",
  "version": 1,
  "type": "hello",
  "instanceId": "INSTANCE_ID"
}
{
  "channel": "api-client.navigation",
  "version": 1,
  "type": "capabilities",
  "instanceId": "INSTANCE_ID",
  "returnToPlatform": true,
  "loaderReady": true
}
type 方向 附加字段/处理
hello iframe → 父页面 保存当前 instanceId,并声明支持的能力
capabilities 父页面 → iframe returnToPlatform、loaderReady 为可选 boolean
ready iframe → 父页面 移除外层加载提示;不是登录完成通知
request-return iframe → 父页面 requestId 字符串,confirmed 可选 boolean
return-accepted 父页面 → iframe 原样回传 requestId;只表示接受界面返回请求

发送消息的 targetOrigin 必须使用已校验的游戏 origin,不使用 *。本协议不传 secret、API token 或账务余额。