Я использую сервис push-уведомлений в своем приложении. Когда приложение находится в фоновом режиме, я могу видеть уведомление на экране уведомлений (экран отображается, когда мы проводим вниз с верхней части устройства iOS). Но если приложение находится на переднем плане, метод делегата
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
вызывается, но уведомление не отображается на экране уведомлений.
Я хочу показать уведомление на экране уведомлений независимо от того, находится приложение в фоновом режиме или на переднем плане. Я устал от поиска решения. Любая помощь с благодарностью.
iphone
ios
objective-c
push-notification
Ab'initio
источник
источник
Ответы:
Для отображения баннера, когда приложение находится на переднем плане, используйте следующий метод.
iOS 10, Swift 3/4 :
iOS 10, Swift 2.3 :
Вы также должны зарегистрировать своего делегата приложения в качестве делегата для центра уведомлений:
источник
UNUserNotificationsCenter.current().delegate = self
в приложении didFinishLaunchingWithOptionsНиже код будет работать для вас:
источник
title
немного выделен жирным шрифтом, аmessage
текст под ним поменьше. Кнопка «ОК» для отклонения находится внизу). Опция applicationIconBadgeNumber, установленная в 0, предназначена для скрытия числа, которое появляется в верхней части значка приложения в Springboard (например, для обозначения количества непрочитанных сообщений в почтовом приложении). В этом примере я не знаю, нужна ли эта опция.Для всех, кого это может заинтересовать, я создал пользовательское представление, которое выглядит как системный push-баннер сверху, но добавляет кнопку закрытия (маленький синий X) и возможность нажать на сообщение для настраиваемого действия. Он также поддерживает случай, когда поступило более одного уведомления до того, как пользователь успел прочитать / отклонить старые (без ограничения на то, сколько может накапливаться ...)
Ссылка на GitHub: AGPushNote
Использование в основном on-liner:
И это выглядит на iOS7 (iOS6 выглядит и чувствует iOS6 ...)
источник
Цель С
Для этого
iOS 10
нам нужно интегрироватьwillPresentNotification
метод для показа баннера уведомления вforeground
.Если приложение в режиме переднего плана (активно)
источник
Если приложение работает на переднем плане, iOS не будет показывать баннер / предупреждение. Это по замыслу. Но мы можем достичь этого, используя
UILocalNotification
следующиеПроверьте, находится ли приложение в активном состоянии при получении удаленного
уведомления. Если в активном состоянии сработает UILocalNotification.
SWIFT:
источник
If the app is foremost and visible when the system delivers the notification, the app delegate’s application:didReceiveLocalNotification: is called to process the notification. Use the information in the provided UILocalNotification object to decide what action to take. The system does not display any alerts, badge the app’s icon, or play any sounds when the app is already frontmost.
Если приложение работает на переднем плане, iOS не будет показывать баннер / предупреждение. Это по замыслу. Вы должны написать некоторый код, чтобы справиться с ситуацией, когда ваше приложение получает уведомление, пока оно находится на переднем плане. Вы должны показывать уведомление наиболее подходящим способом (например, добавляя номер значка к
UITabBar
значку, имитируя баннер Центра уведомлений и т. Д.).источник
UNUserNotificationCenter
API). Наряду с новым API теперь можно показывать уведомления, если приложение находится на переднем плане. Так что, если вы запутались, потому что разные ответы в этом вопросе, это потому, что некоторые ответы слишком стары и описывают только поведение для iOS 9 и ранее, тогда как другие не учитывают, что ониUNUserNotificationCenter
доступны только из iOS 10.Xcode 10 Swift 4.2
Чтобы показать Push-уведомление, когда ваше приложение находится на переднем плане -
Шаг 1: добавьте делегат UNUserNotificationCenterDelegate в классе AppDelegate.
Шаг 2. Установите делегата UNUserNotificationCenter
Шаг 3. Этот шаг позволит вашему приложению отображать push-уведомления, даже когда ваше приложение находится на переднем плане
Шаг 4: Этот шаг не является обязательным . Проверьте, находится ли ваше приложение на переднем плане, и если оно на переднем плане, то покажите Local PushNotification.
Функция локального оповещения -
источник
Согласно документации Apple , да, вы можете отображать уведомления во время работы приложения
источник
UNUserNotificationCenterDelegate
протоколуviewDidLoad
extension AppDelegate: UNUserNotificationCenterDelegate
Вы можете создать свое собственное уведомление, которое имитирует предупреждение баннера.
Одним из способов является создание пользовательского интерфейса, который выглядит как баннер и может анимировать и реагировать на прикосновения. Имея это в виду, вы можете создавать еще лучшие баннеры с еще большей функциональностью.
Или вы можете найти API, который сделает это за вас, и добавить их в виде подфайлов в ваш проект.
Вот пара, которую я использовал:
https://github.com/terryworona/TWMessageBarManager
https://github.com/toursprung/TSMessages
источник
TWMessageBarManager
может быть легко вызван и использован через appdelegate, поскольку он использует шаблон проектирования Singleton. Спасибо за ссылки.Вот код для получения Push-уведомлений, когда приложение находится в активном состоянии (передний план или открыт). Документация UNUserNotificationCenter
Если вам нужно получить доступ к userInfo уведомления, используйте код:
notification.request.content.userInfo
источник
Добавление строки завершение в метод делегата решило ту же проблему для меня:
источник
Для быстрого 5, чтобы разобрать словарь PushNotification
Чтобы получить top viewController, на котором мы показываем topBanner
источник
guard
Утверждение является вашим другом :-)В вашем приложении делегат использует приведенный ниже код
источник
Для Swift 5
Это оно!
источник
Как уже упоминалось выше, вы должны использовать
UserNotification.framework
для достижения этой цели. Но для моих целей я все равно должен показать это в приложении и хотел иметьiOS 11
стиль, поэтому я создал небольшое вспомогательное представление, может быть, кому-то это пригодится.GitHub iOS 11 Просмотр push-уведомлений .
источник
Лучший подход для этого является добавление
UNUserNotificationCenterDelegate
вAppDelegate
с помощьюextension AppDelegate: UNUserNotificationCenterDelegate
этого добавочного номера рассказывает приложение , чтобы иметь возможность получить уведомление , когда в использованииИ реализовать этот метод
Этот метод будет вызываться для делегата, только если приложение находится на переднем плане .
Итак, окончательная реализация:
И чтобы вызвать это, вы должны установить делегата в AppDelegate в
didFinishLaunchingWithOptions
добавить эту строкуВы можете изменить
с участием
источник
Если ваше приложение находится в состоянии переднего плана, это означает, что вы в настоящее время используете то же приложение. Таким образом, нет необходимости показывать уведомление сверху.
Но, тем не менее, если вы хотите, чтобы в этом случае отображалось уведомление, вам нужно создать свой собственный просмотр предупреждений или пользовательский просмотр, например, Toast или что-то еще, чтобы показать пользователю, что вы получили уведомление.
Вы также можете показать значок сверху, если у вас есть такая функция в вашем приложении.
источник
Как сказал @Danial Martine, iOS не будет показывать баннер / предупреждение. Это по замыслу. Но если действительно нужно сделать это, то есть один способ. Я тоже добился этого тем же.
1. Загрузите работу разбора фрейма из Parse FrameWork
2.Import
#import <Parse/Parse.h>
3. Добавьте следующий код в ваш метод didReceiveRemoteNotification.
PFPush позаботится о том, как обрабатывать удаленные уведомления. Если приложение находится на переднем плане, это показывает предупреждение, в противном случае оно показывает уведомление в верхней части.
источник