[Yandex Cloud documentation](../../../index.md) > [Yandex Cloud Notification Service](../../index.md) > [Step-by-step guides](../index.md) > Mobile push notifications > Creating a push notification channel

# Creating a push notification channel

In Cloud Notification Service, messages to end users are sent through [notification channels](../../concepts/index.md#channels).

To create a channel:

{% list tabs group=instructions %}

- Management console {#console}

  1. In the [management console](https://console.yandex.cloud), select the folder you want to create a notification channel in.
  1. Navigate to **Cloud Notification Service**.
  1. Click **Create notifications channel**.
  1. Select a sending platform in the **Mobile Push notifications** tab:
  
      * `Apple iOS`: For iOS devices.
      * `Google Android`: For Android devices with Google Play services installed.
      * `Huawei Android`: For Android devices with Huawei services installed.
      * `RuStore Android`: For Android devices with the RuStore app marketplace installed.
  
  1. Depending on the platform you select, set the authentication parameters:
  
      **Apple iOS**
      
      * Select the **Authentication method**: `Token` or `Certificate`.
      
          * To authenticate with a token, you will need:
            * **Signature key**: File with the signature key that you will use to certify the authentication token.
                
                Create and download a signature key in your Apple developer account: **Certificates, Identifiers & Profiles** → **Keys** → ![image](../../../_assets/console-icons/circle-plus-fill.svg). You can download the key file only once.
            * **Key ID** (Key ID): Get the ID in your Apple developer account: **Certificates, Identifiers & Profiles** → **Keys**. Make sure the ID matches the signature key you downloaded in the previous step. It must be 10 characters long.
            * **Developer ID** (Team ID): You can find it in the top-right corner of your Apple developer account. It must be 10 characters long and contain only numbers and Latin letters.
            * **Bundle ID**: Get the [bundle ID](https://developer.apple.com/documentation/appstoreconnectapi/list_bundle_ids) in your Apple developer account: **Certificates, Identifiers & Profiles** → **Identifiers** or in the Xcode app: **Target** → **General** → **Identity**. It may contain only numbers, Latin letters, hyphens, and periods.
             
             Learn more about the token in the [relevant Apple documentation](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns).
          
          * To authenticate with a certificate, you will need:
            * **Certificate**: SSL certificate file in `.pem` format.
            * **Private certificate key**: Key file in `.pem` format. 
          
            For more information about the certificate, see the [Apple documentation](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns#2947597).
          
            To save the certificate and the private key in individual `.pem` files, use the [openssl](https://docs.openssl.org/1.1.1/man1/pkcs12) Linux utility:
            
            ```bash
            openssl pkcs12 -in Certificates.p12 -nokeys -nodes -out certificate.pem
            openssl pkcs12 -in Certificates.p12 -nocerts -nodes -out privatekey.pem
            ```
          
          Token-based authentication is preferred as a faster, more modern and secure option.
      
      * Select the **Environment**: `Development` or `Production`. Use `Development` to test the application.
      
      **Google Android**
      
      Specify which **FCM API version** will be used: `HTTP v1` or `Legacy`.
      
      You can authenticate with FCM using the API:
      * _HTTP v1 API_: You will need a **Google Cloud service account key in JSON format**. The key is used to generate OAuth 2.0 temporary tokens for authenticating requests in the FCM HTTP v1 API. You can get it in the Google Cloud management console.
      * _Legacy API_: You will need an **API key** (server key). You can get it in the Firebase management console.
      
      {% note info %}
      
      [FCM no longer supports](https://firebase.google.com/docs/cloud-messaging/migrate-v1) the legacy API starting June 2024.
      
      {% endnote %}
      
      See more in the [Firebase documentation](https://firebase.google.com/docs/cloud-messaging/android/client).
      
      **Huawei Android**
      
      Explore the [HMS documentation](https://developer.huawei.com/consumer/en/doc/hmscore-common-Guides/get-started-hmscore-0000001212585589) and get the authentication parameters:
      * **Key ID**.
      * **API key**.
      
      **RuStore Android**
      
      See the [relevant RuStore article](https://www.rustore.ru/help/sdk/push-notifications/send-push-notifications) and get the authentication parameters:
      * **Project ID**.
      * **Service token**.
      
      You can get your authentication parameters in the RuStore developer console: **Push notifications** → **Projects**.
  
  1. Enter the notification channel **Name**. The channel names are unique within the entire CNS. It may contain lowercase and uppercase Latin letters, numbers, underscores, hyphens, and periods. It may be from 1 to 256 characters long. For APNs channels, we recommend specifying the bundle ID in the name; for FCM and HMS, the full package name; for RuStore, `packageName`.
  1. Optionally, click ![image](../../../_assets/console-icons/plus.svg) **Add description** and enter a description for your notification channel.
  1. Click **Create**.

- AWS CLI {#aws-cli}

  1. If you do not have the AWS CLI yet, [install and configure it](../../../storage/tools/aws-cli.md).
  1. Run this command:

      ```bash
      aws sns create-platform-application \
        --name <channel_name> \
        --platform <platform_type> \
        --attributes <parameter1>=<value1>, ... <parameterN>=<valueN>
      ```
      
      Where:
      
      * `--name`: Notification channel name, user-defined.
        
        The name must be unique throughout CNS. Once the channel is created, you will not be able to change the name. The name may contain lowercase and uppercase Latin letters, numbers, underscores, hyphens, and periods. It must be from 1 to 256 characters long. For APNs channels, we recommend specifying the bundle ID in the name; for FCM and HMS, the full package name; for RuStore, `packageName`.
      
      * `--platform`: Mobile platform type:
      
        * `APNS` and `APNS_SANDBOX`: Apple Push Notification service (APNs). Use `APNS_SANDBOX` to test the application.
        * `GCM`: Firebase Cloud Messaging (FCM).
        * `HMS`: Huawei Mobile Services (HMS).
        * `RUSTORE`: RuStore Android.
      
      * `--attributes`: Mobile platform authentication parameters in `<parameter>=<value>` format, comma-separated. The values depend on the platform:
      
        * APNs:
      
          * Token-based authentication:
      
            * `PlatformPrincipal`: Path to the signature key file from Apple.
            * `PlatformCredential`: Key ID.
            * `ApplePlatformTeamID`: Team ID.
            * `ApplePlatformBundleID`: Bundle ID.
      
          * Certificate-based authentication:
      
            * `PlatformPrincipal`: SSL certificate in `.pem` format.
            * `PlatformCredential`: Certificate private key in `.pem` format.
      
              To save the certificate and the private key in individual `.pem` files, use the [openssl](https://docs.openssl.org/1.1.1/man1/pkcs12) Linux utility:
              
              ```bash
              openssl pkcs12 -in Certificates.p12 -nokeys -nodes -out certificate.pem
              openssl pkcs12 -in Certificates.p12 -nocerts -nodes -out privatekey.pem
              ```
      
          Token-based authentication is preferred as a more modern option.
      
        * FCM: `PlatformCredential` is the Google Cloud service account key in JSON format for authentication with the HTTP v1 API or API key (server key) for authentication with the legacy API.
      
          We recommend escaping the file contents using the `jq @json <<< cat private_key.json` command, as the AWS CLI accepts this parameter in string format.
      
          The HTTP v1 API is preferred as [FCM will no longer support](https://firebase.google.com/docs/cloud-messaging/migrate-v1) the legacy API starting from June 2024.
      
        * HMS:
      
          * `PlatformPrincipal`: Key ID.
          * `PlatformCredential`: API key.
      
        * RuStore:
        
          * `PlatformPrincipal`: Project ID (ProjectID).
          * `PlatformCredential`: Service token (ServiceToken).
      
      As a result, you will get a notification channel ID (ARN). Save it for future use.
      
      For more information about the `aws sns create-platform-application` command, see the [AWS documentation](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/create-platform-application.html).

- AWS SDK for Python {#python}

  1. If you do not have the AWS SDK for Python (boto3) yet, [install and configure it](../../tools/sdk-python.md#aws-sdk).
  1. To create a push notification channel, use the following code:

      ```python
      response = client.create_platform_application(
          Name="<channel_name>",
          Platform="<platform_type>",
          Attributes= {
               "<параметр1>": "<значение1>",
               ...
               "<parameterN>": "<valueN>"
          }
      )
      print ("Platform application ARN:", response['PlatformApplicationArn'])
      ```
      
      Where:
      
      * `Name`: Notification channel name, user-defined.
        
        The name must be unique throughout CNS. Once the channel is created, you will not be able to change the name. The name may contain lowercase and uppercase Latin letters, numbers, underscores, hyphens, and periods. It must be from 1 to 256 characters long. For APNs channels, we recommend specifying the bundle ID in the name; for FCM and HMS, the full package name; for RuStore, `packageName`.
      
      * `Platform`: Mobile platform type:
      
        * `APNS` and `APNS_SANDBOX`: Apple Push Notification service (APNs). Use `APNS_SANDBOX` to test the application.
        * `GCM`: Firebase Cloud Messaging (FCM).
        * `HMS`: Huawei Mobile Services (HMS).
        * `RUSTORE`: RuStore Android.
      
      * `Attributes`: Mobile platform authentication parameters in `"<parameter>": "<value>"` format, comma-separated. The values depend on the platform:
      
        * APNs:
      
          * Token-based authentication:
      
            * `PlatformPrincipal`: Path to the token signature key file from Apple.
            * `PlatformCredential`: Key ID.
            * `ApplePlatformTeamID`: Team ID.
            * `ApplePlatformBundleID`: Bundle ID.
      
          * Certificate-based authentication:
      
            * `PlatformPrincipal`: SSL certificate in `.pem` format.
            * `PlatformCredential`: Certificate private key in `.pem` format.
      
                To save the certificate and the private key in individual `.pem` files, use the [openssl](https://docs.openssl.org/1.1.1/man1/pkcs12) Linux utility:
                
                ```bash
                openssl pkcs12 -in Certificates.p12 -nokeys -nodes -out certificate.pem
                openssl pkcs12 -in Certificates.p12 -nocerts -nodes -out privatekey.pem
                ```
      
          Token-based authentication is preferred as a more modern option.
      
        * FCM: `PlatformCredential` is the Google Cloud service account key in JSON format for authentication with the HTTP v1 API or API key (server key) for authentication with the Legacy API.
      
          The HTTP v1 API is preferred as [FCM will no longer support](https://firebase.google.com/docs/cloud-messaging/migrate-v1) the Legacy API starting June 2024.
      
        * HMS:
      
          * `PlatformPrincipal`: Key ID.
          * `PlatformCredential`: API key.
      
        * RuStore:
        
          * `PlatformPrincipal`: Project ID (ProjectID).
          * `PlatformCredential`: Service token (ServiceToken).
      
      As a result, you will get a notification channel ID (ARN).

- AWS SDK for PHP {#php}

  1. If you do not have the AWS SDK for PHP yet, [install and configure it](../../tools/sdk-php.md#aws-sdk).
  1. To create a push notification channel, use the following code:

      ```php
      $response = $client->createPlatformApplication(
          [
              'Name' => '<channel_name>',
              'Platform' => '<platform_type>',
              'Attributes' => [
                  '<parameter1>' => '<value1>',
                  ...
                  '<parameterN>' => '<valueN>'
              ],
          ]
      );
      
      print($response->get('PlatformApplicationArn'));
      ```
      
      Where:
      
      * `Name`: Notification channel name, user-defined.
        
        The name must be unique throughout CNS. Once the channel is created, you will not be able to change the name. The name may contain lowercase and uppercase Latin letters, numbers, underscores, hyphens, and periods. It must be from 1 to 256 characters long. For APNs channels, we recommend specifying the bundle ID in the name; for FCM and HMS, the full package name; for RuStore, `packageName`.
      
      * `Platform`: Mobile platform type:
      
        * `APNS` and `APNS_SANDBOX`: Apple Push Notification service (APNs). Use `APNS_SANDBOX` to test the application.
        * `GCM`: Firebase Cloud Messaging (FCM).
        * `HMS`: Huawei Mobile Services (HMS).
        * `RUSTORE`: RuStore Android.
      
      * `Attributes`: Mobile platform authentication parameters in `'<parameter1>' => '<value1>'` format, comma-separated. The values depend on the platform:
      
        * APNs:
      
          * Token-based authentication:
      
            * `PlatformPrincipal`: Path to the token signature key file from Apple.
            * `PlatformCredential`: Key ID.
            * `ApplePlatformTeamID`: Team ID.
            * `ApplePlatformBundleID`: Bundle ID.
      
          * Certificate-based authentication:
      
            * `PlatformPrincipal`: SSL certificate in `.pem` format.
            * `PlatformCredential`: Certificate private key in `.pem` format.
      
                To save the certificate and the private key in individual `.pem` files, use the [openssl](https://docs.openssl.org/1.1.1/man1/pkcs12) Linux utility:
                
                ```bash
                openssl pkcs12 -in Certificates.p12 -nokeys -nodes -out certificate.pem
                openssl pkcs12 -in Certificates.p12 -nocerts -nodes -out privatekey.pem
                ```
      
          Token-based authentication: The more modern and secure method.
      
        * FCM: `PlatformCredential` is the Google Cloud service account key in JSON format for authentication with the HTTP v1 API or API key (server key) for authentication with the legacy API.
      
          Use the HTTP v1 API because the [FCM legacy API is no longer supported](https://firebase.google.com/docs/cloud-messaging/migrate-v1) starting July 2024.
      
        * HMS:
      
          * `PlatformPrincipal`: Key ID.
          * `PlatformCredential`: API key.
        
        * RuStore:
        
          * `PlatformPrincipal`: Project ID (ProjectID).
          * `PlatformCredential`: Service token (ServiceToken).
      
      As a result, you will get a notification channel ID (ARN).

- API {#api}

  Use the [create](../../api-ref/create-platform-application.md) HTTP API method for the _PlatformApplications_ resource in Yandex Cloud Notification Service.

{% endlist %}

Creating a notification channel may take some time.