分享一个我花了太长时间才发现的静默失败 bug,希望能帮助到那些使用混合/WebView堆栈的人。我的游戏加载的是纯 ES 模块(Capacitor,无打包器,无导入映射)。广告层做了这样一件事:

const mod = await import("@capacitor-community/admob");

在设备上,裸的指定符不能被 WebView 解析,所以导入会抛出异常,插件从未加载,广告就永远不会出现——没有崩溃,没有可见的错误。修复方法是从 Capacitor 桥全局读取插件,而不是导入:

const AdMob = window.Capacitor?.Plugins?.AdMob;

同一个项目,第二个陷阱:当广告在某些设备上关闭时,rewarded ad 的 showRewardVideoAd() promise 并不始终解析,因此游戏在广告完成后就卡住了。切换到插件的 Dismissed / Reward 事件而不是等待 show promise 解析修复了它。

我不断学习的教训:"在浏览器预览中工作"在混合上什么都意味着 nothing——设备运行时解析模块和触发回调的方式不同。尽早在真实设备上测试关键路径(广告/IAP)。是否还有其他人在混合或移动上遇到过 "静默失败花了你几天" 的故事?我很好奇哪些模式会困扰人们。