У нас есть (в основном) успешная реализация push-уведомлений на устройства iOS и Android через Центры уведомлений Azure.
Проблема в том, что некоторые устройства iOS, по-видимому, никогда не получают уведомления, отправляемые центрами уведомлений Azure.
Мы используем шаблоны и теги, чтобы направлять сообщения на соответствующие устройства. Теги представляют собой темы интересов и никогда не относятся к конкретным пользователям, поэтому мы ожидаем, что одно уведомление о теге будет отправлено на все устройства, подписанные на этот тег.
Кажется, что устройства Android получают свои уведомления безупречно, но устройства iOS не соответствуют друг другу. Большинство из них работают. Пару нет.
Мы хорошо понимаем, что push-уведомления доставляются с максимальной эффективностью и не имеют гарантии надежности, но наше ограниченное тестирование выявило больше устройств, которые постоянно не получают push-уведомления, чем кажется необоснованным (более двух сбоев примерно с десятка устройств).
Вот установка:
У нас есть простая процедура C # в серверной части, которая подключается к центрам уведомлений Azure и отправляет уведомления в Azure:
var outcome = await hub.SendTemplateNotificationAsync(properties, tag);
Мы использовали метод GetAllRegistrationsAsync
, чтобы убедиться, что каждое устройство, которое мы проверяем, успешно зарегистрировано и использует правильный шаблон. Каждое устройство зарегистрировано, все шаблоны правильные.
Мы не находимся в «тестовом режиме»; параметр enableTestSend
NotificationHubClient.CreateClientFromConnectionString
установлен в значение False.
Исправление проблем:
Когда мы отправляем уведомление, большинство устройств получают уведомление и, в конкретном случае, который мы тестируем, обновляют счетчик значков с правильным номером.
Однако на некоторых устройствах это уведомление не отображается. Одно из устройств получило уведомление после того, как мы перезагрузили устройство, но после этого оно остановилось.
Используя вышеупомянутый GetAllRegistrationsAsync
метод, мы проверили, что проблемные устройства правильно зарегистрированы в Azure и имеют правильные теги и шаблоны.
Нам удалось определить токены проблемных устройств из регистраций в Azure. Мы использовали PHP-скрипт, который напрямую связывается с APNS, чтобы отправлять уведомления только проблемным устройствам, используя их токены устройств. Каждый раз устройство получает это уведомление о прямой отправке. Ненадежны только уведомления от Azure.
Когда мы изучаем страницу монитора концентратора уведомлений Azure, мы видим следующие показатели за последние 24 часа:
- 967 APNS Успешные уведомления
- 3 ошибки плохого канала APNS
- 2 ошибки истекшего канала APNS
- 4 ошибки APNS
... и никаких других ошибок для APNS или для Azure в целом не сообщалось. Уровень отказов, который мы наблюдаем, должен был привести к количеству ошибок более 20.
Нам не удалось определить, какие токены устройств были причиной ошибок; есть ли способ получить эту информацию из Azure?
Мы не можем объяснить, почему мы можем отправлять уведомления непосредственно на эти устройства через APNS, но не через Azure, и почему Azure не сообщает о большем количестве ошибок, чем сообщает.
Есть предложения или идеи?