导航
宿主要实现什么
Section titled “宿主要实现什么”通过 GameSession#setNavigationHandler(NavigationHandler) 注册,对应 GameSession.java 第 826 行。
接口有两个入口:
| 方法 | 内容 API | 结果通道 |
|---|---|---|
navigateToMiniProgram(NavigateRequest, NavigationSink) |
migo.navigateToMiniProgram() |
sink.settleNavigated() 或 sink.fail(...) |
openCustomerServiceConversation(CustomerServiceRequest) |
migo.openCustomerServiceConversation() |
返回 true / false |
NavigateRequest 字段:
appId— 内容提供的目标小程序 app id,不会为空;是否允许启动由宿主决定path— 目标内部路径,内容未提供时为空串extraData—String、Boolean、Number、List、Map组成的不可变数据树envVersion—develop、trial或release,默认release
CustomerServiceRequest 字段:
sessionFrom— 用户从游戏哪里进入客服,未设置时为空串showMessageCard— 是否预填描述游戏的卡片sendMessageTitle/sendMessagePath/sendMessageImg— 卡片标题、游戏路径和图片,未设置时为空串
调用从 runtime 宿主线程到达;不要阻塞。NavigationSink 可从任意线程调用,但 navigateToMiniProgram 必须最终恰好 settle 一次。客服接口没有 sink:启动客服 UI 后立即返回 true,而不是等待 UI 关闭。
不实现会怎样
Section titled “不实现会怎样”引自 NavigationHandler.java 头注释:
migo.navigateToMiniProgram()fails withnavigateToMiniProgram:fail not supportedand code-2, andmigo.openCustomerServiceConversation()fails withopenCustomerServiceConversation:fail not supported.
默认方法逐字实现:
sink.fail(-2, "navigateToMiniProgram:fail not supported");以及客服入口默认 return false;runtime 据此向内容结算上述 openCustomerServiceConversation:fail not supported。
内容侧看到什么
Section titled “内容侧看到什么”| migo API | 宿主侧行为 |
|---|---|
migo.navigateToMiniProgram(options) |
启动目标后 settleNavigated,拒绝或失败时 fail |
migo.openCustomerServiceConversation(options) |
客服 UI 启动即成功;无法启动则返回 false 对应失败 |
两者都把用户带出游戏、进入宿主拥有的目标。runtime 没有 app registry,也没有客服系统;宿主要自行决定允许哪些 appId 以及如何打开客服渠道。
NavigateRequest.extraData 是不可变数据树,宿主应按 Map / List / 基础值读取,不要把它当作可执行或可变对象。envVersion 由内容请求决定,默认值是接口注释所列的 release。
navigateToMiniProgram 的 sink 与客服方法的布尔返回不可混用:前者允许异步 Activity result,后者只报告客服 UI 是否已经启动。客服 UI 关闭时没有额外内容侧结果。
宿主对未托管的 appId 应通过 NavigationSink#fail 拒绝,而不是启动一个并不存在的目标。
客服方法成功的时点是 conversation UI started,不是用户关闭 UI 的时点。
| 层 | 状态 |
|---|---|
| Android Java facade | ✓ |
| C ABI | none |