---
title: Push notifications
nav: Push notifications
group: Build your app
updated: 2026-11-13
description: Send push notifications from your SashiDo app to iOS and Android. Set up APNs and Firebase Cloud Messaging (FCM v1) credentials, register devices, and send from the dashboard, cloud code, the API or an AI assistant.
keywords: parse push notifications, sashido push, parse server apns, parse server fcm v1, firebase cloud messaging parse, ios push parse server, android push parse server
---

Push notifications are included in every SashiDo plan. Your app registers each device as an **installation**; you send to installations by query, channel or audience, and see what was delivered in the dashboard.

## 1. Add the credentials

In the dashboard open **App Settings › Push**.

**iOS (APNs).** Either:

- a **token** (`.p8` key, recommended): upload it with its **Key ID**, your **Team ID** and the app's **Bundle ID**. One key works for all your apps and doesn't expire;
- or a **certificate** (`.p12`) for the app, for development or production.

**Android (Firebase Cloud Messaging).** In the Firebase console open **Project settings › Service accounts › Generate new private key**, and upload the `.json` file as **Private Key JSON**. This uses FCM's v1 API; Google has retired the legacy server keys.

**Windows.** Package Security Identifier (SID) and Client Secret, under **Windows Push Credentials**.

## 2. Register devices

The client SDK saves each device as an installation (`_Installation`) with its push token, its channels and, once you set it, its user:

- **iOS:** after the user allows notifications, pass the device token to the Parse SDK's current installation and save it ([Parse iOS push guide](https://docs.parseplatform.org/ios/guide/#push-notifications)).
- **Android:** add Firebase Messaging to the app, and the Parse Android SDK's FCM module saves the token ([Parse Android push guide](https://docs.parseplatform.org/android/guide/#push-notifications)).

Set a `user` pointer on the installation after login, so you can send to a user's devices. Installations appear in **Core › Browser › _Installation**.

## 3. Send

**From the dashboard:** **Push › Send New Push**, with an audience (all devices, a channel, a saved audience or a query), now or scheduled. **Push › Activity** shows what was sent and delivered; **Push › Audiences** keeps reusable targets.

**From cloud code**, e.g. when something happens in your app:

```javascript
Parse.Cloud.afterSave('Message', async (request) => {
  const recipient = request.object.get('recipient');
  const query = new Parse.Query(Parse.Installation);
  query.equalTo('user', recipient);
  await Parse.Push.send(
    { where: query, data: { alert: 'You have a new message', badge: 'Increment' } },
    { useMasterKey: true }
  );
});
```

**From scripts and AI assistants:** `POST push` through the [Management API's Parse proxy](/en/docs/developers/api#your-apps-data-the-parse-proxy), or ask your assistant through [MCP](/en/docs/developers/mcp) (`send_push`, `get_push_status`).

## Options

In **App Settings › Push**:

| Setting | |
|---|---|
| Enable client push | Lets apps send pushes with the client keys. Handy in development; **turn it off in production**, or anyone with your keys can message your users. |
| Enable REST push | Lets the REST API Key send pushes. Keep the key on your servers. |
| Enable advanced diagnostics | Records detailed failure data per campaign, to debug delivery. |

## When pushes don't arrive

- **Push › Activity › the push** shows how many devices were targeted and the failures. With advanced diagnostics on, the failures say why (e.g. an expired token, a wrong bundle ID).
- iOS: check that the uploaded certificate or token is for the app's Bundle ID, and that a certificate matches the build (development or production).
- Android: check that the app's Firebase project is the one the uploaded JSON belongs to.
- No devices targeted: check that installations exist and match the query or channel.
