---
title: "Notification channels"
description: "Give each kind of notification its own importance, vibration and sound: an order update that buzzes, an offer that stays quiet. Define channels in the Console, send with channelId, and the SDK creates them on the phone."
product: push
language: en
url: https://abrova.ir/en/docs/push/channels
updated: 2026-11-06
---

# Notification channels

Give each kind of notification its own importance, vibration and sound: an order update that buzzes, an offer that stays quiet. Define channels in the Console, send with channelId, and the SDK creates them on the phone.

> **Not every message should buzz**
>
> An order that shipped deserves a sound and a vibration; a discount doesn't. On Android 8 and later, sound, vibration and importance belong to a **notification channel**, and users can switch each channel on or off in the app's notification settings. With Abrova Push you define the channels once in the Console, and every message picks one with `channelId`. The SDK creates the channels on the phone, so your app needs no channel code.

## Step 1: Create channels in the Console

Open **Abrova Push › Channels** and add a channel:

| Setting | What it does |
| --- | --- |
| `Key` | What you send as channelId, for example orders. Lowercase letters, digits, _ and -. It can’t be changed later. |
| `Name` | What users see in the app’s notification settings, in English and Farsi (the phone’s language picks one). |
| `Importance` | High pops up on screen with sound. Default makes a sound without popping up. Low is silent and stays in the list. |
| `Vibration` | On or off. |
| `Sound` | The default sound, no sound, or a sound file in your app (res/raw on Android, the app bundle on iOS). |
| `iOS interruption level` | Automatic (low = passive, everything else = active), or passive, active or time-sensitive. |

A project can have up to 20 channels. A good start for a shop:

| Key | Importance | Vibration | For |
| --- | --- | --- | --- |
| `orders` | High | On | Order confirmed, shipped, courier on the way |
| `account` | High | On | Payment failed, sign-in codes |
| `support` | High | On | Replies from support |
| `offers` | Low | Off | Discounts and new products |

## Step 2: Send with channelId

In **Send › Options › Channel**, pick the channel. From your server, add `channelId`:

```bash
curl -X POST https://push-api.abrova.ir/push/send-to-user \
  -H "x-api-key: $ABROVA_API_KEY" \
  -H "x-server-secret: $ABROVA_SERVER_SECRET" \
  -H "content-type: application/json" \
  -d '{"userId":"user_123","title":"Weekend sale","body":"20% off everything","channelId":"offers"}'
```

`channelId` works with every kind of send: one device, a user, several devices, a topic, a segment, everyone, and scheduled sends.

## Step 3: What happens on the phone

- **Android 8 and later:** the SDK creates the project's channels when the app starts, so they show in the app's notification settings before the first message. Each message is shown on its channel, with the channel's importance, vibration and sound.
- **Android 7 and earlier:** there are no channels; the SDK applies the channel's sound and vibration to each notification.
- **iOS:** the channel's interruption level applies (iOS 15 and later), and its sound applies when the message doesn't set one. Vibration on iPhone follows the sound and the user's settings.
- **Web:** a channel without sound and without vibration shows a silent notification without vibration. Browsers have no channels.

This works the same way over Abrova's own connection and over the optional Firebase add-on.

> **SDK versions**
>
> Channels need Android SDK **0.1.21**, iOS SDK **0.1.20**, Flutter **0.1.28**, React Native **0.1.21** or Web **0.1.14**. Older SDKs show every message on their default channel, as before.

## Your app's own channels

If your Android app already creates its own channels, send their id as `channelId`. An id that isn't a channel of your project is used as your app's own channel. If the phone has no channel with that id, the message goes to the default channel, like Firebase does.

## Changing a channel

- **Name and description:** change them any time. Phones rename the channel.
- **Importance, vibration or sound:** Android doesn't let an app change these once the channel exists. The SDK replaces the channel on every phone, so users lose any setting they changed for it themselves. The Console warns you before saving.
- **Deleting:** phones remove the channel at their next start. Messages that still name it are shown on the default channel.

## Good practice

- Never vibrate for marketing. It's the main reason people switch notifications off altogether.
- Keep important updates (orders, payments, support) and marketing (offers) in separate channels, so users can turn off offers and keep order updates.
- Use time-sensitive on iOS only for messages that really can't wait, such as a sign-in code. It needs the Time Sensitive Notifications capability in your app.
