Как Facebook Messenger очищает push-уведомления от экрана блокировки, если вы читаете их на рабочем столе?
Когда я получаю сообщение на Facebook, я получаю push-уведомление на экране блокировки (iOS). Затем я прочитал это сообщение на рабочем столе. Сразу после этого это push-уведомление исчезает без каких-либо взаимодействий с телефоном. Как я могу реализовать ту же самую вещь для удаления устаревших уведомлений?
Второе использование может быть сшиванием уведомлений вместе. Например, Instagram отправляет вам нажатие, когда кому-то понравилась ваша фотография. После 20 нравится, что ваш экран уведомлений разрушен и нечитабелен. Но использование того же принципала, что и Facebook, кажется возможным удалить предыдущее уведомление того же типа и создать новый с увеличенным счетчиком. Нет "Пользователь понравился фото X, Пользователь B понравился фото Y и т.д.", Но "20 пользователям понравилось фото Z".
Я видел пару шагов по подобным темам здесь, но пока ответа пока нет. Спасибо!
Ответы
Ответ 1
См. Улучшения многозадачности и, в частности, тихие push-уведомления. Используя тихий push, вы можете уведомить свое приложение о том, что новый контент доступен, а также загрузить этот контент и/или установить номер значка, например, без отображения уведомления в "Центре уведомлений". Вам нужно будет установить UIBackgroundModes с удаленным уведомлением, чтобы сделать эту работу.
Вы можете отправить молчание, если пользователь просмотрел контент на другой платформе и очистил номер значка в приложении iOS.
Ответ 2
Один простой способ добиться этого эффекта - отправить обычное push-уведомление на ваше устройство с полезной нагрузкой, которая содержит только количество значков 0.
В примере на Facebook у них явно хватает мощности сервера, чтобы просто обнаружить, когда вы прочитали сообщение на своем рабочем столе и отправили push на свои устройства, чтобы убедиться, что уведомление больше не существует.
Я не говорю, что это так, как это делает FB, но это более простой путь, который может или не подходит вашим потребностям. Имейте в виду, что фоновая задача значительно разряжает вашу пользовательскую батарею и ее следует избегать, когда это возможно.
Ответ 3
Это новая функция в iOS 7, называемая Silent Push Notification, ее многозадачная функция.
Что вам понадобится:
1 - Регистрация удаленных уведомлений в файле didFinishLaunchingWithOptions:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeNewsstandContentAvailability|
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)];
}
2 - Внедрить следующий метод в ApplicationDelegate:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
handler(UIBackgroundFetchResultNewData);
// Possibl Results:
// typedef enum {
// UIBackgroundFetchResultNewData, //Download success with new data
// UIBackgroundFetchResultNoData, //No data to download
// UIBackgroundFetchResultFailed //Downlod Failed
// } UIBackgroundFetchResult;
}
3 - Установить UIBackgroundModes внутри приложения info.plist:
> <key>UIBackgroundModes</key> <array>
> <string>remote-notification</string> </array>
Ответ 4
Предупреждение: я не пробовал это, это просто идея!
В iOS 7 вы можете попробовать отправить молчаливое уведомление "контент-доступ" пользователю. Это разбудит приложение в фоновом режиме и позволит вам запустить некоторый код. На заднем плане вы могли бы сделать
[[UIApplication sharedApplication] setApplicationBadgeNumber:0];
[[UIApplication sharedApplication] setApplicationBadgeNumber:newBadgeNumber];
это должно очистить все уведомления, которые находятся в центре уведомлений. Затем вы можете опубликовать локальное уведомление с данными, которые были получены в вашем словаре userInfo, и это выглядело бы так, как если бы старые были заменены новым!
Опять же, просто идея...