Приложение С. Сервис push-нотификаций
В системе ECSS-10 реализован сервис отправки push-нотификаций, поддержаны Apple Push Notification Service и Firebase Cloud Messaging.
Требования к клиентскому приложению
- При регистрации устройству нужно прислать следующие push-параметры в заголовке Contact:
- pn-prid (токен, полученный устройством от провайдера push-нотификаций)
- pn-provider (провайдер push-нотификаций)
- pn-params (параметры push-нотификаций) в данный момент используется только для матчинга контактов
- Устройству не требуется обновлять expires регистрации, т.к все контакты с валидными pn-* параметрами будут храниться на SSW бесконечно, либо до того момента пока клиент сам не разрегистрируется с этими же параметрами, либо пока не пошлет регистрацию с тем же label, что был и у предыдущей, либо пока не будет выключен сервис push-нотификаций конкретного провайдера на софтсвиче (system/push_notification/properties/*).
Реализация взаимодействия с устройством и провайдером на стороне SSW
Push-нотификация о входящем звонке
При поступлении INVITE, направленного на устройство, которое при регистрации отправило не пустые push-параметры отправляется push-нотификация о входящем звонке.
Пример JSONа нотификации для firebase:{"to": "device_token", "priority":10, "data": {"type":"invite", "date":1623753491}, "time_to_live":28 }
Пример JSONа нотификации для apns:
{"aps": {"badge":"10"}, "acme": {"badge":"10", "type":"invite", "date":1623753691, "number":"uri|anonymous", "dispaly_name":"name|empty_list"} }
- SSW ждет перерегистрацию клиента;
- После перерегистрации устройства, если таймаут звонка не закончился, то к push-клиенту посылается инвайт и звонок продолжается в обычном режиме;
- Если перерегистрации не было, то считается, что клиент не ответил на звонок и не получил push-нотификацию;
- Push-нотификация на перерегистрацию была удалена, т.к. теперь push-параметры на SSW хранятся "вечно"
Push-нотификация о пропущенных звонках (на время отсутствия клиента в сети)
- При долгом отсутствии push-клиента, после его регистрации должна приходить push-нотификация о всех пропущенных звонках.
- Для реализации нужно сделать push bucket: хранить в нем все push-нотификации о входящих инвайтах вместе с call_ref(ами) звонков
- При ответе на звонок удалять его из push-бакета
- Если клиент перерегистрировался, но в push-бакете есть нотификации о входящих звонках, то формируется нотификация о пропущенных звонках
- Нотификация отправляется push-клиенту(ам)
Пример JSON нотификации для firebase:
{"to": "token", "priority":10, "data":{ "type":"missed_calls", "date":1625133614, "calls":[ {"id":0, "remote_uri":"103", "date":1625158716}, {"id":1, "remote_uri":"105", "date":1625158725}, {"id":2, "remote_uri":"109","date":1625158736} ] }
Пример JSON нотификации для APNS:
{"aps": {"badge":"10"}, "acme": {"type":"missed_calls", "date":1623753691, "calls":[ {"id":0, "remote_uri":"103", "date":1625158716}, {"id":1, "remote_uri":"105", "date":1625158725}, {"id":2, "remote_uri":"103","date":1625158736} ]}, "time_to_live":120 }