Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Cloud Notification Service
    • Обзор
    • Начало работы с мобильными Push-уведомлениями
    • Начало работы с Push-уведомлениями в браузере
    • Начало работы с SMS
    • Обзор
    • Мобильные Push-уведомления
    • Push-уведомления в браузере
    • SMS
    • Квоты и лимиты
    • Все инструменты
    • AWS CLI
    • AWS SDK для С++
    • AWS SDK для Go
    • AWS SDK для Java
    • AWS SDK для JavaScript
    • AWS SDK для Kotlin
    • AWS SDK для .NET
    • AWS SDK для PHP
    • AWS SDK для Python (boto3)
  • Правила тарификации
  • Метрики Monitoring
  • Логи Cloud Logging
  • История изменений

В этой статье:

  • Подготовьте облако к работе
  • Получите статический ключ доступа
  • Настройте AWS SDK
  • Подготовьте ОС к работе
  • Создайте проект
  • Создайте канал уведомлений
  • Получите список каналов уведомлений
  • Создайте эндпоинт
  • Отправьте уведомление
  • Явные уведомления (Bright Push)
  • Тихие уведомления (Silent Push)
  • SMS-сообщения
  • См. также
  1. Инструменты
  2. AWS SDK для Java

Как начать работать с AWS SDK для Java в Yandex Cloud Notification Service

Статья создана
Yandex Cloud
Обновлена 13 марта 2025 г.
  • Подготовьте облако к работе
  • Получите статический ключ доступа
  • Настройте AWS SDK
    • Подготовьте ОС к работе
    • Создайте проект
  • Создайте канал уведомлений
  • Получите список каналов уведомлений
  • Создайте эндпоинт
  • Отправьте уведомление
    • Явные уведомления (Bright Push)
    • Тихие уведомления (Silent Push)
    • SMS-сообщения
  • См. также

Примечание

Сервис находится на стадии Preview.

Чтобы начать работу с AWS SDK для Java:

  1. Подготовьте облако к работе.
  2. Получите статический ключ доступа.
  3. Настройте AWS SDK.
  4. Создайте канал уведомлений.
  5. Получите список каналов.
  6. Создайте эндпоинт.
  7. Отправьте уведомление.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Получите статический ключ доступаПолучите статический ключ доступа

Для аутентификации в Cloud Notification Service используется статический ключ доступа. Этот ключ выпускается на сервисный аккаунт, и все действия выполняются от имени этого сервисного аккаунта.

Чтобы получить статический ключ доступа:

  1. Создайте сервисный аккаунт.

  2. Назначьте сервисному аккаунту роль editor на каталог.

  3. Для сервисного аккаунта создайте статический ключ доступа.

    Сохраните идентификатор и секретный ключ.

Настройте AWS SDKНастройте AWS SDK

Пререквизиты и инструкция по установке AWS SDK для Java описаны в документации AWS.

Подготовьте ОС к работеПодготовьте ОС к работе

  1. Установите Java версии 8 или выше, например, Oracle Java SE Development Kit. Другие JDK, с которыми работает AWS SDK описаны в документации AWS.
  2. Установите систему сборки maven.

Создайте проектСоздайте проект

  1. Создайте структуру проекта в выбранной директории:

    project
    ├──pom.xml
    └──src
        └──main
          └──java
              └──org
                └──example
                    └──App.java
    
  2. Создайте клиент в файле App.java в директории src/main/java/org/example:

    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();
    
            // Используйте snsClient
    
            snsClient.close();
        }
    
        public static SnsClient getSnsClient() {
            try {
                return SnsClient.builder()
                        .region(Region.of("ru-central1"))
                        .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials
                                .create("<идентификатор_статического_ключа>", "<секретный_ключ>")))
                        .endpointOverride(new URI("https://notifications.yandexcloud.net/"))
                        .httpClientBuilder(ApacheHttpClient.builder())
                        .build();
            } catch (URISyntaxException e) {
                System.err.println(e);
                System.exit(1);
            }
            return null;
        }
    }
    

    Где AwsBasicCredentials содержит идентификатор статического ключа и секретный ключ.

  3. Добавьте конфигурацию проекта в файл pom.xml:

    <?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. Соберите проект:

    mvn clean package
    
  5. Выполните следующую команду для запуска проекта:

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

Создайте канал уведомленийСоздайте канал уведомлений

  1. Импортируйте классы:

    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. Выполните код:

    try {
        Map<String, String> attributes = new HashMap<>();
        attributes.put("<тип_аутентификации>", "<ключ>");
        CreatePlatformApplicationRequest request = CreatePlatformApplicationRequest.builder()
                .platform("<тип_платформы>")
                .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);
    }
    

    Где:

    • attributes — параметры аутентификации на мобильной платформе в формате ключ=значение. Значения зависят от типа платформы:

      • APNs:

        • Аутентификация с токеном:

          • PlatformPrincipal — путь к файлу с ключом подписи токена, полученный в Apple.
          • PlatformCredential — идентификатор ключа подписи (Key ID).
          • ApplePlatformTeamID — идентификатор разработчика (Team ID).
          • ApplePlatformBundleID — идентификатор приложения (Bundle ID).
        • Аутентификация с сертификатом:

          • PlatformPrincipal — SSL-сертификат в формате .pem.

          • PlatformCredential — закрытый ключ сертификата в формате .pem.

            Чтобы сохранить сертификат и закрытый ключ в отдельных файлах формата .pem, вы можете воспользоваться утилитой openssl в Linux:

            openssl pkcs12 -in Certificates.p12 -nokeys -nodes -out certificate.pem
            openssl pkcs12 -in Certificates.p12 -nocerts -nodes -out privatekey.pem
            

        Аутентификация с токеном — более современный и безопасный метод.

      • FCM: PlatformCredential — ключ сервисного аккаунта Google Cloud в формате JSON для аутентификации с помощью HTTP v1 API или API-ключ (server key) для аутентификации с помощью Legacy API.

        Используйте HTTP v1 API, так как с июля 2024 года FCM legacy API не поддерживается.

      • HMS:

        • PlatformPrincipal — идентификатор ключа.
        • PlatformCredential — API-ключ.
    • platform — тип мобильной платформы:

      • APNS и APNS_SANDBOX — Apple Push Notification service (APNs). Для тестирования приложения используйте APNS_SANDBOX.
      • GCM — Firebase Cloud Messaging (FCM).
      • HMS — Huawei Mobile Services (HMS).
      • RUSTORE — RuStore Android.
    • name — имя канала уведомлений, задается пользователем.

      Имя должно быть уникальным для всего CNS. После создания канала изменить имя нельзя. Имя может содержать строчные и заглавные буквы латинского алфавита, цифры, подчеркивания, дефисы и точки. Длина — от 1 до 256 символов. Рекомендуется для каналов APNs указывать в имени идентификатор приложения (Bundle ID), для FCM и HMS — полное название пакета приложения (Package name), для RuStore — значение packageName.

    В результате вы получите идентификатор (ARN) канала уведомлений.

Получите список каналов уведомленийПолучите список каналов уведомлений

  1. Импортируйте классы:

    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. Выполните код:

    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);
    }
    

    В результате будет выведен список каналов уведомлений, размещенных в том же каталоге, в котором находится сервисный аккаунт.

Создайте эндпоинтСоздайте эндпоинт

  1. Импортируйте классы:

    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. Выполните код:

    try {
        CreatePlatformEndpointRequest request = CreatePlatformEndpointRequest.builder()
                .platformApplicationArn("<ARN_канала_уведомлений>")
                .token("<Push-токен>")
                .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);
    }
    

    Где:

    • platformApplicationArn — идентификатор (ARN) канала уведомлений.
    • token — уникальный Push-токен приложения на устройстве пользователя.

Отправьте уведомлениеОтправьте уведомление

Явные уведомления (Bright Push)Явные уведомления (Bright Push)

  1. Импортируйте классы:

    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. Выполните код:

    Apple iOS (APNs)
    Google Android (GCM)
    try {
        PublishRequest request = PublishRequest.builder()
                .targetArn("<ARN_эндпоинта>")
                .message("{\"default\": \"<текст_уведомления>\", \"APNS\": \"{\\\"aps\\\": {\\\"alert\\\": \\\"<текст_уведомления>\\\"}}\"}")
                .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("<ARN_эндпоинта>")
                .message("{\"default\": \"<текст_уведомления>\", \"GCM\": \"{\\\"notification\\\": {\\\"body\\\": \\\"<текст_уведомления>\\\"}}\"}")
                .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);
    }
    

    Где:

    • targetArn — идентификатор (ARN) мобильного эндпоинта.
    • messageStructure — формат сообщения.
    • message — сообщение.

Тихие уведомления (Silent Push)Тихие уведомления (Silent Push)

  1. Импортируйте классы:

    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. Выполните код:

    Apple iOS (APNs)
    Google Android (GCM)
    try {
        PublishRequest request = PublishRequest.builder()
                .targetArn("<ARN_эндпоинта>")
                .message("{\"default\": \"<текст_уведомления>\", \"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("<ARN_эндпоинта>")
                .message("{\"default\": \"<текст_уведомления>\", \"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);
    }
    

    Где:

    • targetArn — идентификатор (ARN) мобильного эндпоинта.
    • message — сообщение.
    • messageStructure — формат сообщения.

SMS-сообщенияSMS-сообщения

  1. Импортируйте классы:

    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. Выполните код:

    try {
        Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
        messageAttributes.put("AWS.SNS.SMS.SenderID", MessageAttributeValue.builder()
                .stringValue("<текстовое_имя_отправителя>")
                .dataType("String").build());
    
        PublishRequest request = PublishRequest.builder()
                .phoneNumber("<номер_телефона>")
                .message("<текст_уведомления>")
                .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);
    }
    

    Где:

    • stringValue — текстовое имя отправителя.
    • phoneNumber — номер телефона получателя.
    • message — текст уведомления.

См. такжеСм. также

  • Начало работы
  • AWS CLI
  • Концепции
  • Документация AWS

Была ли статья полезна?

Предыдущая
AWS SDK для Go
Следующая
AWS SDK для JavaScript
Проект Яндекса
© 2025 ООО «Яндекс.Облако»