XNotifyFix continues biplobsd/fcm_notification_fix, which its author handed over in October 2026. All credit for the original patcher goes to Biplob Sutradhar (@biplobsd). It installs as an update over the original module (same module id
fcm_notification_fix).New in XNotifyFix v1.6
- Keep notifications on "clear all": China ROMs force-stop apps cleared from Recents (and on the automatic idle clean), which deletes all of their notifications. Selected apps (or all apps) are now only closed, as on Global ROMs, so their notifications stay.
- Installs on ported ROMs whose framework jars already contain duplicate classes.
- Automatic boot-loop guard: after two boots that never finish, the module disables itself.
- "Unthrottle alerts" no longer overrides Do Not Disturb, only-alert-once updates or silent posts.
- The grouped-alert switch works again (it had no effect since upstream v1.4).
- v1.6.1 / v1.6.2: NoMount and Hybrid Mount support, conflict warning for other modules that replace the same framework jars, and a live "patch applied" check.
A patcher and KernelSU WebUI controller for Xiaomi HyperOS China ROMs that permanently resolves Google Play Services (GMS) and Firebase Cloud Messaging (FCM) push notification delays, missed messages, and app wake-up issues.
- 🚀 Zero-PC On-Device Patching: Patches live
services.jarandmiui-services.jaron the fly via Dalvik/ART runtime compatible with HyperOS 3+ / Android 16+ and OTA updates. - 🛡️ Safe & Bootloop-Proof: Transactional all-or-nothing patch engine with guaranteed 4-byte DEX alignment.
- 🔋 Zero Battery Drain & 0 Daemons: Retains kernel cgroup freezer (
greezer) for inactive apps; no background daemons running. - 🎛️ KernelSU / APatch / Magisk WebUI:
- Dynamic Modes: Switch between
Allow All,Whitelist, andBlacklistwithout rebooting. - ⚡ Sound Anti-Mute (6 Protections):
- Grouped Notification Alerts (
GROUP_ALERT_BYPASS, off by default): Lets notifications that an app's group settings would silence still alert. - Anti-Mute Alert on Update (
ANTI_MUTE_UPDATE): Prevents rapid app state updates (e.g. avatar sync, read receipts) from aborting in-flight chimes and vibrations. - Unthrottle Notification Alerts (
UNTHROTTLE_ALERT): Bypasses consecutive notification rate-limiting so incoming message bursts always alert. - MIUI Sound Rate Limit: Suppresses MIUI random note mute interval timers.
- Android 15 Notification Cooldown: Disables system-level notification cooldowns.
- Wearable Off-Body Mute: Prevents notification silencing when watches/wearables are off-body.
- 1-Tap Master Toggle: "⚡ Eliminate Sound Silencing" enables all 6 protections simultaneously; "Restore Defaults" reverts to stock.
- Grouped Notification Alerts (
- 🔄 Notification Channel Sync:
- Batch syncs sound, vibration, lock screen visibility, and floating banners across all target app notification channels.
- Auto-Sync on Boot: Automatically re-applies channel permissions after device reboots.
- Smart Management: 1-tap recommended apps preset, real-time app status (
ACTIVE/STOPPED), 5-way filter tabs, and preset import/export. - Out-of-the-Box Visibility: Automates Lock Screen, Floating/Banner, Badge, Vibration, and Screen Wakeup settings for all installed apps.
- Dynamic Modes: Switch between
By default, the module runs in Allow All mode. However, some shopping and social apps abuse silent/raw data pushes (invisible payloads without notifications) to wake up in the background and drain battery.
Recommended Setup:
- Open the module's WebUI in KernelSU / APatch / Magisk.
- Switch mode to
Whitelist$\rightarrow$ tap Recommended Preset (Chat, Banking, Email, 2FA). - Non-whitelisted apps remain frozen by HyperOS (
greezer), preserving maximum battery life.
Many modern messaging and social apps (e.g. Telegram, WhatsApp, Discord, Slack) dynamically create notification channels per category, chat, and topic:
- When apps group or bundle multiple unread messages, child notifications or summary rows are frequently routed to secondary, silent, or internal channels configured with
sound=nullandvibrate=false. - The screen lights up without sound or vibration because HyperOS wakes the display on incoming notification events, while Android suppresses sound and vibration for channels configured as silent or rate-limited.
Tip
Manual Channel Configuration Hint: If an app assigns certain messages or group chats to a silent channel, configure it manually:
- Go to Android Settings
$\rightarrow$ Notifications & status bar$\rightarrow$ App notifications$\rightarrow$ select the app$\rightarrow$ Notification categories. - Select the affected category (e.g. Messages, Group notifications, Internal notifications) and set Allow sound and Allow vibration to ON. Also ensure the conversation is not muted in the app's in-app settings.
Caution
Security & Privacy Warning: Push notifications carry sensitive data (OTP/2FA verification codes, private chats, banking alerts). A modified or malicious module from an untrusted source can intercept notifications and compromise your personal accounts.
- Always download module ZIPs exclusively from the Official GitHub Releases tab.
- Avoid installing direct ZIP files forwarded on Telegram, third-party download mirrors, or unverified forks.
- Verify the SHA-256 checksum published with the release before flashing.
- Xiaomi / Redmi device running HyperOS 3+ (CN) / Android 16+
- Rooted with KernelSU, APatch, or Magisk
- Download
XNotifyFix-v*.zipfrom Releases. - Verify the SHA-256 checksum against the release notes.
- Flash the module in KernelSU / APatch / Magisk.
- Reboot your device.
-
Automatic guard: if two boots in a row never reach the home screen with the patched framework, the next boot starts stock and the module disables itself (see
repatch.log). -
Hardware Volume Key: Force restart
$\rightarrow$ hold Volume Down (-) until lock screen to enter Safe Mode (disables all modules). -
Custom Recovery (TWRP / OrangeFox): Run
touch /data/adb/modules/fcm_notification_fix/disablein Recovery Terminal.
git clone https://github.com/biplobsd/fcm_notification_fix.git
cd fcm_notification_fix
chmod +x build.sh && ./build.shThis project is licensed under the MIT License.
