Когда официальное приложение Apple для сообщений iOS открыто и отображается на переднем плане, новые сообщения от других контактов запускают стандартный баннер уведомления iOS. См. Изображение ниже.
Возможно ли это в сторонних приложениях в App Store? Локальные и / или Push-уведомления для вашего приложения, когда оно открыто и находится на переднем плане ?
При тестировании моего приложения уведомления приходят, но пользовательский интерфейс предупреждений iOS не отображается .
Но такое поведение будет увидеть в официальном приложении Сообщения Apple:
В Руководстве по программированию локальных и удаленных уведомлений говорится:
Когда операционная система доставляет локальное уведомление или удаленное уведомление, а целевое приложение не работает на переднем плане , оно может представить уведомление пользователю посредством предупреждения , номера значка или звука.
Если приложение работает на переднем плане, когда уведомление доставляется, делегат приложения получает локальное или удаленное уведомление.
Итак, да, мы можем получать данные уведомления, находясь на переднем плане. Но я не вижу возможности представить собственный пользовательский интерфейс уведомлений iOS .
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// I know we still receive the notification `userInfo` payload in the foreground.
// This question is about displaying the stock iOS notification alert UI.
// Yes, one *could* use a 3rd party toast alert framework.
[self use3rdPartyToastAlertFrameworkFromGithub]
}
Использует ли Сообщения частный API для отображения предупреждения, находясь на переднем плане?
В целях этого вопроса, пожалуйста, не предлагайте никаких сторонних всплывающих уведомлений о всплывающих окнах на github и т. Д. Меня интересует только то, можно ли это сделать с помощью стандартного , встроенного iOS Local или пользовательского интерфейса уведомлений с push-уведомлениями, пока вы приложение открыто и на переднем плане .
UNUserNotificationCenter.current().delegate = self
вapplication(_:willFinishLaunchingWithOptions:)
илиapplication(_:didFinishLaunchingWithOptions:)
методаДля отображения сообщения баннера, когда приложение находится на переднем плане, используйте следующий метод.
iOS 10+, Swift 3+ :
источник
AppDelegate
. Его нужно использовать для любого объекта, которому соответствуетUNUserNotificationCenterDelegate
. При этом большинство разработчиков стараютсяAppDelegate
соответствоватьUNUserNotificationCenterDelegate
. @YoavR.РЕДАКТИРОВАТЬ:
Предупреждения переднего плана теперь возможны в iOS 10! Пожалуйста, посмотрите этот ответ .
Для iOS 9 и ниже:
Кажется, что невозможно показать стандартное уведомление об уведомлении iOS, когда ваше приложение открыто и находится на переднем плане. Messages.app должен использовать частный API.
Эти
UIApplicationDelegate
методы будут все еще можно назвать, что позволяет ваше приложение , чтобы ответить на локальном или удаленном уведомления:Однако штатный пользовательский интерфейс баннера уведомлений iOS не будет отображаться, как в Apple Messages.app, который должен использовать частный API.
Лучшее, что вы можете сделать, - это развернуть собственный баннер с предупреждениями или использовать существующую структуру:
Я открыл радар для этого поведения здесь:
rdar://22313177
источник
toastAlertFromGithub
если вы предлагаете использовать эту стороннюю библиотеку!Чтобы отображать уведомления, пока приложение открыто, нам нужно обрабатывать их вручную. Итак, что я делаю ниже, так это обрабатывать полученное уведомление.
Добавьте все ниже в AppDelegate.m
Сообщите мне, подходит ли это решение. Сработало хорошо для меня, но я не уверен, правильный ли это путь.
источник
Вот код для получения push-уведомлений, когда приложение находится на переднем плане или на открытой стадии, iOS 10 и Swift 2.3.
Если вам нужно получить доступ к userInfo уведомления, используйте код:
notification.request.content.userInfo
Метод
userNotificationCenter(_:willPresent:withCompletionHandler:)
вызывается только в том случае, если вы добавляете атрибут в полезную нагрузкуcontent-available:1
. Окончательная полезная нагрузка должна быть примерно такой:источник
userNotificationCenter(_:willPresent:withCompletionHandler:)
будет вызываться, когда ваше приложение работает на переднем плане. Таким образом, это НЕ имеет значения для « доступное содержимое », которое связано с « фоновой выборкой ».Я могу показывать push-уведомление, когда приложение активно для iOS 10.
Push-уведомление с сервера должно быть безмолвным .
При получении удаленного уведомления от сервера вы отправляете локальное уведомление и устанавливаете значение для keyPath: shouldAlwaysAlertWhileAppIsForeground = True
источник
content.setValue("YES", forKeyPath: "shouldAlwaysAlertWhileAppIsForeground")
? (с «Да» и неправда)Вы можете обработать уведомление самостоятельно и показать индивидуальное оповещение. Такой подход используют такие приложения, как Viber, Whatsapp и BisPhone.
Одним из примеров стороннего настраиваемого оповещения является CRToast .
Попробуйте запланировать локальное уведомление, пока ваше приложение находится на переднем плане, и вы увидите, что стандартное предупреждение iOS не отображается:
источник
Версия Swift 3
Это показывает предупреждение, когда приложение находится на переднем плане.
Реализация ApplicationDelegate
UNUserNotificationCenterDelegate
источник
Это лучший вариант для отображения локального уведомления. нужно меньше кода, чтобы написать "BRYXBanner" https://cocoapods.org/pods/BRYXBanner
источник
BRYXBanner
структура , кажется, не использовать акции уведомления баннер IOS.Если ваша цель развертывания> = iOS10, используйте UNUserNotification, как показано ниже:
источник