RocketChat / RocketChat/Rocket.Chat
Cloud push gateway accepts pushes (200, counted in Cloud console) but delivers to neither FCM nor APNs — registered workspace, official apps
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 46.1k
- Forks
- 13.9k
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 130
Description
Description:
Push notifications are never delivered to ANY mobile device on our registered self-hosted workspace, even though every link up to the Rocket.Chat cloud gateway is verified working. This affects real messages (priority 10), not just push_test — see verification below. In-app (websocket) messaging works. Opening the mobile app syncs unread counts from 0 to N, confirming the device receives ZERO background pushes.
Related: #40041 has the identical symptom, but its resolution ("testing methodology — real messages work") does not apply here: we verified with real DMs sent to an offline user and delivery still fails on both platforms.
We instrumented the server and captured the gateway's actual responses through a transparent proxy, so this report contains verified data:
- Server → gateway works. For every push, debug logs show
ExternalRequest https://gateway.rocket.chat/push/gcm/send(and/push/apn/send) followed byPush: Sent message to apps { iosApps: 1, androidApps: 1 }. No 401/406/422. - Gateway validates and accepts our tokens. Raw upstream responses captured via proxy: real FCM token → HTTP 200 (empty body); real APNs token → HTTP 200 (empty body); deliberately bogus FCM token → HTTP 422
{"code":125,"error":"invalid push notification payload"}. The gateway distinguishes valid from invalid tokens and accepts ours. - Real-message test (decisive). With the recipient confirmed
offline(both apps force-closed), another user sent a real DM. The offline email notification for that exact message was delivered (SMTP configured) — proving the notification pipeline fired — while the push leg delivered nothing to either device. - Cloud console counts our pushes. cloud.rocket.chat shows "Push Notifications (current month)" incrementing with each send. No limit/block warning; plan shows "Unlimited push notifications".
- Devices ruled out. Official apps reinstalled, notification permission granted, battery optimization/deep-sleep disabled, devices rebooted. Both devices receive pushes from other apps normally. Tested on Wi-Fi AND cellular. iOS (APNs) and Android (FCM) fail identically — two independent push channels.
- Tokens registered correctly in
_raix_push_app_tokens(onegcm, oneapn+voipToken, bothenabled:true, appNameschat.rocket.android/chat.rocket.ios). - Settings verified:
Register_Server=true,Cloud_Service_Agree_PrivacyTerms=true,Push_enable=true,Push_enable_gateway=true,Push_gateway=https://gateway.rocket.chat,Push_production=true. Restarted after changes;shouldUseGateway()satisfied (no native fallback in logs).
The only element common to both failing channels (Apple APNs + Google FCM) is the gateway's downstream delivery for this workspace (Cloud Workspace ID: 6a637449bf7ef133a3aed1ea, rocket.keybase.kr). Could someone with access to gateway logs check the downstream FCM/APNs delivery results for this workspace (e.g. credential/provisioning issue for a newly registered workspace)? It would also help operators if the gateway returned the downstream result instead of an empty 200.
Steps to reproduce:
- Register a self-hosted 8.6.1 workspace, accept Cloud privacy terms, enable gateway push (Enable + Gateway + Production), restart.
- Log in with the official mobile app (Android or iOS), allow notifications, force-close the app (user offline).
- Send a real DM from another user (or use "Send a test push to my user").
Expected behavior:
Pushes accepted by the gateway (HTTP 200) for valid tokens are delivered to FCM/APNs and arrive on devices.
Actual behavior:
Server logs success, the gateway returns 200, the Cloud console counts the sends, and the offline email notification for the same message arrives — but nothing ever arrives on either device (Android FCM and iOS APNs both). Zero deliveries.
Server Setup Information:
- Version of Rocket.Chat Server: 8.6.1
- License Type: Starter (self-managed, workspace registered & Active)
- Number of Users: 2
- Operating System: Ubuntu Linux (Docker host)
- Deployment Method: docker (official image)
- Number of Running Instances: 1
- DB Replicaset Oplog: enabled
- NodeJS Version: 22.22.3 - x64
- MongoDB Version: 8.0.28 (wiredTiger)
Client Setup Information
- Desktop App or Browser Version: N/A (issue is mobile push)
- Operating System: Android (Samsung Galaxy Fold, Play Services healthy) and iOS (iPhone) — official store apps
Additional context
- Site URL https://rocket.keybase.kr (valid HTTPS, matches ROOT_URL).
- Support ticket #115256 was auto-rejected (Starter plan has no dedicated support), so filing here.
Relevant logs:
Push: Sending notification { title: '@shw', text: '...', ... }
Push: send to token { gcm: 'fQA_...' }
ExternalRequest: https://gateway.rocket.chat/push/gcm/send
Push: Sent message to apps { iosApps: 1, androidApps: 1 }
# Proxy-captured upstream responses:
# PATH=/push/gcm/send TOKEN=fQA_... -> STATUS=200 BODY=(empty)
# PATH=/push/apn/send TOKEN=241b... -> STATUS=200 BODY=(empty)
# PATH=/push/gcm/send TOKEN=BOGUS... -> STATUS=422 BODY={"code":125,"error":"invalid push notification payload"}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the gateway entry points /push/gcm/send and /push/apn/send, using the captured 200 responses and the workspace ID to trace downstream FCM/APNs results. Compare valid and bogus token handling and determine whether delivery is blocked by workspace credentials or provisioning. Done means the downstream failure is identified or the gateway exposes a definitive delivery result.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, mongodb, node.js
- Domain
- api, backend, cloud
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100