---
source_url: https://www.pubnub.com/docs/chat/swift-chat-sdk/build/features/push-notifications
title: Mobile Push Notifications
updated_at: 2026-06-16T12:48:55.045Z
---

> Documentation Index
> For a curated overview of PubNub documentation, see: https://www.pubnub.com/docs/llms.txt
> For the full list of all documentation pages, see: https://www.pubnub.com/docs/llms-full.txt


# Mobile Push Notifications

Notify online and offline users about appointments, updates, conversations, and more.

:::note Setup required
1. Enable **MOBILE PUSH NOTIFICATIONS** in [Admin Portal](https://admin.pubnub.com/) and configure **APPLE PUSH CREDENTIALS** or **FIREBASE CLOUD MESSAGING**.
2. [Configure Chat SDK](https://www.pubnub.com/docs/chat/swift-chat-sdk/build/configuration#initialize-pubnub) to send/receive push notifications.
:::

## How to set up push notifications

Configure your app to receive notifications via [APNs](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns) (iOS) or [FCM](https://firebase.google.com/docs/cloud-messaging) (Android). See the [full documentation](https://www.pubnub.com/docs/general/push/send#configuration) for SDK-specific details.

1. Server-to-server setup: In Admin Portal, enable MOBILE PUSH NOTIFICATIONS and configure APPLE PUSH CREDENTIALS (APNs Authentication Token .p8 file) or FIREBASE CLOUD MESSAGING (Firebase Server Key).
2. Get device token: Register your app with APNs or FCM to get a unique device token for targeting push notifications. See Apple and Google docs.
3. iOS only: Create a bundle ID for your app.
4. Register channels: Associate the device token with PubNub channels. Messages on those channels trigger push notifications. Update registrations anytime during the app lifecycle.
5. Attach payload: Include provider-specific payload structure with each notification message.

## What's improved in Chat SDK

Chat SDK simplifies push notification setup:

### Simple configuration process

Configure push notifications once during [initialization](https://www.pubnub.com/docs/chat/swift-chat-sdk/build/configuration#initialize-pubnub) via `init()`. Separate options control sending and receiving.

### Easy methods for (un)registering channels

Simplified methods wrap [Swift SDK methods](https://www.pubnub.com/docs/sdks/swift/api-reference/mobile-push), eliminating repeated configuration:

* [Register channels](#register-selected-push-channels)
* [List registered channels](#list-all-push-channels)
* [Unregister selected](#unregister-selected-push-channels) or [all](#unregister-all-push-channels) channels

### Automatic payload creation

With `sendPushes` enabled, Chat SDK automatically attaches the correct payload structure to every message.

See this example:

```json
{
  "fcm": {
    "notification": {
      // message author - either the name or ID (if the name is missing)  
      "title": "John Doe",
      // content of the message
      "text": "Hello, this is a test notification!"
    }
  },
  "apns": {
    "configurations": [
      {
        "targets": [
          {
            // for example, "com.apple.iMovie"
            "topic": "com.domainname.applicationname"
          }
        ],
        "title": "John Doe",
        "text": "Hello, this is a test notification!",
        // default iOS sound for notifications
        "sound": "default",
        // name of the channel on which the message was published
        "subtitle": "Chat Room 1"
      }
    ]
  }
}
```

## Register selected push channels

Register channels to receive push notifications for new messages:

* `registerForPush()` - register a single channel (called on `Channel`)
* `registerPushChannels()` - register multiple channels (called on `Chat`)

### Method signature

These methods take the following parameters:

* registerForPush() - lets you register a device on a single channel 1channel.registerForPush() async throws
* registerPushChannels() - lets you register a device on multiple channels at once 1chat.registerPushChannels(2 channels: [String]3) async throws

#### Input

As the `registerForPush()` method is invoked on the `Channel` object, it doesn't need to take any parameters. The channel the method is invoked on is the one registered.

The `registerPushChannels()` method takes the following parameters:

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| channels | [String] | Yes |  | Array of channels where you want your device to receive push notifications for sent messages. |

#### Output

| Parameter | Description |
| --- | --- |
| `Void` | Method returns no output data. |

### Sample code

* registerForPush() Receive push notifications for messages sent on the support channel. // Register the "support" channel for push notifications. // Assumes a "ChatImpl" reference named "chat" Task { if let channel = try await chat.getChannel(channelId: "support") { try await channel.registerForPush() } else { debugPrint("Channel not found") } }
* registerPushChannels() Receive push notifications for messages sent on the support and incident-management channels. // Register the list of channels for push notifications. // Assumes a "ChatImpl" reference named "chat" Task { try await chat.registerPushChannels(channels: ["support", "incident-management"]) }

## List all push channels

Get all channels registered for push notifications on the device.

### Method signature

This method has the following signature:

```swift
chat.getPushChannels() async throws -> [String]
```

#### Input

This method doesn't take any parameters.

#### Output

| Parameter | Description |
| --- | --- |
| `[String]` | Returned array of all channels registered to receive push notifications on a given device. |

### Sample code

List all registered channels.

```swift
// Get all channels registered for push notifications.
// Assumes a "ChatImpl" reference named "chat"
Task {
  let pushChannels = try await chat.getPushChannels()
  debugPrint("Push notifications are registered for the following channels:")
  debugPrint(pushChannels)
}
```

## Unregister selected push channels

Stop receiving push notifications for specific channels:

* `unregisterFromPush()` - unregister a single channel (called on `Channel`)
* `unregisterPushChannels()` - unregister multiple channels (called on `Chat`)

### Method signature

These methods take the following parameters:

* unregisterFromPush() - lets you unregister a device from a single channel 1channel.unregisterFromPush() async throws
* unregisterPushChannels() - lets you unregister a device from multiple channels at once 1chat.unregisterPushChannels(channels: [String]) async throws

#### Input

As the `unregisterFromPush()` method is invoked on the `Channel` object, it doesn't take any parameters. The channel the method is invoked on is the one unregistered.

The `unregisterPushChannels()` method takes the following parameters:

| Parameter | Description |
| --- | --- |
| `channels` *Type: `[String]`Default: n/a | Array of channels where you want your device to unregister from receiving push notifications for sent messages. |

#### Output

| Parameter | Description |
| --- | --- |
| `Void` | Method returns no output data. |

### Sample code

* unregisterFromPush() Stop receiving push notifications for messages sent on the support channel. // Unregister the "support" channel for push notifications. // Assumes a "ChatImpl" reference named "chat" Task { if let channel = try await chat.getChannel(channelId: "support") { try await channel.unregisterFromPush() } else { debugPrint("Channel not found") } }
* unregisterPushChannels() Stop receiving push notifications for messages sent on the support and incident-management channels. // Unregister the list of channels from push notifications. // Assumes a "ChatImpl" reference named "chat" Task { try await chat.unregisterPushChannels(channels: ["support", "incident-management"]) }

## Unregister all push channels

Disable push notifications for a device on all registered channels using `unregisterAllPushChannels()`.

### Method signature

This method has the following signature:

```swift
chat.unregisterAllPushChannels() async throws
```

#### Input

This method doesn't take any parameters.

#### Output

| Parameter | Description |
| --- | --- |
| `Void` | Method returns no output data. |

### Sample code

Disable push notifications on all registered channels.

```swift
// Unregister all channels for push notifications.
// Assumes a "ChatImpl" reference named "chat"
Task {
  try await chat.unregisterAllPushChannels()
}
```