Korzystam z usługi powiadomień wypychanych w mojej aplikacji. Gdy aplikacja jest w tle, widzę powiadomienie na ekranie powiadomień (ekran wyświetlany po przesunięciu w dół od góry urządzenia iOS). Ale jeśli aplikacja jest na pierwszym planie, metoda delegowania
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
jest wywoływany, ale powiadomienie nie jest wyświetlane na ekranie powiadomień.
Chcę wyświetlać powiadomienia na ekranie powiadomień niezależnie od tego, czy aplikacja działa w tle, czy na pierwszym planie. Jestem zmęczony szukaniem rozwiązania. Każda pomoc jest mile widziana.
iphone
ios
objective-c
push-notification
Ab'initio
źródło
źródło
Odpowiedzi:
Aby wyświetlić komunikat banerowy, gdy aplikacja jest na pierwszym planie, użyj następującej metody.
iOS 10, Swift 3/4 :
iOS 10, Swift 2.3 :
Musisz również zarejestrować delegata aplikacji jako delegata centrum powiadomień:
źródło
UNUserNotificationsCenter.current().delegate = self
w aplikacji didFinishLaunchingWithOptionsPoniższy kod będzie dla Ciebie odpowiedni:
źródło
title
jest to nieco większy pogrubiony tekst, a pod nimmessage
mniejszy tekst. Na dole znajduje się przycisk „OK”, który należy odrzucić). Opcją applicationIconBadgeNumber ustawioną na 0 jest ukrycie liczby wyświetlanej nad ikoną aplikacji w Springboard (na przykład oznaczającej liczbę nieprzeczytanych wiadomości w aplikacji poczty). W tym przykładzie nie wiem, czy ta opcja jest nawet potrzebna.Dla każdego, kto może być zainteresowany, stworzyłem niestandardowy widok, który wygląda jak systemowy baner push na górze, ale dodaje przycisk zamykania (mały niebieski X) i opcję stuknięcia wiadomości dla niestandardowej akcji. Obsługuje także przypadek wysłania więcej niż jednego powiadomienia, zanim użytkownik zdąży odczytać / odrzucić stare (bez ograniczenia liczby osób, które mogą się gromadzić ...)
Link do GitHub: AGPushNote
Użycie jest w zasadzie on-line:
I tak to wygląda na iOS7 (iOS6 ma wygląd iOS6 ...)
źródło
Cel C
Ponieważ
iOS 10
potrzebujemy zintegrowaćwillPresentNotification
metodę wyświetlania baneru powiadomieńforeground
.Jeśli aplikacja jest w trybie pierwszego planu (aktywna)
źródło
Jeśli aplikacja działa na pierwszym planie, iOS nie wyświetla baneru powiadomienia / alertu. To z założenia. Ale możemy to osiągnąć, wykorzystując
UILocalNotification
w następujący sposóbSprawdź, czy aplikacja jest w stanie aktywnym po otrzymaniu zdalnego
powiadomienia. Jeśli w stanie aktywnym, uruchom powiadomienie UILocalNotification.
SZYBKI:
źródło
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.
Jeśli aplikacja działa na pierwszym planie, iOS nie wyświetla baneru powiadomienia / alertu. To z założenia. Musisz napisać kod, aby poradzić sobie z sytuacją, w której aplikacja otrzymuje powiadomienie, gdy jest na pierwszym planie. Powinieneś pokazać powiadomienie w najbardziej odpowiedni sposób (na przykład dodając numer identyfikacyjny do
UITabBar
ikony, symulując baner Centrum powiadomień itp.).źródło
UNUserNotificationCenter
API). Wraz z nowym interfejsem API można teraz wyświetlać powiadomienia, jeśli aplikacja jest na pierwszym planie. Więc jeśli jesteś zdezorientowany, ponieważ różne odpowiedzi w tym pytaniu, to dlatego, że niektóre odpowiedzi są zbyt stare i opisują tylko zachowanie dla iOS 9 i wcześniejszych, podczas gdy inne nie biorą pod uwagę, żeUNUserNotificationCenter
są dostępne tylko z iOS 10.Xcode 10 Swift 4.2
Aby wyświetlić powiadomienie push, gdy aplikacja jest na pierwszym planie -
Krok 1: Dodaj delegowanego UNUserNotificationCenterDelegate w klasie AppDelegate.
Krok 2: Ustaw delegata UNUserNotificationCenter
Krok 3: ten krok pozwoli Twojej aplikacji wyświetlać powiadomienie push, nawet jeśli aplikacja jest na pierwszym planie
Krok 4: Ten krok jest opcjonalny . Sprawdź, czy Twoja aplikacja jest na pierwszym planie, a jeśli jest na pierwszym planie, pokaż Lokalną powiadomienie push.
Funkcja lokalnego powiadomienia -
źródło
Zgodnie z dokumentacją firmy Apple Tak, możesz wyświetlać powiadomienia, gdy aplikacja jest uruchomiona
źródło
UNUserNotificationCenterDelegate
protokołemviewDidLoad
extension AppDelegate: UNUserNotificationCenterDelegate
Możesz utworzyć własne powiadomienie, które naśladuje alert banerowy.
Jednym ze sposobów jest utworzenie niestandardowego uiviewu, który wygląda jak baner i może animować i reagować na dotyk. Mając to na uwadze, możesz tworzyć jeszcze lepsze banery o jeszcze większej funkcjonalności.
Możesz też poszukać interfejsu API, który zrobi to za Ciebie, i dodaj je jako pliki podfile do swojego projektu.
Oto kilka, których użyłem:
https://github.com/terryworona/TWMessageBarManager
https://github.com/toursprung/TSMessages
źródło
TWMessageBarManager
może być łatwo wywoływany i używany przez samą appdelegate, ponieważ używa wzorca projektowego singleton. Dzięki za linki.Oto kod do otrzymywania powiadomień push, gdy aplikacja jest w stanie aktywnym (na pierwszym planie lub otwarta). Dokumentacja UNUserNotificationCenter
Aby uzyskać dostęp do informacji o użytkowniku powiadomienia, użyj kodu:
notification.request.content.userInfo
źródło
Dodanie linii uzupełniającej metody obsługi do metody delegowania rozwiązało dla mnie ten sam problem:
źródło
Dla szybkiego 5 parsowania słownika PushNotification
Aby pobrać widok z góryController, na którym pokazujemy topBanner
źródło
guard
Stwierdzenie jest twoim przyjacielem :-)W swojej aplikacji deleguj użyj poniższego kodu
źródło
Jak wspomniano powyżej, należy użyć
UserNotification.framework
do osiągnięcia tego. Ale dla moich celów i tak muszę to pokazać w aplikacji i chciałem miećiOS 11
styl, więc stworzyłem widok małego pomocnika, być może przydałby się komuś.Widok powiadomień push GitHub iOS 11 .
źródło
Najlepszym sposobem na to jest dodanie
UNUserNotificationCenterDelegate
wAppDelegate
za pomocąextension AppDelegate: UNUserNotificationCenterDelegate
tego rozszerzenia informuje aplikację, aby móc otrzymać powiadomienie, gdy w użyciuI zaimplementuj tę metodę
Ta metoda zostanie wywołana na uczestniku tylko, jeśli aplikacja jest na pierwszym planie .
Ostateczne wdrożenie:
Aby zadzwonić, musisz ustawić delegata w AppDelegate w
didFinishLaunchingWithOptions
dodać tę linięMożesz modyfikować
z
źródło
Dla Swift 5
Otóż to!
źródło
Jak powiedział @Danial Martine, iOS nie wyświetla baneru powiadomienia / alertu. To z założenia. Ale jeśli naprawdę trzeba to zrobić, istnieje jeden sposób. Ja również to osiągnąłem.
1. Pobierz pracę parsowania ramki z Parse FrameWork
2. import
#import <Parse/Parse.h>
3. Dodaj następujący kod do metody didReceiveRemoteNotification
PFPush zajmie się obsługą zdalnego powiadomienia. Jeśli aplikacja jest na pierwszym planie, wyświetla alert, w przeciwnym razie wyświetla powiadomienie u góry.
źródło
Jeśli aplikacja znajduje się na pierwszym planie, oznacza to, że obecnie używasz tej samej aplikacji. Nie ma więc potrzeby, aby ogólnie wyświetlać powiadomienie.
Ale nadal, jeśli chcesz pokazać powiadomienie w takim przypadku, musisz utworzyć niestandardowy widok alertu lub widok niestandardowy, np. Toast lub coś innego, aby pokazać użytkownikowi, że masz powiadomienie.
Możesz również wyświetlić znaczek na górze, jeśli masz taką funkcję w swojej aplikacji.
źródło