Как начать работать с AWS SDK для Python (boto3) в Yandex Cloud Notification Service
boto3
Чтобы начать работу с AWS SDK для Python (boto3):
- Подготовьте облако к работе.
- Получите статический ключ доступа.
- Настройте AWS SDK.
- Создайте канал уведомлений.
- Получите список каналов.
- Создайте эндпоинт.
- Отправьте уведомление.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Получите статический ключ доступа
Для аутентификации в Cloud Notification Service используется статический ключ доступа. Этот ключ выпускается на сервисный аккаунт, и все действия выполняются от имени этого сервисного аккаунта.
Чтобы получить статический ключ доступа:
-
Создайте сервисный аккаунт.
-
Для сервисного аккаунта создайте статический ключ доступа.
Сохраните идентификатор и секретный ключ.
Настройте AWS SDK
-
Установите AWS SDK для Python (boto3) с помощью команды:
pip install boto3
-
Создайте клиент:
import boto3 client = boto3.client( "sns", endpoint_url="https://notifications.yandexcloud.net/", region_name="ru-central1", aws_access_key_id="<идентификатор_статического_ключа>", aws_secret_access_key="<секретный_ключ>", verify=False # Disable SSL verification for notifications.yandexcloud.net )
Где:
aws_access_key_id
— идентификатор статического ключа.aws_secret_access_key
— секретный ключ.
Создайте канал уведомлений
response = client.create_platform_application(
Name="<имя_канала>",
Platform="GCM",
Attributes= {
"PlatformCredential": "<API-ключ_FCM>"
}
)
print ("Platform application ARN:", response['PlatformApplicationArn'])
Где:
Name
— имя канала уведомлений, задается пользователем. Должно быть уникальным в облаке. Может содержать строчные и заглавные буквы латинского алфавита, цифры, подчеркивания, дефисы и точки. Допустимая длина — от 1 до 256 символов. Рекомендуется для каналов APNs указывать в имени идентификатор приложения (Bundle ID), для FCM и HMS — полное название пакета приложения (Package name).Platform
— тип мобильной платформы:APNS
иAPNS_SANDBOX
— Apple Push Notification service (APNs). Для тестирования приложения используйтеAPNS_SANDBOX
.GCM
— Firebase Cloud Messaging (FCM).HMS
— Huawei Mobile Services (HMS).
Attributes
— параметры аутентификации на мобильной платформе в форматеключ=значение
. Значения зависят от типа платформы:-
APNs:
- Аутентификация с токеном:
PlatformPrincipal
— путь к файлу с ключом подписи токена, полученный в Apple.PlatformCredential
— идентификатор ключа подписи (Key ID).ApplePlatformTeamID
— идентификатор разработчика (TeamID).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 года Legacy API не будет поддерживаться FCM
. -
HMS:
PlatformPrincipal
— идентификатор ключа.PlatformCredential
— API-ключ.
-
В результате вы получите идентификатор (ARN) канала уведомлений.
Получите список каналов уведомлений
response = client.list_platform_applications()
for app in response["PlatformApplications"]:
print("Application ARN:", app["PlatformApplicationArn"])
В результате будет выведен список каналов уведомлений, размещенных в том же каталоге, в котором находится сервисный аккаунт.
Создайте эндпоинт
response = client.create_platform_endpoint(
PlatformApplicationArn="<ARN_канала_уведомлений>",
Token="<Push-токен>",
)
print ("Endpoint ARN:", response["EndpointArn"])
Где:
PlatformApplicationArn
— идентификатор (ARN) канала уведомлений.Token
— уникальный Push-токен приложения на устройстве пользователя.
В результате вы получите идентификатор (ARN) мобильного эндпоинта.
Отправьте уведомление
Явные уведомления (Bright Push)
response = client.publish(
TargetArn="<идентификатор_эндпоинта>",
Message=json.dumps({
"default": "<текст_уведомления>",
"APNS": json.dumps({
"aps": {
"alert": "<текст_уведомления>"
}
})
}),
MessageStructure="json"
)
print ("Message id:", response["MessageId"])
response = client.publish(
TargetArn="<идентификатор_эндпоинта>",
Message=json.dumps({
"default": "<текст_уведомления>",
"GCM": json.dumps({
"notification": {
"body": "<текст_уведомления>"
}
})
}),
MessageStructure="json"
)
print ("Message id:", response["MessageId"])
Где:
TargetArn
— идентификатор (ARN) мобильного эндпоинта.MessageStructure
— формат сообщения.Message
— сообщение.
Тихие уведомления (Silent Push)
response = client.publish(
TargetArn="<endpoint ARN>",
Message='{"data": { "key": "value" } }')
print ("Message id:", response["MessageId"])
Где:
TargetArn
— идентификатор (ARN) мобильного эндпоинта.Message
— сообщение.