FCM Status Checker is an Android utility that tests whether Google Play Services can reach the Firebase Cloud Messaging (FCM) server and keeps the connection active with scheduled heartbeat checks. The project aims to help users identify and reduce FCM delivery failures (e.g. message notification) caused by Doze, battery optimization, aggressive background restrictions, and unstable network or VPN conditions—without requiring root access, a Firebase project, or google-services.json.
- FCM server reachability — probes
mtalk.google.com:5228and reports whether the server is reachable - Google Play Services — availability status and installed version
- Notifications — whether notifications are enabled and
POST_NOTIFICATIONSis granted (Android 13+) - Network — online/offline state and network type (Wi-Fi, cellular, or VPN)
- Overall verdict — green when Google Play Services, the network, and the FCM server are reachable
Uses undocumented Google Play Services broadcasts to send FCM heartbeats on a configurable interval of 1–10 minutes. Each scheduled heartbeat also checks mtalk.google.com:5228 and updates the connection status shown in the app.
- Foreground service with an ongoing notification
- Self-rescheduling alarm that pierces Doze using
setAlarmClock()on Android 12+ - Battery optimization and background-access guidance
- Survives reboot when keep-alive was enabled
- Last heartbeat time and interval shown live in the app
These broadcasts are not a public API. The internal GCM diagnostics screen can be opened from the app through a direct Intent when Google Play Services allows it.
For a detailed comparison with the root/Xposed-based fcmfix project, see FCM_FIX_COMPARISON.md.
Many manufacturers, including Samsung, vivo, Xiaomi, OnePlus, and Huawei, impose background restrictions beyond stock Android Doze. If the keep-alive stops running after the screen turns off:
- Long-press the app icon and tap App info.
- Open Battery or Battery usage.
- Select Unrestricted or Allow background usage.
On vivo devices, also check Background power consumption management and choose High background power usage or Don't restrict background power usage when available.
On vivo and other manufacturer ROMs, allow Autostart or Background start for FCM Status. If the system provides a Lock in recents option, lock FCM Status there. The Settings screen includes an info button with fallback paths for devices that use different menu names.
For troubleshooting, Doze can be temporarily disabled from a computer with ADB:
adb shell dumpsys deviceidle disableThis is useful for confirming whether Doze is affecting message notifications. It is a testing command, not a permanent app setting; a normal app cannot run it for itself without root or ADB permission. Restore normal Doze behavior with:
adb shell dumpsys deviceidle enablePre-built APK: Releases
Requirements:
- JDK 17
- Gradle 8.9
- Android SDK (compileSdk 35, build-tools 35.0.0)
cd app-project
export ANDROID_SDK_ROOT=/path/to/android-sdk
gradle :app:assembleReleaseAPK will be built at app/build/outputs/apk/release/app-release.apk.
- No
google-services.jsonneeded - No Google Firebase services plugin
- Minimum SDK 26; target and compile SDK 35
- Plain Java (no Kotlin / Compose)
- Programmatic UI via AppCompat
- AndroidX, Material Components, Play Services Base
MIT

