← Notification attribution for PWAs on macOS · Chrome 152 reference

v152 · behavior contract · notifications

requireInteraction is not honored for installed PWAs on macOS

With notification attribution active (Chrome 152+, macOS, installed PWAs), Chrome no longer supports the requireInteraction notification field for app notifications: whether an alert stays on screen is a per-app macOS setting controlled by the user, not a per-notification setting controlled by the app.

Breaking-change risk for critical-notification UX If your PWA uses requireInteraction: true to keep calls, alarms, or time-critical alerts on screen until the user acts, that guarantee disappears for installed PWAs on macOS in Chrome 152. Users can set the PWA's alert style to “Banners” (auto-dismissing) in macOS settings, and the web app cannot override it. Provide an in-app fallback (for example a full-screen ringing UI) for flows that must not be missed.

syntax

The web API surface is unchanged — the field still exists and is still specified:

// Notifications API (WHATWG) — NotificationOptions.requireInteraction
new Notification(title, { requireInteraction: true });
serviceWorkerRegistration.showNotification(title, { requireInteraction: true });

The WHATWG Notifications Standard defines requireInteraction as a notification's require interaction preference (a boolean, initially false): “When true, indicates that on devices with a sufficiently large screen, the notification should remain readily available until the end user activates or dismisses the notification.”

Source: WHATWG Notifications — NotificationOptions.requireInteraction

inputs

InputContract under attribution (Chrome 152+, macOS, installed PWA)
requireInteraction: trueIgnored. The notification is delivered through the PWA's app shim via UNUserNotificationCenter; persistence (banner vs. alert style) is the user's per-app macOS setting for the PWA, set in System Settings → Notifications
requireInteraction: false / omittedUnchanged — default behavior; the alert follows the same per-app macOS setting

Scope of the change, per the PSA: “For installed PWAs, Chrome will no longer support the requireInteraction field for notifications.” Notifications posted by ordinary (non-installed) tabs in Chrome on macOS are not affected by this feature — they continue to be attributed to Google Chrome and keep the pre-152 behavior.

Source: blink-dev PSA — summary

outputs

Source: blink-dev PSA; WHATWG Notifications — the getter

errors

None. Passing requireInteraction never throws and produces no console warning — it is silently ignored for attributed PWAs. There is no programmatic signal that the preference was disregarded; developers should treat the field as advisory on this platform.

Source: blink-dev PSA (behavior stated as “will no longer support” with no error surface described); WHATWG spec defines no rejection path for the option

context and exposure

Applies only when all attribution requirements hold: macOS, the feature enabled (default in 152), the app installed with OS integration, an app shim registered, and the shim ad-hoc signed — see the requirements table. When any condition fails, the notification is attributed to Google Chrome and requireInteraction behaves as before.

There is no web-exposed capability detection for “is this notification attributed?” — no API reports which delivery path was used. A pragmatic proxy is to check whether the page is running as an installed PWA (matchMedia('(display-mode: standalone)')) on macOS Chrome 152+ and avoid depending on the field there.

Source: web_app_tab_helper.cc — gating conditions; blink-dev PSA

lifecycle

  1. The web app creates the notification (page new Notification() or service worker showNotification()) with requireInteraction set.
  2. Chrome resolves the posting context to an installed app id (GetAppIdForNotificationAttribution) and routes delivery to the PWA's app shim notification provider.
  3. The shim posts a UNNotificationRequest to UNUserNotificationCenter.currentNotificationCenter. macOS applies the PWA's per-app notification settings — including alert style — with no channel for the app to request persistence.
  4. The alert auto-dismisses or stays per the user's setting; activation/dismissal events flow back through the shim's action handler to the service worker as usual (notificationclick, notificationclose).
Source: app_shim_controller.mm — BindNotificationService; web_app_tab_helper.cc

examples

// Before (pre-152 macOS / other platforms): alert persists until dismissed
reg.showNotification("Incoming call", {
  body: "Ada is calling",
  requireInteraction: true,
});

// Chrome 152+, installed PWA on macOS: same code, different outcome.
// The field is ignored; the user's per-app alert style decides.
// Robust pattern: don't encode "must persist" in the notification —
// surface critical state in-app as well.
const isMacPWA =
  matchMedia("(display-mode: standalone)").matches &&
  /Mac OS X/.test(navigator.userAgent);
if (isMacPWA) {
  showInAppRingUI(); // your own unmissable surface
}
reg.showNotification("Incoming call", { body: "Ada is calling" });

Try it in the Chrome Platform Showcase notification capability lab (route HEAD-checked 200, 2026-07-29).

Source: behavior per the PSA; demo per chrome-platform-showcase

browser compatibility

From BCD api/Notification.json (fetched 2026-07-29), with the macOS attribution change annotated — BCD itself has no entry for the attribution behavior:

BrowserrequireInteractionNotes
Chrome47152 (macOS): ignored for installed PWAs with attribution (listing, PSA)
Edge17No separate statement on the macOS attribution change
Firefox117 (partial)“Only supported on Windows. Behind a flag on other operating systems” (dom.webnotifications.requireinteraction.enabled)
SafariNo supportBCD version_added: false; installed web apps on macOS use per-app OS settings — the behavior Chrome aligns to
Source: BCD api/Notification.json; blink-dev PSA

security and privacy

Source: blink-dev PSA — motivation and WebKit alignment

specifications

WHATWG Notifications API StandardrequireInteractionLiving Standard — unchanged; the macOS behavior is a platform constraint layered on top, not a spec change

see also