// // VibratorHandler.swift // ylgamehall // // H5 → Native handler「vibrator」(契约 §3.1 [10]:单次振动)。 // Phase 1.15 仅实现这一项作为最小垂直闭环验证标的; // `repeatvibrator` / `canclevibrator` 放到 Phase 2.2 一并补齐。 // import AudioToolbox /// 单次振动 handler 注册器。 /// /// 设计为无状态 enum:震动调用是无状态的 C API,不需要持有任何资源; /// 同时避免误把 handler 注册器实例化保留,造成"注册多份"。 public enum VibratorHandler { /// 在 `bridge` 上注册 `vibrator` handler。 /// /// 契约(`docs/H5-Native-Contract.md` §3.1 [10]): /// - 入参:被忽略(参考原 msext `RootVC.m:1816-1818` 入参 `time` 实际不读取) /// - 副作用:`AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)` /// - responseCallback:字符串 `"vibrator"` /// /// 模拟器无振动硬件,调用会被静默忽略(不抛异常),真机才能感知。 public static func register(on bridge: any BridgeProtocol) { bridge.register("vibrator") { _, callback in AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) callback?(.string("vibrator")) } } }