Haptics Beyond Vibration

A vibration is a buzz of a given length; a haptic is a designed effect, a crisp click or a soft tick, that the platform tunes to its own actuator. expo-haptics (Haptics) exposes both platforms' vocabularies: impactAsync() with Light, Medium, Heavy, Rigid or Soft, notificationAsync() with Success, Warning or Error, selectionAsync() for picker ticks, and on Android performAndroidHapticsAsync() with the platform's own constants such as Confirm, Reject and Long_Press.

The last two lines of the history in Vibration show the difference. performAndroidHapticsAsync(Confirm) reached the system as performHapticFeedback(constant=16), the View-level API that Android maps to a prebaked effect (CLICK at medium strength) and that respects the user's touch-feedback setting without the VIBRATE permission. impactAsync(Medium) became a 43 ms step at 20% amplitude. Neither is a 400 ms buzz.

What each vibration and haptics call becomes on each platform
API Android iOS
Vibration.vibrate() Vibrator service, fixed pattern System vibration, about 400 ms
impactAsync() One short waveform UIImpactFeedbackGenerator
performAndroidHapticsAsync() View.performHapticFeedback Not available
notificationAsync() Short waveforms UINotificationFeedbackGenerator

Use haptics to confirm the user's own actions and Vibration for things that must be noticed, such as a timer. Keep both rare; iOS also silences haptics in Low Power Mode and while the camera is active.