uni.vibrateshort在ios上并非短震,而是依赖taptic engine的触感反馈,需满足设备、系统设置及前台运行条件;安卓端为15ms物理震动,h5不支持,ios须用plus.ios直调uiimpactfeedbackgenerator。

uni.vibrateShort 在 iOS 上根本不是“短震动”
直接调用 uni.vibrateShort 在 iOS 上大概率会失败,或退化成 400ms 的长震——这不是 bug,是苹果故意的。iOS 系统压根不提供“自定义时长震动”能力,uni.vibrateShort 在 iOS 底层会被映射为 UIImpactFeedbackGenerator 的“轻量级触感”,但只有在满足特定条件时才会触发:设备需支持 Taptic Engine(iPhone 7 及之后)、系统设置里开了“声音响应震动”(设置 > 辅助功能 > 触感反馈 > 响铃模式震动 / 静音模式震动),且 App 必须运行在前台。
- 安卓上它真就是约 15ms 的物理震动,稳定可用
- iOS 上它依赖系统触感引擎,不是“马达开关”,而是“演奏指令”
- H5 环境完全不支持,
uni.vibrateShort调用直接静默失败 - 微信小程序里它表现正常,但支付宝/百度小程序需单独验证
iOS 必须绕过 uni API,直连 plus.ios
想在 iOS 上获得原生级点击反馈(比如按钮按下的“咔哒”感),必须放弃 uni.vibrateShort,改用 H5+ 的原生桥接能力调用 UIImpactFeedbackGenerator。这不是“高级用法”,而是 iOS 平台的唯一可靠路径。
- 核心三步:导入类 → 实例化 → 准备并触发:
impact.prepare()不可省,否则首次调用延迟明显 - 别用
init(1)这种魔数写法,应明确使用UIImpactFeedbackStyleLight(轻)、Medium(中)、Heavy(重) - 必须放在
#ifdef APP-PLUS && (IOS || iOS)条件编译块内,否则安卓打包会报错 - 每次触发前建议重新 new 实例,避免多次调用后失效(iOS 16+ 有复用限制)
封装一个跨平台 vibrateClick 函数
把平台差异收进一个函数里,后续所有按钮点击都调它,比到处写条件编译干净得多。关键不是“兼容”,而是让安卓和 iOS 各自走最合适的路径,效果对齐。
function vibrateClick() {
// #ifdef APP-PLUS
const platform = uni.getSystemInfoSync().platform;
if (platform === 'ios') {
const UIImpactFeedbackGenerator = plus.ios.importClass('UIImpactFeedbackGenerator');
const style = plus.ios.invoke('UIImpactFeedbackStyle', 'Light');
const impact = new UIImpactFeedbackGenerator();
impact.prepare();
impact.init(style);
impact.impactOccurred();
} else {
uni.vibrateShort();
}
// #endif
// #ifdef MP-WEIXIN
wx.vibrateShort(); // 微信小程序也支持
// #endif
}
- 不要在 H5 或快应用环境里做任何兜底尝试,没硬件就安静跳过
- 如果项目用了 Ba-TTS 插件,它自带的
BaTTS.vibrate()本质也是同理封装,可直接替代 - 避免高频连续调用(如列表快速滚动中每项都震),iOS 会自动节流,安卓可能卡顿
用户能关掉这个功能,而且应该默认关
震动不是装饰,是干扰源。很多用户在会议、地铁、医院场景下会关闭震动,甚至系统级禁用。你的 App 如果强制震动,等于在替用户做决定。
- 务必在设置页提供「触感反馈」开关,默认值建议为
false - 检查系统级权限:iOS 上即使你代码全对,用户关了“触感反馈”总开关,
UIImpactFeedbackGenerator也会静默失败 - 安卓端需在
manifest.json中声明android.permission.VIBRATE,否则 Android 12+ 会静默拒绝 - 测试时别只看自己手机,找一台 iPhone 8 和一台 iPhone 15 Pro 同时验证,老机型触感引擎支持有限
真正难的不是写出那几行代码,而是理解震动背后是系统策略、硬件能力、用户习惯三者的交集。漏掉任意一环,用户感受到的就不是反馈,而是突兀的打扰。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











