// // VibratorHandler.swift // ylgamehall // // H5 → Native handler 三件套:vibrator / repeatvibrator / canclevibrator // 契约:docs/H5-Native-Contract.md §3.1 [10][11][12] // 原项目:daoqi/msext RootVC.m:1816-1834 // import AudioToolbox /// 振动 handler 注册器(无状态 enum)。 public enum VibratorHandler { /// 注册三个振动 handler。 public static func register(on bridge: any BridgeProtocol) { // 【10】vibrator — 单次振动 // 入参忽略;副作用:AudioServicesPlaySystemSound;cb "vibrator" bridge.register("vibrator") { _, callback in AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) callback?(.string("vibrator")) } // 【11】repeatvibrator — 重复振动(msext RootVC.m:1820 实际就是单次 vibrate, // 不真的循环,沿用历史) bridge.register("repeatvibrator") { _, callback in AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) callback?(.string("repeatvibrator")) } // 【12】canclevibrator — 释放系统振动音 // AudioServicesDisposeSystemSoundID(kSystemSoundID_Vibrate) 对系统常量 // 意义有限,但 H5 仍会调,必须 noop + cb 维持契约 bridge.register("canclevibrator") { _, callback in AudioServicesDisposeSystemSoundID(kSystemSoundID_Vibrate) callback?(.string("canclevibrator")) } } }