Push
poolse sends push notifications to your users' phones itself: ringing for incoming calls, chat messages and missed calls. To do that it needs your app's Apple and Firebase credentials. Push in the sidebar is where you add them and set what notifications say.
How push works overall: Push notifications. Setting up your app end to end: Push setup (iOS & Android).
The page has four tabs: Overview, Credentials, Notification settings and Send a test.
Overview
One card per platform, with a status pill:
| Pill | Means |
|---|---|
| Not set up | No credentials for this platform. |
| Waiting for devices | Credentials saved, but no device has registered yet. |
| Incomplete | iOS only: devices registered their VoIP token but not their notification token, so calls ring but chat and missed-call notifications have nowhere to go. |
| Connected | Credentials saved and devices registered. |
- iOS (Apple Push Notification service): whether the APNs key is saved, how many VoIP tokens are registered (Incoming calls) and how many notification tokens (Chat & missed-call notifications).
- Android (Firebase Cloud Messaging): whether the service account was verified with Google, and how many devices are registered (Calls, missed calls and chat).
- Notifications: whether chat and missed-call notifications are on, and what a chat notification shows.
Delivery, last 7 days counts, per platform and for Calls, Missed calls and Messages:
| Column | Means |
|---|---|
| Accepted | Apple or Google took the notification. Neither reports whether the phone then showed it. |
| Failed | Apple or Google refused it. Many failures usually mean a wrong credential. |
| Removed tokens | Tokens from devices that uninstalled the app or signed out. poolse stops sending to them. |
Credentials
iOS: APNs key
One key signs both incoming-call (VoIP) pushes and notifications.
| Field | What to enter |
|---|---|
| Key ID | The 10-character id of your APNs key. |
| Team ID | Your 10-character Apple team id (top right of the developer portal). |
| Bundle ID | Your app's bundle identifier, such as com.example.app, without a .voip suffix; poolse adds it for call pushes. It must match your app exactly. |
| Environment | Production (App Store and TestFlight builds) or Sandbox (development builds run from Xcode). This is the default for devices that don't say which they are; a device on the other environment is detected and corrected on its first push. |
| Private key (.p8) | The whole .p8 file, including the BEGIN and END lines. |
To get the key: in the Apple Developer portal open Certificates,
Identifiers & Profiles → Keys, create a key with Apple Push
Notifications service (APNs) enabled, and download the .p8. Apple lets
you download it only once.
Click Save key. Once saved, the card shows the Key ID, Team ID, Bundle ID, Environment, Private key: Stored, encrypted and Last updated. Edit reopens the form; leave the private key blank to keep the stored one. Remove deletes the key: iOS calls stop ringing closed apps and notifications stop.
Android: Firebase service account
Upload the service account key of the Firebase project your app uses.
Drop the .json file on the card, choose it with Choose file…, or
paste its contents.
To get it: Firebase console → Project settings → Service accounts → Generate new private key. To limit it to push only, create a service account in the Google Cloud console with the Firebase Cloud Messaging API Admin role and add a JSON key.
Don't upload google-services.json: that file configures your app's build
and is refused here.
Click Verify and save. poolse checks the key with Google before saving it. The card then shows the Firebase project, the Service account and when it was Verified with Google. Replace key uploads a new one; Remove deletes it, and Android calls and notifications stop.
Both credentials are encrypted with your workspace key and never shown again. See Encryption & retention.
Notification settings
What poolse sends besides ringing calls. Incoming calls always ring, whatever these say. Click Save changes after editing.
| Setting | Options | Default |
|---|---|---|
| Send chat notifications | On or off. When on, every member except the sender gets new messages, grouped per conversation, with Reply and Mark as read actions. Muted conversations stay silent unless the member is @mentioned. | On for new workspaces |
| What a notification shows | Sender and message; Sender only (who wrote, not what); Nothing (just "New message" under your app's name, for health, finance and other sensitive apps). | Sender and message |
| Group conversations | Every message, or Only @mentions (a member hears about a group message only when it mentions them). One-to-one chats always notify. | Every message |
| Missed-call notifications | On or off. Anyone whose phone rang out is told who called, with a Call back button. | On |
An Example notification previews the result.
Workspaces created before poolse sent chat notifications have Send chat notifications switched off, so users of an app that already pushes messages from its own backend aren't notified twice. Turn it on when you are ready.
With Sender and message, message text goes to Apple and Google inside the notification.
A chat notification also sets your app's icon badge to the user's total
unread count: the sum of unread_count over their conversations, so the
badge and the numbers in your app agree.
Send a test
Sends "Test notification" to every device of one user and shows what Apple and Google said for each.
- Put the app in the background on the test phone (an open Android app receives the test silently).
- Under User, enter your user id (
external_id) or poolse's user id. - Click Send test.
Each device gets a row with Device, Last registered, Result and Details:
| Result | Means |
|---|---|
| Delivered | Apple or Google accepted it. |
| Skipped | Not sent to this device; Details says why. |
| Token gone | The token is no longer valid (app uninstalled or signed out). |
| No credentials | No credentials saved for this device's platform. |
| Failed | Apple or Google refused it; Details has their reason. |
You need credentials for at least one platform before you can send.