Перестали получать уведомления от конкретного приложения (или же всех сразу) на iPhone и iPad? В этой инструкции мы рассказали про наиболее действенные способы исправления данной ошибки.
Первое, что нужно сделать при возникновении проблемы с получением уведомлений на iPhone или iPad - повторно войти в учетную запись Apple ID. Для этого необходимо перейти в меню «Настройки » → «iTunes Store и App Store », нажать на Apple ID и в открывшемся окне выбрать «Выйти ». После, на этой же странице требуется нажать «Войти » и указать данные своей учетной записи Apple ID.
Также выйти и вновь зайти стоит в учетную запись iCloud. Для этого перейдите в меню «Настройки » → iCloud и в самом низу страницы нажмите «Выйти ». После повторно авторизуйтесь в iCloud на этой же странице.
Предыдущие два шага могут помочь не сразу, а лишь после выполнения жесткой перезагрузки iPhone или iPad. Зажмите кнопки Домой (кнопку уменьшения громкости на iPhone 7/7 Plus) и Питание и удерживайте их до появления на дисплее логотипа Apple. После включения устройства проблема с получением уведомлений должна исчезнуть.
Отметим, что в некоторых случаях принудительная перезагрузка помогает справиться с возникшей программной ошибкой сама по себе.
Многим пользователям iPhone и iPad с проблемой получения уведомлений помог схожий с предыдущими способ:
Шаг 1. Перейдите в меню «Настройки » → «iTunes Store и App Store » и выйдите из учетной записи Apple ID.
Шаг 2. Выключите и включите свой iPhone или iPad.
Шаг 3. После включения перейдите в меню «Настройки » → «iTunes Store и App Store », нажмите «Войти » и авторизуйтесь под данными своей учетной записи Apple ID.
Если же перечисленные выше шаги не помогли, вероятнее всего, проблема заключается в настройках iOS или конкретных приложений. Во-первых, перейдите в меню «Настройки » → «Не беспокоить » и проверьте, не включен ли «тихий» режим.
А, во-вторых, выберите приложение от которого вы не получаете уведомлений в меню «Настройки » → «Уведомления » и убедитесь в том, что переключатель «Допуск уведомлений » активен.
28 декабря 2015 в 12:25На написание данной статьи меня подтолкнула задача, которая была поставлена передо мной в одном из рабочих проектов: реализовать Push-уведомления в приложении. Казалось, все просто: штудируешь документацию, примеры и вперед. К тому же, опыт работы с уведомлениями уже был. Но не тут то было…
Сервис, в рамках которого реализовано приложение под Android, предъявляет довольно жесткие требования к работе Push-уведомлений. Необходимо в пределах 30-60 секунд оповестить пользователя о некотором действии. При успешном оповещении с устройства пользователя отправляется запрос на сервер с соответствующим статусом. Из документации известно, что сервис GCM (Google Cloud Messaging) не гарантирует доставку PUSH-уведомлений на устройства, поэтому в качестве backdoor варианта, при нарушении этих временных рамок, наш сервис уведомляет пользователя с помощью SMS сообщения. Поскольку стоимость SMS сообщения существенно выше чем PUSH-уведомления, необходимо максимально сократить поток SMS сообщений на клиентские устройства.
Проштудировав документацию и прикрутив пуш-уведомления, мы разослали нескольким клиентам первую сборку приложения для теста и стали ждать. Результаты были примерно следующими:
На данном этапе очень сильно помогла , написанная ребятами из Mail.ru. В ней очень подробно описаны тонкости реализации GCM на клиентской стороне, а так же моменты, в связи с которыми отказываются работать Push уведомления в мобильных сетях. В конечном счете было принято решение о том, чтобы держать свое соединение с сервером в связке с GCM.
Перед тем, как приступить к решению, стоить выделить несколько очень важных моментов, которые позволяют сузить круг потенциально «нерабочих» устройств:
Бывалый разработчик под Android сходу скажет, что решений задачи как минимум 2: использовать Service или AlarmManager. Мы попробовали оба варианта. Рассмотрим первый из них.
Для того, чтобы создать неубиваемый системой сервис, который постоянно будет висеть в фоне и выполнять нашу задачу, мы использовали метод:
StartForeground(int notificationID, Notification notification);
где
Реализовав данный подход, мы отправили сборку на тест. По результатам выяснилось, что система все-таки выгружает сервис, а по логам мы видели, как происходили существенные временные разрывы при запросе данных в фоне с нашего сервера. Поэтому приступили к реализации второго варианта - AlarmManager.
AlarmManager - это класс, который предоставляет работу с, грубо говоря, «будильником». Он позволяет указать время, по достижении которого система отправит широковещательное уведомление, которое позволит пробудить наше приложение и даст ему возможность выполнить необходимые действия. В работе этого метода есть некоторые ограничения, и их необходимо обработать:
SetRepeating()
который позволяет установить повторяющийся с некоторым интервалом «будильник». Прикрутив данный способ, стали тестировать, и тесты показали обратное - «будильник» не повторялся. Стали разбираться в чем дело, посмотрели документацию. И именно там нашли ответ на вопрос - начиная с 19 API lvl (Kitkat) абсолютно все «будильники» в системе стали разовыми. Вывод - всегда читайте документацию.
Эти грабли не были поводом для расстройства, ведь решение задачи довольно простое - запускать единоразовый «будильник» и после срабатывания переустанавливать его. При реализации этого подхода мы наткнулись на следующие грабли - оказалось, что для разных уровней API необходимо по разному устанавливать будильники, при этом в документации ничего сказано не было. Но данная проблема решилась достаточно просто - методом «тыка» и «гугления». Ниже представлен пример кода, позволяющий правильно устанавливать «будильники»:
Private static void setUpAlarm(final Context context, final Intent intent, final int timeInterval)
{
final AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
final PendingIntent pi = PendingIntent.getBroadcast(context, timeInterval, intent, 0);
am.cancel(pi);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
final AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(System.currentTimeMillis() + timeInterval, pi);
am.setAlarmClock(alarmClockInfo, pi);
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi);
else
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi);
}
Хочу обратить внимание на флаг AlarmManager.RTC_WAKEUP
- именно с помощью него система позволит нашему приложению «проснуться» при неактивном экране, когда устройство находится в заблокированном состоянии.
Данный подход с «будильникам» дал нам нужный результат - приложение в фоне корректно опрашивает сервер на наличие новых данных. Сейчас мы дорабатываем алгоритм. На данный момент реализуем и тестируем следующую оптимизацию, которая позволит сузить круг устройств и тем самым уменьшить нагрузку на сервер:
P.S.
В процессе тестирования очень помог
Любители социальной сети Вконтакте часто сталкиваются с проблемой отсутствия push-уведомления. Не всплывают окна с быстрыми диалогами, что вносит некоторое неудобство. Проблемы могут быть различными, постараемся рассказать о них и разобраться с методами решения.
На самом деле, разобраться с каждой проблемой не сложно. Среди них можно выделить следующие:
В этом разделе попытаемся решить проблемы с пунктом №1 и 4. Что касается первого, то здесь все достаточно просто. Обновления и перегрузки системы – это временное явление, вам потребуется терпение и ожидание. Сколько продлятся такие неудобства? Все зависит от конкретной ситуации:
Про приложения для работы в веб-среде отдельная история. Некоторые программы не поддерживают java-скрипты или просто заблокированы в глобальных настройках. Используйте другое программное обеспечение, сбросьте все до первоначальных значений или переустановите софта самой свежей версии. С этим разобрались, теперь переходим к параметрам для Вконтакте.
Часто проблема появляется из-за неправильных или сбитых параметров. Решить вопрос удается через ряд следующие действия:
Проблема решена, в некоторых случаях потребуется выйти и войти в систему, почистить кэш. Надеемся советы помогли, и вы устранили неудобства. Также нужно обратить внимание, что VK использует уведомления на почту и через SMS, об этом поговорим в будущих статьях.
26.05.2016У каждой компании, занимающейся и приложений, есть свои списки любимых клиентов и проектов. Мы любим своих заказчиков, особенно тех, кто, помимо готового продукта в конце, хочет самостоятельно разобраться в технологиях и подняться до уровня специалиста. В ход идут любые методы, но особой популярностью пользуются «пытки вопросами» (любой тестировщик отдыхает).
Технический портрет разрабатываемого приложения
Мы занимались созданием мобильного приложения для магазина одежды, чья архитектура была построена на базовой Activity (для отображения информации используются фрагменты). Для загрузки данных с сервера использовалась библиотека Retrofit, а для их хранения — встроенная зависимая база SQLite. Для выполнения запросов на сервер и для выборки с базы были выбраны Loader"ы.
Чтобы приложение было интерактивным и позволяло обмениваться сообщениями, мы подключили push-уведомления. В данном случае используются ВК и Facebook SDK для реализации авторизации/регистрации через социальные сети и выглядит это так: когда пользователь отправляет сообщение, он отправляет запрос с этим сообщением на наш сервер. Он формирует запрос с сообщением и данными о пользователе, которому адресовалось сообщение, и отправляет всю информацию на сервер Google. Тот формирует с этого запроса push-уведомление и отправляет на устройство пользователя. Наше приложение принимает этот пуш, парсит (обрабатывает) его и отображает в чате — коммуникация реализована.
Возникла проблема: когда приложение начинает работать в фоне или почему push-уведомления приходят только после запуска?
С этим вопросом обратился к нам клиент, поскольку опытным путем он столкнулся со следующей дилеммой: при запуске со второго устройства приложение работает хорошо, но как тогда работает «автозагрузка»?
Рассказываем. Приложение начинает работать в фоне сразу после установки, а подписка на push-уведомления осуществляется после пройденной регистрации в приложении.
Если пользователь не зарегистрируется в нем, то у него не будут работать пуш-уведомления.
Существуют и другие варианты объяснения, на которые следует обратить внимание:
Резюме