Huawei Push (HMS) — Overview
Paylisher delivers push notifications and in-app messages to Android through Firebase Cloud Messaging (FCM). However, Huawei devices released after 2019 ship without Google Mobile Services (GMS), so FCM cannot deliver to them. Huawei provides its own channel — HMS Push Kit — for these devices.
Paylisher adds HMS Push Kit alongside FCM. A device is either GMS‑based or HMS‑based; the SDK detects which is available at runtime and uses the correct channel. FCM behaviour is completely unchanged — HMS is additive and opt‑in.
When do you need this?
| Device | Has GMS? | Channel |
|---|---|---|
| Samsung, Pixel, most global Android | ✅ | FCM (nothing to do) |
| Huawei with Google Play installed | ✅ | FCM |
| Huawei 2019+ (P40, Mate 30/40, nova 6+, AppGallery‑only) | ❌ | HMS Push Kit |
If your audience includes GMS‑less Huawei devices, integrate HMS. If not, you can skip this entirely — the FCM setup is enough.
Architecture
Both channels converge on the same Paylisher rendering engine. The transport (FCM vs HMS) is stripped away before any rendering happens, so a push or in‑app message renders identically regardless of which channel delivered it — all layout types (banner / modal / fullscreen / carousel / native) included.
[Android client] [Backend: Engage]
paylisher-android ── token(+provider) ──► routing by pushProvider:
+ paylisher-android-hms (optional) "fcm" → FCM sender
│ HMS message "hms" → HMS sender
▼ ◄──── HMS push ────
shared render engine (identical to FCM)
- Client: the optional
paylisher-android-hmsmodule receives the HMS message/token and feeds it to the same provider‑neutral core the FCM path uses. - Backend (Engage): each device carries a
pushProvidertag; Engage routeshmstokens to the HMS sender and everything else to FCM.
Two audiences — who does what
This section serves two kinds of readers. Use the table to find your path.
| Step | You use Paylisher's hosted services (SaaS) | You run Paylisher on‑prem (self‑hosted Engage) |
|---|---|---|
| Huawei developer account + AppGallery Connect project | Paylisher's project (coordinate with Paylisher) | You create your own — see [AppGallery Setup](../../Push Credentials/huawei-hms.md) |
Register your app + SHA‑256, get agconnect-services.json | Coordinate with Paylisher, or use your own project | You — see [AppGallery Setup](../../Push Credentials/huawei-hms.md) |
| App‑side SDK integration | You — see App Integration | You — see App Integration |
Engage backend credentials (HMS_*) | Paylisher configures it | You — see Backend Config |
Whichever path you're on, the app‑side integration (App Integration) is the same. Only the account ownership and backend configuration differ.
What you'll set up
- AppGallery Connect — enterprise account, project, app, Push Kit, SHA‑256 fingerprint,
agconnect-services.json, and the sending credential. → [AppGallery Setup](../../Push Credentials/huawei-hms.md) - App‑side — add the HMS module, the Huawei Maven repo, the AGConnect Gradle plugin, the config file, and register the push token. → App Integration
- Backend (Engage) — set the
HMS_*environment variables (on‑prem only). → Backend Config - On‑prem — the end‑to‑end self‑hosted checklist. → On‑Prem
- Troubleshooting — error codes and common pitfalls. → Troubleshooting