Как начать работать с AWS SDK для PHP в Yandex Cloud Notification Service
Чтобы начать работу с AWS SDK для PHP:
- Подготовьте облако к работе.
- Получите статический ключ доступа.
- Настройте AWS SDK.
- Создайте канал уведомлений.
- Получите список каналов.
- Создайте эндпоинт.
- Отправьте уведомление.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Получите статический ключ доступа
Для аутентификации в Cloud Notification Service используется статический ключ доступа. Этот ключ выпускается на сервисный аккаунт, и все действия выполняются от имени этого сервисного аккаунта.
Чтобы получить статический ключ доступа:
-
Создайте сервисный аккаунт.
-
Для сервисного аккаунта создайте статический ключ доступа.
Сохраните идентификатор и секретный ключ.
Настройте AWS SDK
-
Ознакомьтесь с системными требованиями
. -
Установите PHP
версии 5.5 или выше.При работе с AWS SDK не отключайте расширение SimpleXML PHP extension
. -
Установите Composer
для управления зависимостями PHP. -
Добавьте библиотеку AWS SDK для PHP в ваш проект:
-
Если Composer установлен в системе глобально, то в корневом каталоге вашего проекта выполните команду:
composer require aws/aws-sdk-php
-
Если Composer не установлен глобально, выполните команду:
php composer.phar require aws/aws-sdk-php
Другие способы установки см. в документации AWS
. -
-
Создайте клиент:
<?php require '/<путь_до_каталога>/vendor/autoload.php'; use Aws\Sns\SnsClient; $client = new SnsClient( [ 'endpoint' => 'https://notifications.yandexcloud.net/', 'version' => 'latest', 'region' => 'ru-central1', 'credentials' => [ 'key' => '<идентификатор_статического_ключа>', 'secret' => '<секретный_ключ>', ], ] ); ?>
Где:
/<путь_до_каталога>/vendor/autoload.php
— путь к файлуautoload.php
, который создается при установке AWS SDK.key
— идентификатор статического ключа.secret
— секретный ключ.
Создайте канал уведомлений
$response = $client->createPlatformApplication(
[
'Name' => '<имя_канала>',
'Platform' => 'GCM',
'Attributes' => [
'PlatformCredential' => '<API-ключ_FCM>',
],
]
);
print($response->get('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 года FCM legacy API не поддерживается
. -
HMS:
PlatformPrincipal
— идентификатор ключа.PlatformCredential
— API-ключ.
-
В результате вы получите идентификатор (ARN) канала уведомлений.
Получите список каналов уведомлений
$response = $client->listPlatformApplications();
var_dump($response->get('PlatformApplications'));
В результате будет выведен список каналов уведомлений, размещенных в том же каталоге, в котором находится сервисный аккаунт.
Создайте эндпоинт
$response = $client->createPlatformEndpoint(
[
'PlatformApplicationArn' => '<ARN_канала_уведомлений>',
'Token' => '<Push-токен>',
]
);
print($response->get('EndpointArn'));
Где:
PlatformApplicationArn
— идентификатор (ARN) канала уведомлений.Token
— уникальный Push-токен приложения на устройстве пользователя.
В результате вы получите идентификатор (ARN) мобильного эндпоинта.
Отправьте уведомление
Мобильные Push-уведомления
$response = $client->publish(
[
'TargetArn' => '<идентификатор_эндпоинта>',
'Message' => json_encode([
'default' => '<текст_уведомления>',
'APNS' => json_encode([
'aps' => [
'alert' => '<текст_уведомления>',
],
])
]),
'MessageStructure' => 'json',
]
);
print($response->get('MessageId'));
Явные уведомления (Bright Push)
$response = $client->publish(
[
'TargetArn' => '<идентификатор_эндпоинта>',
'Message' => json_encode([
'default' => '<текст_уведомления>',
'GCM' => json_encode([
'notification' => [
'title' => '<заголовок_уведомления>',
'body' => '<текст_уведомления>',
],
])
]),
'MessageStructure' => 'json',
]
);
print($response->get('MessageId'));
Тихие уведомления (Silent Push)
$response = $client->publish(
[
'TargetArn' => '<идентификатор_эндпоинта>',
'Message' => json_encode([
'default' => '<текст_уведомления>',
'GCM' => json_encode([
'data' => ['<ключ>' => '<значение>'],
])
]),
'MessageStructure' => 'json',
]
);
print($response->get('MessageId'));
Где:
TargetArn
— идентификатор (ARN) мобильного эндпоинта.MessageStructure
— формат сообщения.Message
— сообщение.
SMS-сообщения
$response = $client->publish(
[
'Message' => '<сообщение>',
'PhoneNumber' => '<номер_телефона>',
]
);
print($response->get('MessageId'));