Gdy oficjalna aplikacja Apple iOS Messages jest otwarta i na pierwszym planie, nowe wiadomości od innych kontaktów uruchamiają standardowy, natywny baner ostrzegawczy iOS. Zobacz obrazek poniżej.
Czy jest to możliwe w aplikacjach innych firm w App Store? Lokalne i / lub powiadomienia push dla Twojej aplikacji, gdy aplikacja jest otwarta i na pierwszym planie ?
Podczas testowania mojej aplikacji otrzymywane są powiadomienia, ale nie jest wyświetlany interfejs użytkownika alertów iOS .
Ale to zachowanie jest widoczne w oficjalnej aplikacji Wiadomości Apple:
Lokalne i zdalne programowanie Powiadomienie przewodnik mówi:
Gdy system operacyjny dostarcza lokalne lub zdalne powiadomienie, a aplikacja docelowa nie działa na pierwszym planie , może przedstawić powiadomienie użytkownikowi za pośrednictwem alertu , numeru znaczka ikony lub dźwięku.
Jeśli aplikacja działa na pierwszym planie po dostarczeniu powiadomienia, delegat aplikacji otrzymuje powiadomienie lokalne lub zdalne.
Więc tak, możemy otrzymywać dane powiadomienia będąc na pierwszym planie. Ale nie widzę sposobu na zaprezentowanie natywnego interfejsu powiadomień systemu 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]
}
Czy Messages używa więc prywatnego interfejsu API do wyświetlania alertu na pierwszym planie?
W związku z tym pytaniem nie sugeruj żadnych wyskakujących alertów „toast” innych firm na githubie itp. Interesuje mnie tylko to, czy można to zrobić za pomocą podstawowego, natywnego interfejsu iOS Local lub Push Notification UI, gdy aplikacja jest otwarta i na pierwszym planie .
UNUserNotificationCenter.current().delegate = self
wapplication(_:willFinishLaunchingWithOptions:)
lubapplication(_:didFinishLaunchingWithOptions:)
metodyAby wyświetlić komunikat transparentu, gdy aplikacja jest na pierwszym planie, użyj następującej metody.
iOS 10+, Swift 3+ :
źródło
AppDelegate
. Musi być nałożony na dowolny obiekt, z którym się zgadzaUNUserNotificationCenterDelegate
. Mając to na uwadze, większość programistówAppDelegate
dostosowuje się doUNUserNotificationCenterDelegate
. @YoavR.EDYTOWAĆ:
Alerty na pierwszym planie są teraz możliwe w iOS 10! Zobacz tę odpowiedź .
IOS 9 i starsze:
Wydaje się, że nie jest możliwe wyświetlenie alertu powiadomienia systemu iOS, gdy aplikacja jest otwarta i znajduje się na pierwszym planie. Messages.app musi używać prywatnego interfejsu API.
Te
UIApplicationDelegate
metody będą nadal nazywać, pozwalając swoją aplikację w odpowiedzi na lokalne lub zdalne powiadamianie:Jednak standardowy interfejs użytkownika banera powiadomień systemu iOS nie będzie wyświetlany tak, jak w aplikacji Apple Messages.app, która musi korzystać z prywatnego interfejsu API.
Najlepsze, co możesz zrobić, to rzucić własny baner ostrzegawczy lub użyć istniejącej struktury:
Otworzyłem tutaj radar dla tego zachowania:
rdar://22313177
źródło
toastAlertFromGithub
jeśli sugerujesz użycie tej biblioteki innej firmy!Aby wyświetlać powiadomienia, gdy aplikacja jest otwarta, musimy obsługiwać ją ręcznie. Więc to, co robię poniżej, to obsłużyć otrzymane powiadomienie.
Dodaj wszystko poniżej w AppDelegate.m
Daj mi znać, jeśli to dobre rozwiązanie. U mnie zadziałało, ale nie jestem pewien, czy to właściwy sposób.
źródło
Oto kod do otrzymywania powiadomień push, gdy aplikacja jest na pierwszym planie lub na otwartym etapie, iOS 10 i Swift 2.3
Jeśli chcesz uzyskać dostęp do informacji o użytkowniku powiadomienia, użyj kodu:
notification.request.content.userInfo
Metoda
userNotificationCenter(_:willPresent:withCompletionHandler:)
jest wywoływana tylko wtedy, gdy dodasz atrybut do ładunkucontent-available:1
. Ostateczny ładunek powinien wyglądać następująco:źródło
userNotificationCenter(_:willPresent:withCompletionHandler:)
zostanie wywołana, gdy aplikacja będzie działać na pierwszym planie. Więc to NIE ma znaczenia przy „ dostępności treści ”, które jest związane z „ pobieraniem w tle ”.Mogę wyświetlać powiadomienia push, gdy aplikacja jest aktywna na iOS 10.
Powiadomienie push z serwera powinno być ciche .
Otrzymując zdalne powiadomienie z serwera, wysyłasz powiadomienie lokalne i ustawiasz wartość dla keyPath: shouldAlwaysAlertWhileAppIsForeground = True
źródło
content.setValue("YES", forKeyPath: "shouldAlwaysAlertWhileAppIsForeground")
prawda? (z „Tak” i nieprawdą)Możesz samodzielnie obsłużyć powiadomienie i wyświetlić niestandardowy alert. Aplikacje takie jak Viber, Whatsapp i BisPhone wykorzystują to podejście.
Przykładem alertu niestandardowego innej firmy jest CRToast .
Spróbuj zaplanować powiadomienie lokalne, gdy aplikacja jest na pierwszym planie, a zobaczysz, że nie jest wyświetlany żaden alert na iOS:
źródło
Wersja Swift 3
To pokazuje alert, gdy aplikacja jest na pierwszym planie.
Implementacja ApplicationDelegate
UNUserNotificationCenterDelegate
źródło
Aby wyświetlić powiadomienie lokalne, jest to najlepsza opcja. potrzeba mniej kodu, aby wczytać „BRYXBanner” https://cocoapods.org/pods/BRYXBanner
źródło
BRYXBanner
struktura nie wydaje się użyć Stock powiadamiania baner iOS.Jeśli cel wdrożenia> = iOS10, użyj UNUserNotification, jak poniżej-
źródło