Yandex Cloud
Search
Contact UsGet started
  • Blog
  • Pricing
  • Documentation
  • All Services
  • System Status
    • Featured
    • Infrastructure & Network
    • Data Platform
    • Containers
    • Developer tools
    • Serverless
    • Security
    • Monitoring & Resources
    • ML & AI
    • Business tools
  • All Solutions
    • By industry
    • By use case
    • Economics and Pricing
    • Security
    • Technical Support
    • Customer Stories
    • Gateway to Russia
    • Cloud for Startups
    • Education and Science
  • Blog
  • Pricing
  • Documentation
Yandex project
© 2025 Yandex.Cloud LLC
Yandex Cloud Notification Service
    • Overview
    • Getting started with mobile push notifications
    • Getting started with in-browser push notifications
    • Getting started with SMS
    • Overview
    • Mobile push notifications
    • In-browser push notifications
    • SMS
    • Quotas and limits
    • All tools
    • AWS CLI
    • AWS SDK for C++
    • AWS SDK for Go
    • AWS SDK for Java
    • AWS SDK for JavaScript
    • AWS SDK for Kotlin
    • AWS SDK for .NET
    • AWS SDK for PHP
    • AWS SDK for Python (boto3)
  • Pricing policy
  • Monitoring metrics
  • Logs Cloud Logging
  • Release notes

In this article:

  • Get your cloud ready
  • Get a static access key
  • Configure the AWS SDK
  • Get your OS ready
  • Create a project
  • Create a notification channel
  • Get a list of notification channels
  • Create an endpoint
  • Send a notification
  • Explicit notifications (Bright Push)
  • Silent notifications (Silent Push)
  • Text message
  • See also
  1. Tools
  2. AWS SDK for Java

How to get started with the AWS SDK for Java in Yandex Cloud Notification Service

Written by
Yandex Cloud
Updated at May 7, 2025
  • Get your cloud ready
  • Get a static access key
  • Configure the AWS SDK
    • Get your OS ready
    • Create a project
  • Create a notification channel
  • Get a list of notification channels
  • Create an endpoint
  • Send a notification
    • Explicit notifications (Bright Push)
    • Silent notifications (Silent Push)
    • Text message
  • See also

Note

The service is at the preview stage.

To get started with the AWS SDK for Java:

  1. Get your cloud ready.
  2. Get a static access key.
  3. Configure the AWS SDK.
  4. Create a notification channel.
  5. Get a list of channels.
  6. Create an endpoint.
  7. Send a notification.

Get your cloud readyGet your cloud ready

Sign up in Yandex Cloud and create a billing account:

  1. Navigate to the management console and log in to Yandex Cloud or register a new account.
  2. On the Yandex Cloud Billing page, make sure you have a billing account linked and it has the ACTIVE or TRIAL_ACTIVE status. If you do not have a billing account, create one and link a cloud to it.

If you have an active billing account, you can navigate to the cloud page to create or select a folder for your infrastructure to operate in.

Learn more about clouds and folders.

Get a static access keyGet a static access key

For authentication in Cloud Notification Service, use a static access key. The key is issued for the service account, and all actions are performed on behalf of that service account.

To get a static access key:

  1. Create a service account.

  2. Assign the editor role for the folder to the service account.

  3. Create a static access key for the service account.

    Save the ID and secret key.

Configure the AWS SDKConfigure the AWS SDK

You can find the prerequisites and an AWS SDK for Java installation guide in the relevant AWS documentation.

Get your OS readyGet your OS ready

  1. Install Java 8 or higher, e.g., Oracle Java SE Development Kit. For other JDKs you can use with the AWS SDK, see the AWS developer guide.
  2. Install maven.

Create a projectCreate a project

  1. In the selected directory, create the project structure:

    project
    ├──pom.xml
    └──src
        └──main
          └──java
              └──org
                └──example
                    └──App.java
    
  2. Create a client in the App.java file in the src/main/java/org/example directory:

    package org.example;
    
    import java.net.URI;
    import java.net.URISyntaxException;
    
    import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
    import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
    import software.amazon.awssdk.http.apache.ApacheHttpClient;
    import software.amazon.awssdk.regions.Region;
    import software.amazon.awssdk.services.sns.SnsClient;
    
    public class App {
        public static void main(String... args) {
            SnsClient snsClient = getSnsClient();
    
            // Use snsClient
    
            snsClient.close();
        }
    
        public static SnsClient getSnsClient() {
            try {
                return SnsClient.builder()
                        .region(Region.of("ru-central1"))
                        .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials
                                .create("<static_key_ID>", "<secret_key>")))
                        .endpointOverride(new URI("https://notifications.yandexcloud.net/"))
                        .httpClientBuilder(ApacheHttpClient.builder())
                        .build();
            } catch (URISyntaxException e) {
                System.err.println(e);
                System.exit(1);
            }
            return null;
        }
    }
    

    Where AwsBasicCredentials contains the static key ID and secret key.

  3. Add the project configuration into the pom.xml file:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>snstest</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version>
            <aws.java.sdk.version>2.27.21</aws.java.sdk.version>
            <slf4j.version>1.7.28</slf4j.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>software.amazon.awssdk</groupId>
                    <artifactId>bom</artifactId>
                    <version>${aws.java.sdk.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <dependencies>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>sns</artifactId>
            </dependency>
    
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>apache-client</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-nop</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven.compiler.plugin.version}</version>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
  4. Build the project:

    mvn clean package
    
  5. To start the project, run this command:

    mvn exec:java -Dexec.mainClass="org.example.App"
    

Create a notification channelCreate a notification channel

  1. Import the classes:

    import java.util.HashMap;
    import java.util.Map;
    
    import software.amazon.awssdk.services.sns.SnsClient;
    import software.amazon.awssdk.services.sns.model.SnsException;
    
    import software.amazon.awssdk.services.sns.model.CreatePlatformApplicationRequest;
    import software.amazon.awssdk.services.sns.model.CreatePlatformApplicationResponse;
    
  2. Run the following code:

    try {
        Map<String, String> attributes = new HashMap<>();
        attributes.put("<authentication_type>", "<key>");
        CreatePlatformApplicationRequest request = CreatePlatformApplicationRequest.builder()
                .platform("<platform_type>")
                .name("<channel_name>")
                .attributes(attributes)
                .build();
        CreatePlatformApplicationResponse response = snsClient.createPlatformApplication(request);
        System.out.printf("Platform application ARN: %s\n", response.platformApplicationArn());
    } catch (SnsException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    

    Where:

    • attributes: Mobile platform authentication parameters in key=value format. 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 Linux utility:

            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 starting July 2024.

      • HMS:

        • PlatformPrincipal: Key ID
        • PlatformCredential: API key
    • 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.
    • 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.

    As a result, you will get a notification channel ID (ARN).

Get a list of notification channelsGet a list of notification channels

  1. Import the classes:

    import java.util.Iterator;
    import java.util.List;
    
    import software.amazon.awssdk.services.sns.SnsClient;
    import software.amazon.awssdk.services.sns.model.SnsException;
    
    import software.amazon.awssdk.services.sns.model.ListPlatformApplicationsRequest;
    import software.amazon.awssdk.services.sns.model.ListPlatformApplicationsResponse;
    import software.amazon.awssdk.services.sns.model.PlatformApplication;
    
  2. Run the following code:

    try {
        ListPlatformApplicationsRequest request = ListPlatformApplicationsRequest.builder().build();
        ListPlatformApplicationsResponse response = snsClient.listPlatformApplications(request);
        List<PlatformApplication> apps = response.platformApplications();
        Iterator<PlatformApplication> iter = apps.iterator();
        while (iter.hasNext()) {
            PlatformApplication app = (PlatformApplication) iter.next();
            System.out.printf("Application ARN: %s\n", app.platformApplicationArn());
        }
    } catch (SnsException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    

    You will get the list of notification channels located in the same folder as the service account.

Create an endpointCreate an endpoint

  1. Import the classes:

    import software.amazon.awssdk.services.sns.SnsClient;
    import software.amazon.awssdk.services.sns.model.SnsException;
    
    import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointRequest;
    import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointResponse;
    
  2. Run the following code:

    try {
        CreatePlatformEndpointRequest request = CreatePlatformEndpointRequest.builder()
                .platformApplicationArn("<notification_channel_ARN>")
                .token("<push_token>")
                .build();
        CreatePlatformEndpointResponse response = snsClient.createPlatformEndpoint(request);
        System.out.printf("Endpoint ARN: %s\n", response.endpointArn());
    } catch (SnsException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    

    Where:

    • platformApplicationArn: Notification channel ID (ARN).
    • token: Unique push token for the application on the user’s device.

Send a notificationSend a notification

Explicit notifications (Bright Push)Explicit notifications (Bright Push)

  1. Import the classes:

    import software.amazon.awssdk.services.sns.SnsClient;
    import software.amazon.awssdk.services.sns.model.SnsException;
    
    import software.amazon.awssdk.services.sns.model.PublishRequest;
    import software.amazon.awssdk.services.sns.model.PublishResponse;
    
  2. Run the following code:

    Apple iOS (APNs)
    Google Android (GCM)
    try {
        PublishRequest request = PublishRequest.builder()
                .targetArn("<endpoint_ARN>")
                .message("{\"default\": \"<notification_text>\", \"APNS\": \"{\\\"aps\\\": {\\\"alert\\\": \\\"<notification_text>\\\"}}\"}")
                .messageStructure("json")
                .build();
        PublishResponse response = snsClient.publish(request);
        System.out.printf("Message id: %s\n", response.messageId());
    } catch (SnsException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    
    try {
        PublishRequest request = PublishRequest.builder()
                .targetArn("<endpoint_ARN>")
                .message("{\"default\": \"<notification_text>\", \"GCM\": \"{\\\"notification\\\": {\\\"body\\\": \\\"<notification_text>\\\"}}\"}")
                .messageStructure("json")
                .build();
        PublishResponse response = snsClient.publish(request);
        System.out.printf("Message id: %s\n", response.messageId());
    } catch (SnsException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    

    Where:

    • targetArn: Mobile endpoint ID (ARN)
    • messageStructure: Message format
    • message: Message

Silent notifications (Silent Push)Silent notifications (Silent Push)

  1. Import the classes:

    import software.amazon.awssdk.services.sns.SnsClient;
    import software.amazon.awssdk.services.sns.model.SnsException;
    
    import software.amazon.awssdk.services.sns.model.PublishRequest;
    import software.amazon.awssdk.services.sns.model.PublishResponse;
    
  2. Run the following code:

    Apple iOS (APNs)
    Google Android (GCM)
    try {
        PublishRequest request = PublishRequest.builder()
                .targetArn("<endpoint_ARN>")
                .message("{\"default\": \"<notification_text>\", \"APNS\": \"{\\\"key\\\": \\\"value\\\"}\"}")
                .messageStructure("json")
                .build();
        PublishResponse response = snsClient.publish(request);
        System.out.printf("Message id: %s\n", response.messageId());
    } catch (SnsException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    
    try {
        PublishRequest request = PublishRequest.builder()
                .targetArn("<endpoint_ARN>")
                .message("{\"default\": \"<notification_text>\", \"GCM\": \"{\\\"data\\\": {\\\"key\\\": \\\"value\\\"}}\"}")
                .messageStructure("json")
                .build();
        PublishResponse response = snsClient.publish(request);
        System.out.printf("Message id: %s\n", response.messageId());
    } catch (SnsException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    

    Where:

    • targetArn: Mobile endpoint ID (ARN)
    • message: Message
    • messageStructure: Message format

Text messageText message

  1. Import the classes:

    import java.util.HashMap;
    import java.util.Map;
    
    import software.amazon.awssdk.services.sns.SnsClient;
    import software.amazon.awssdk.services.sns.model.SnsException;
    
    import software.amazon.awssdk.services.sns.model.MessageAttributeValue;
    import software.amazon.awssdk.services.sns.model.PublishRequest;
    import software.amazon.awssdk.services.sns.model.PublishResponse;
    
  2. Run the following code:

    try {
        Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
        messageAttributes.put("AWS.SNS.SMS.SenderID", MessageAttributeValue.builder()
                .stringValue("<text_name_of_sender>")
                .dataType("String").build());
    
        PublishRequest request = PublishRequest.builder()
                .phoneNumber("<phone_number>")
                .message("<notification_text>")
                .messageAttributes(messageAttributes)
                .build();
        PublishResponse response = snsClient.publish(request);
        System.out.printf("Message id: %s\n", response.messageId());
    } catch (SnsException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    

    Where:

    • stringValue: Sender's text name
    • phoneNumber: Recipient's phone number
    • message: Notification text

See alsoSee also

  • Getting started
  • AWS CLI
  • Concepts
  • AWS developer guide

Was the article helpful?

Previous
AWS SDK for Go
Next
AWS SDK for JavaScript
Yandex project
© 2025 Yandex.Cloud LLC