接入 · 宿主回调
9 组回调,以及不接会怎样
游戏发出的每一个调用都经过运行时,最后落到宿主实现的 handler 上。下面九组就是需要实现的内容。全是按需:一组都不接,游戏仍可正常启动,只有真正用到该组功能的调用会失败。
「不实现会怎样」那一列写的是确定行为,逐条对得上引擎源码:运行时不替宿主静默成功,也不把请求丢在半路。唯一必接的是 GameSessionListener:就绪、退出、错误。
宿主接口接住的游戏调用不实现会怎样
- PermissionHandler
PermissionSink
setPermissionHandler()authorize
getSetting
以及 30 个受权限门管的接口:相机、录音、蓝牙、定位、相册、通讯录每个 scope 都当作未授予。getSetting 一个 true 都没有,受管调用以 auth deny 失败,authorize 报 no permission handler。刻意如此:你的 App 自己可能持有相机权限,没有这道门,游戏会在你的授权下摸到相机,而没有人被问过。 - AdHandler
AdEventSink
setAdHandler()createRewardedVideoAd
createInterstitialAd
createBannerAd
createCustomAd
createGridAd
createGameBanner
createGameIcon
createGamePortal广告对象照常可用,但没有广告被展示。每次调用都会结算,不挂在半路:create / load / show 报错,show 另外以 isEnded=false 关闭,hide 报告已隐藏。等广告结束才继续的游戏因此不会停在那里。运行时不自己产生奖励,isEnded 永远是 false。只卖部分格式的宿主,其余格式走同一条路。 - AuthHandler
setAuthHandler()login
checkSession
getUserInfo
getPhoneNumberlogin 以 no auth handler 失败。不静默成功,也不挂起。 - PaymentHandler
PaymentSink
setPaymentHandler()checkIsSupportMidasPayment
requestMidasPayment
requestMidasPaymentGameItemcheckIsSupportMidasPayment 答 allow_pay: false,照规范写的内容不会打开一个结不了账的商店;硬要发起的以 -2 not supported 失败。运行时不持有商户凭证,也从不判定一笔支付成功。 - ShareHandler
ShareSink
setShareHandler()shareAppMessage以 -2 not supported 失败,不静默丢弃 —— 内容常等分享结束再继续。 - NavigationHandler
NavigationSink
setNavigationHandler()navigateToMiniProgram
openCustomerServiceConversation两条都以 not supported 失败。游戏能否把用户引导出你的 App,由你决定。 - SettingHandler
SettingSink
setSettingHandler()openSetting以 -2 not supported 失败。openSetting 指向的是 App 自身的权限设置页,运行时不会代为打开。 - SubpackageHandler
setSubpackageHandler()loadSubpackage
preDownloadSubpackage下载请求失败;本地已经有这个分包时,loadSubpackage 回落到直接执行本地文件。宿主只需把 zip 下到一个临时路径,拆包、校验与挂载由运行时做。 - GameLogHandler
setGameLogHandler()getGameLogManagerAndroid 上回落到写 logcat。reportEvent 那一组不经过这里,它们是桩。
上表是 Android 的 Java / Kotlin SDK。C ABI(Linux / Windows / OpenHarmony / iOS / macOS)目前的宿主回调仅包含生命周期、软键盘与帧驱动(MigoHostCallbacks),商业化这一组还没进 C ABI。在这些平台上,「不实现会怎样」写的就是全部行为。
两条关键行为有门禁盯着。激励视频那条「没有广告就没有奖励」由引擎仓库的 test-ad-reward-integrity-contract.sh 盯着,权限那条由 test-permission-coverage-contract.sh 从源码推导受管接口。两份均非人工维护的列表。
接法与可运行示例在 migo-examples;这些接口的定义在引擎仓库的 platforms/android/library/src/main/java/com/migo/runtime/callback/。