Настроить доступ к API Xiva через TVM
Шаг 1. Уточните, кому и какой доступ нужно выдать
Определите:
- от имени какого TVM-приложения вы будете выписывать тикет для похода в Xiva
- в каком сервисе Xiva вы хотите отправлять пуши/подписывать пользователей на пуши
- в каком окружении Xiva вы хотите это делать
- нужно ли вам только отправлять пуши, только подписывать пользователей на пуши - или и то, и другое
Пример: вы хотите, чтобы приложение notifier-tst (id 2012202)
получило право отправлять пуши в ксивном сервисе mail в sandbox-окружении (push-sandbox.yandex.ru).
Шаг 2. Запросите нужную роль в IDM
Запросите для своего TVM-приложения в системе
Xiva роль:
- сервис/окружение/publisher, чтобы отправлять пуши
- сервис/окружение/subscriber, чтобы подписывать пользователей на пуши.
Например, так выглядит запрос роли mail/sandbox/publisher для notifier-tst.
Шаг 3. Выпишите TVM service-тикет
Передайте сервис из шага 1 параметром URL service=
при походе в ручку API.
Положите в заголовок X-Ya-Service-Ticket TVM service-тикет,
выписанный от вашего src для одного из следующих dst:
Хост |
ID TVM-приложения |
push-sandbox.yandex.ru |
2002788 |
push.yandex-team.ru |
2008783 |
push.yandex.TLD |
2008797 |
Например для приложения notifier-tst:
curl -i https://push-sandbox.yandex.ru/v2/send?service=mail\&uid=123\&event=hello -d '{"payload": "hello"}'
-H ''
HTTP/1.1 200 OK
Server: YaWEBServer/2.0.0
NotificationID: 200000007
TransitID: XlkDcTD3TCg1
Y-Context: XlkDcTD3TCg1
Connection: keep-alive
Content-Type: text/html
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: TransitID, Y-Context
Content-Length: 2
OK
TVM service-тикет также можно выписать с помощью tvm_curl:
SRC=2012202 DST=2002788 tvm_curl https://push-sandbox.yandex.ru/v2/send?service=mail\&uid=123\&event=hello -d '{"payload": "hello"}'
OK
Получить уведомление по WebSocket
Шаг 1. Запросите секретную подпись для упрощенной аутентификации
Этот запрос делается с бэкенда вашего сервиса.
Вам понадобятся TVM service-тикет и роль subscriber для вашего бэкенда
(подробнее тут).
curl -i 'https://push.yandex.ru/v2/secret_sign?service=ваш_сервис&user=john'
-H ''
HTTP/1.1 200 OK
Server: YaWEBServer/2.0.0
Content-Type: application/json
Y-Context: j0eM8QMsa4Y1
Content-Length: 64
{"sign": "00a1560f46a1953645c9dd9fbcba4836", "ts": "1510268445"}
Передайте sign и ts в ваше клиентское приложение.
Шаг 2. Установите WebSocket соединение
Этот запрос делается с клиентского приложения. Подставьте полученные на предыдущем шаге sign и ts в одноименные
параметры запроса.
var socket = new WebSocket(
"wss://push.yandex.ru/v2/subscribe/websocket?sign=4f56e049fa551a34db07ac8e610d7da4&ts=1175892393&service=ваш_сервис&user=john&client=verstka&session=first_tab");
socket.onmessage = function(event) { console.log("new message: " +
event.data); };
socket.onclose = function(event) { console.log("closed: " + event.code + " " +
event.reason); };
Вам придет первое уведомление - ping от сервера. Оно означает, что соединение до транспорта в порядке.
Шаг 3. Отправьте уведомление
Этот запрос выполняется с бэкенда вашего сервиса.
curl -i 'https://push.yandex.ru/v2/send?user=john&event=greeting'
-H ''
-d '{ "payload" : "Привет!" }'
HTTP/1.1 200 OK
Server: YaWEBServer/2.0.0
NotificationID: 2
TransitID: NXerURMsbKo1
Y-Context: NXerURMsbKo1
Content-Type: text/html
Content-Length: 2
OK
Получить уведомление в мобильном приложении
Шаг 1. Зарегистрируйте приложение
Это разовая операция, осуществляемая в разделе "Аккаунты".
Android - в качестве имени приложения используйте имя пакета FCM.
iOS - в качестве имени приложения используйте имя сертификата APNs.
Шаг 2. Подпишитесь на уведомления
Запрос выполняется с бэкенда сервиса.
curl -i 'https://push.yandex.ru/v2/subscribe/app?service=ваш_сервис&app_name=имя_приложения&platform=ios&user=john&uuid=unique_app_installation_id'
-H ''
--data-urlencode 'push_token=device token'
HTTP/1.1 200 OK
Server: YaWEBServer/2.0.0
Y-Context: WxfWhUMsa0U1
Content-Type: text/html
Content-Length: 2
OK
В ответ придет HTTP код 200 и "OK" в теле ответа.
Шаг 3. Отправьте уведомление
Запрос выполняется с бэкенда сервиса. Обратите внимание, что в поле payload нужно передать корректный JSON, в
противном случае сообщение будет принято, но доставляться оно будет во все подписки пользователя, кроме
мобильных.
curl -i 'https://push.yandex.ru/v2/send?user=john&event=greeting'
-H ''
-d '{ "payload": {}, "repack": {"apns": {"aps": {"alert": "Привет!"}}, "fcm": {"notification": {"title":
"Привет!", "sound": "default"}}}}'
HTTP/1.1 200 OK
Server: YaWEBServer/2.0.0
NotificationID: 3
TransitID: m0gejUMsa8c1
Y-Context: m0gejUMsa8c1
Content-Type: text/html
Content-Length: 2
OK