Расширение службы push-уведомлений iOS не совместимо - PullRequest
0 голосов
/ 27 августа 2018
  • В нашем приложении мы уведомляем пользователей с помощью Push-уведомлений, но если пользователь этого не сделал получил толчок (например, устройство пользователя не в сети), затем мы отправили ему SMS.
  • Поскольку APN не предоставляют отчет о доставке, мы внедрили наш собственный способ отправки отчетов на сервер backend с использованием расширение службы :

    • Когда приложение получает push-уведомление, оно отправляет http-запрос в бэкэнд внутри метода Service Extension -

      didReceive (_ запрос: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)

Можно выполнить выборку или выполнить http-запрос только в течение 30 секунд.

Однако иногда пользователи жалуются на получение SMS и PUSH одновременно.

Когда мы проверяем журналы в БД, с этих устройств нет отчетов о доставке PUSH.

Мои вопросы:

  1. Есть ли вероятность, что Service Extension не запустится?
  2. Какие-нибудь советы по устранению подобных ошибок?

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Идея звонить домой внутри расширения службы ошибочна, потому что если по какой-то причине HTTP-вызов не проходит внутри расширения (например, неправильный прием соты, сбой сервера, ...), у вас нет возможности предотвращение доставки уведомления:

Расширение службы [..] не может отбросить это уведомление или предотвратить его отображение.

Как уже упоминалось в этом докладе WWDC 17: Рекомендации и что нового в уведомлениях пользователей

Лучшим способом было бы отправить тихое уведомление пользователю. Это разбудит ваше приложение в фоновом режиме на устройстве пользователя, позволяя вам сделать HTTP-вызов. Если вызов завершится успешно , вы можете запланировать локальное уведомление. В случае сбоя (или если молчаливое уведомление никогда не доставлялось) пользователь находится в автономном режиме, и вы можете вместо этого отправить SMS.

Имейте в виду: Apple рассматривает тихие уведомления как низкоприоритетные, поэтому, чтобы предотвратить локальное уведомление по тихому уведомлению, которое было доставлено после SMS-сообщения, вы должны реализовать какое-то Вызов API может использоваться вашим приложением для запроса о том, отправлено ли уже SMS сообщение.

0 голосов
/ 07 сентября 2018

В вашем приложении вы могли бы включить Фоновый режим или Удаленные уведомления в целевых возможностях вашего приложения вместе с Расширение службы . Итак, что происходит, когда вы получаете push-уведомление, ваше приложение активно около 30 секунд. В это время вам позвонят в службу доставки и обновят ваш сервер. Поскольку уведомления не содержат мультимедиа, для отображения уведомления требуется некоторое время.

Но как только вы получаете доставку, ваш сервер отправляет пользователю SMS. Так вот почему вы получаете APN и SMS одновременно.

Исправлено: добавление задержки на вашем сервере для отправки SMS примерно на 1 мин. Чтобы избежать конфликта.

...