Push
Everything else in your app works for the people who already have it open. Push is the only thing that reaches the member who closed it last week.
What it is, exactly
Section titled “What it is, exactly”Delivering a notification to a locked phone belongs to Apple and Google. It is built into iOS and Android, and nobody sells an alternative — so Push is not a delivery network of ours.
What it is, is everything above that:
- Which devices belong to which member, kept current as phones change hands, get reset, or are replaced.
- Sending, retrying a failure, and giving up sensibly.
- Removing a phone that was wiped, so you stop paying to notify nobody.
- Collapsing five messages from one conversation into one banner instead of five.
- Your allowance, and a warning long before you reach it.
Your keys never leave your server
Section titled “Your keys never leave your server”This is the part worth understanding before you set anything up, because it is unusual.
Your Apple push key and your Firebase service account stay on your WordPress. Your own site uses them to sign a token that lasts about an hour, and only that short-lived token is sent to the service that does the delivering.
Two consequences follow, and both are the point:
- Deleting a key on your site actually revokes it. There is no copy of it anywhere else, and nothing to ask us to withdraw.
- A breach on our side is bounded to about an hour, against sites that had recently refreshed — not to your credentials.
On iOS there is no Firebase in the path at all. Notifications go to Apple
directly with your .p8.
Setting it up
Section titled “Setting it up”1. Get your credentials
Section titled “1. Get your credentials”For iOS, from your Apple Developer account:
| You need | Where it is |
|---|---|
Push key (.p8) | Certificates, Identifiers & Profiles → Keys → a key with Apple Push Notifications service enabled |
| Key ID | Shown beside that key. Ten characters |
| Team ID | Top right of the developer portal. Ten characters |
| Bundle ID | Your app’s identifier, e.g. app.memberside.yourcommunity |
Apple lets you download a .p8 once. Keep it somewhere safe; if you lose it
you have to revoke the key and make a new one.
For Android, from your Firebase project:
| You need | Where it is |
|---|---|
| Service account JSON | Project settings → Service accounts → Generate new private key |
google-services.json | Project settings → Your apps → Android app → Download |
The service account is what authorises a send. The google-services.json is
what your build needs — four public identifiers are read out of it and
compiled into your app so it can register for notifications.
You need one platform’s credentials or the other, or both. A community shipping
Android only never needs a .p8.
2. Add them to your site
Section titled “2. Add them to your site”Go to Memberside → API Keys and fill in the Apple and Firebase cards.
For the .p8, paste the whole file — including its -----BEGIN PRIVATE KEY-----
and -----END PRIVATE KEY----- lines. Without them it looks like a file path
rather than a key, and the panel will tell you it could not be read.
Both can instead be given as absolute paths in wp-config.php, which is the
better option if your keys belong in deployment configuration:
define( 'MEMBERSIDE_APNS_KEY_PATH', '/etc/memberside/AuthKey_ABCDE12345.p8' );define( 'MEMBERSIDE_APNS_KEY_ID', 'ABCDE12345' );define( 'MEMBERSIDE_APNS_TEAM_ID', 'TEAM123456' );define( 'MEMBERSIDE_APNS_BUNDLE_ID', 'app.memberside.yourcommunity' );define( 'MEMBERSIDE_FIREBASE_CREDENTIALS_PATH', '/etc/memberside/firebase.json' );3. Connect the service
Section titled “3. Connect the service”Go to Memberside → Services, switch Push Notifications on, and choose Authorize this site. You approve the domain on memberside.app and land back in WordPress connected.
Then choose Test & install. This is the most useful button on the screen: it
signs a real token with your real keys and reports exactly what Apple or Google
said about it. A malformed .p8 shows up here rather than as a member who was
silently never notified.
4. Rebuild your app
Section titled “4. Rebuild your app”The Firebase identifiers and your bundle ID are compiled into the app, so notifications only work in a build made after you added them. The next build registers each member’s device when they open it.
What gets sent
Section titled “What gets sent”Only things that already happened on your site.
| Source | Sends | Needs |
|---|---|---|
| Notifications | Replies, reactions, mentions, friend requests — whatever raises your bell | Ultimate Member – Real-time Notifications |
| Chat | Direct messages, titled with the sender’s name | Better Messages |
Both can be switched off independently in the Push panel. Chat is by far the higher volume, and is the one to switch off first if members tell you the app is noisy.
There is no broadcast tool, no composer, and no way for us to notify your members. Campaigns and audiences are not part of this.
Notification text travels
Section titled “Notification text travels”Unlike Realtime, which carries no member content at all, a push notification carries its own title and body — it has to, because a closed app has nothing to fetch with.
Treat anything in a notification as readable on a locked phone, because it is.
Running out
Section titled “Running out”This is the one place a Memberside limit does not degrade gently, and it is worth being blunt about.
Over the storage cap, an upload is refused and your site serves its own files. Over the connection cap, a member falls back to the periodic refreshes they had before. Over the send cap, a notification is not delivered — not late, not queued. The member it was for never learns it existed.
We warn you at 80% for exactly that reason. Every paid builder plan includes 25,000 notifications a month, which is enough for most communities.
Testing on a device
Section titled “Testing on a device”An app built and installed from Xcode gets sandbox device tokens, and
sending those to Apple’s production servers fails with BadDeviceToken — an
error that reads exactly like a corrupt token.
If you are testing that way, switch on Apple sandbox in the Push panel. Turn it off before you ship: TestFlight and App Store builds need production.
When it does not work
Section titled “When it does not work”| Symptom | Cause | Fix |
|---|---|---|
| Nothing arrives at all | The service is not connected | Connect it under Memberside → Services |
| Keys are set, nothing arrives | The credentials were never accepted | Choose Test & install; it names what Apple or Google refused |
A pasted .p8 reports as unreadable | It was pasted without its BEGIN and END lines | Paste the whole file, or give an absolute path |
| Android works, iOS does not | No .p8, or the wrong APNs environment | Add the key; switch on Apple sandbox for a debug build |
| iOS works, Android does not | No service account, or no google-services.json | Add both, then rebuild |
| One member gets nothing | They declined the notification permission | They re-enable it in their phone’s settings |
| It stopped mid-month | The allowance is spent | Check the panel — those notifications are not delivered later |
| “Domain mismatch” on the panel | A staging copy of a production database | Correct: a copy that kept sending would notify your real members |
What it does not do
Section titled “What it does not do”It does not write your notifications. The text comes from your site.
It does not hold your credentials. See above — that is the whole design.
It cannot reach a member who declined permission, and nothing on your side can change that. They control it from their phone.