Ich verwende den Push-Benachrichtigungsdienst in meiner App. Wenn sich die App im Hintergrund befindet, kann ich eine Benachrichtigung auf dem Benachrichtigungsbildschirm sehen (Bildschirm wird angezeigt, wenn wir vom oberen Rand des iOS-Geräts nach unten wischen). Wenn jedoch die Anwendung im Vordergrund steht, wird die Delegatmethode verwendet
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
wird angerufen, aber die Benachrichtigung wird nicht im Benachrichtigungsbildschirm angezeigt.
Ich möchte eine Benachrichtigung auf dem Benachrichtigungsbildschirm anzeigen, unabhängig davon, ob sich die App im Hintergrund oder im Vordergrund befindet. Ich bin müde von der Suche nach einer Lösung. Jede Hilfe wird sehr geschätzt.
iphone
ios
objective-c
push-notification
Ab'initio
quelle
quelle
Antworten:
Verwenden Sie die folgende Methode, um Bannermeldungen anzuzeigen, während sich die App im Vordergrund befindet.
iOS 10, Swift 3/4 :
iOS 10, Swift 2.3 :
Sie müssen Ihren App-Delegierten auch als Delegierten für das Benachrichtigungscenter registrieren:
quelle
UNUserNotificationsCenter.current().delegate = self
festzulegen : in der Anwendung didFinishLaunchingWithOptionsDer folgende Code wird für Sie arbeiten:
quelle
title
Warnfeld mit dem Benachrichtigungstext angezeigt (der Text ist etwas größer und dermessage
Text darunter kleiner. Eine Schaltfläche zum Schließen befindet sich unten). Mit der Option applicationIconBadgeNumber, die auf 0 gesetzt wird, wird die Nummer ausgeblendet, die in Springboard über dem App-Symbol angezeigt wird (z. B. die Anzahl der ungelesenen Nachrichten in einer E-Mail-App). In diesem Beispiel weiß ich nicht, ob diese Option überhaupt benötigt wird.Für alle Interessierten habe ich am Ende eine benutzerdefinierte Ansicht erstellt, die wie das System-Push-Banner oben aussieht, aber eine Schaltfläche zum Schließen (kleines blaues X) und eine Option zum Tippen auf die Nachricht für benutzerdefinierte Aktionen hinzufügt. Es wird auch der Fall unterstützt, dass mehr als eine Benachrichtigung eingegangen ist, bevor der Benutzer Zeit hatte, die alten zu lesen / zu verwerfen (ohne Begrenzung, wie viele sich stapeln können ...).
Link zu GitHub: AGPushNote
Die Verwendung erfolgt grundsätzlich online:
Und so sieht es auf iOS7 aus (iOS6 hat ein iOS6-Look & Feel ...)
quelle
Ziel c
Dafür müssen
iOS 10
wir diewillPresentNotification
Methode zum Anzeigen des Benachrichtigungsbanners integrierenforeground
.Wenn App im Vordergrundmodus (aktiv)
quelle
Wenn die Anwendung im Vordergrund ausgeführt wird, zeigt iOS kein Benachrichtigungsbanner / Alarm an. Das ist beabsichtigt. Aber wir können es erreichen, indem wir
UILocalNotification
Folgendes verwendenÜberprüfen Sie beim Empfang einer Remote-
Benachrichtigung, ob die Anwendung aktiv ist . Im aktiven Zustand wird eine UILocalNotification ausgelöst.
SCHNELL:
quelle
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.
Wenn die Anwendung im Vordergrund ausgeführt wird, zeigt iOS kein Benachrichtigungsbanner / Alarm an. Das ist beabsichtigt. Sie müssen Code schreiben, um die Situation zu bewältigen, in der Ihre App eine Benachrichtigung erhält, während sie sich im Vordergrund befindet. Sie sollten die Benachrichtigung auf die am besten geeignete Weise anzeigen (z. B. Hinzufügen einer Ausweisnummer zu einem
UITabBar
Symbol, Simulieren eines Benachrichtigungscenter-Banners usw.).quelle
UNUserNotificationCenter
API). Zusammen mit der neuen API ist es jetzt möglich, die Benachrichtigungen anzuzeigen, wenn sich die Anwendung im Vordergrund befindet. Wenn Sie also verwirrt sind, weil die Antworten in dieser Frage unterschiedlich sind, liegt dies daran, dass einige der Antworten zu alt sind und nur das Verhalten für iOS 9 und früher beschreiben, während die anderen nicht berücksichtigen, dass dieUNUserNotificationCenter
nur von verfügbar sind iOS 10.Xcode 10 Swift 4.2
Push-Benachrichtigung anzeigen, wenn Ihre App im Vordergrund steht -
Schritt 1: Fügen Sie den Delegaten UNUserNotificationCenterDelegate in die AppDelegate-Klasse ein.
Schritt 2: Legen Sie den UNUserNotificationCenter-Delegaten fest
Schritt 3: In diesem Schritt kann Ihre App die Push-Benachrichtigung anzeigen, auch wenn sich Ihre App im Vordergrund befindet
Schritt 4: Dieser Schritt ist optional . Überprüfen Sie, ob sich Ihre App im Vordergrund befindet und ob sie sich im Vordergrund befindet, und zeigen Sie dann die lokale PushNotification an.
Lokale Benachrichtigungsfunktion -
quelle
Ja, laut Apple- Dokumentation können Sie Benachrichtigungen anzeigen, während die App ausgeführt wird
quelle
UNUserNotificationCenterDelegate
Protokoll entsprichtviewDidLoad
extension AppDelegate: UNUserNotificationCenterDelegate
Sie können Ihre eigene Benachrichtigung erstellen, die die Bannerwarnung nachahmt.
Eine Möglichkeit besteht darin, eine benutzerdefinierte Benutzeroberfläche zu erstellen, die wie das Banner aussieht und Animationen animieren und darauf reagieren kann. In diesem Sinne können Sie noch bessere Banner mit noch mehr Funktionen erstellen.
Oder Sie können nach einer API suchen, die dies für Sie erledigt, und sie als Podfiles zu Ihrem Projekt hinzufügen.
Hier sind ein paar, die ich benutzt habe:
https://github.com/terryworona/TWMessageBarManager
https://github.com/toursprung/TSMessages
quelle
TWMessageBarManager
kann einfach über appdelegate selbst aufgerufen und verwendet werden, da es ein Singleton-Entwurfsmuster verwendet. Danke für die Links.Hier ist der Code zum Empfangen der Push-Benachrichtigung, wenn sich die App im aktiven Zustand befindet (Vordergrund oder geöffnet). UNUserNotificationCenter-Dokumentation
Wenn Sie auf userInfo der Benachrichtigung zugreifen müssen, verwenden Sie den folgenden Code:
notification.request.content.userInfo
quelle
Das Hinzufügen dieser Vervollständigungshandler-Zeile zur Delegierungsmethode löste das gleiche Problem für mich:
quelle
Damit Swift 5 das PushNotification-Wörterbuch analysiert
Zum Abrufen von top viewController, auf dem topBanner angezeigt wird
quelle
guard
Aussage ist dein Freund :-)Verwenden Sie in Ihrem App-Delegaten den folgenden Code
quelle
Wie oben erwähnt, sollten Sie verwenden
UserNotification.framework
, um dies zu erreichen. Aber für meine Zwecke muss ich es trotzdem in der App zeigen und wollte habeniOS 11
Stil haben, also habe ich eine kleine Hilfsansicht erstellt, die vielleicht für jemanden nützlich wäre.GitHub iOS 11 Push-Benachrichtigungsansicht .
quelle
Bester Ansatz hierfür ist hinzuzufügen ,
UNUserNotificationCenterDelegate
inAppDelegate
durch den Einsatzextension AppDelegate: UNUserNotificationCenterDelegate
dieser Erweiterung teilt die App der Lage sein , Benachrichtigung zu erhalten , wenn in GebrauchUnd implementieren Sie diese Methode
Diese Methode wird vom Delegaten nur aufgerufen, wenn sich die Anwendung im Vordergrund befindet .
Also die endgültige Implementierung:
Und um dies aufzurufen, müssen Sie den Delegaten in AppDelegate festlegen und
didFinishLaunchingWithOptions
diese Zeile hinzufügenSie können ändern
mit
quelle
Für Swift 5
Das ist es!
quelle
Wie @Danial Martine sagte, zeigt iOS kein Benachrichtigungsbanner / Alarm an. Das ist beabsichtigt. Aber wenn es wirklich nötig ist, gibt es einen Weg. Das habe ich auch dadurch erreicht.
1. Laden Sie die Parse-Frame-Arbeit von Parse FrameWork herunter
2. Importieren
#import <Parse/Parse.h>
3. Fügen Sie Ihrer didReceiveRemoteNotification-Methode den folgenden Code hinzu
PFPush kümmert sich um die Behandlung der Remote-Benachrichtigung. Wenn sich die App im Vordergrund befindet, wird die Warnung angezeigt, andernfalls wird die Benachrichtigung oben angezeigt.
quelle
Wenn sich Ihre Anwendung im Vordergrund befindet, bedeutet dies, dass Sie derzeit dieselbe App verwenden. Es ist also nicht erforderlich, die Benachrichtigung im Allgemeinen oben anzuzeigen.
Wenn Sie in diesem Fall jedoch eine Benachrichtigung anzeigen möchten, müssen Sie eine benutzerdefinierte Benachrichtigungsansicht oder eine benutzerdefinierte Ansicht wie Toast oder etwas anderes erstellen, um dem Benutzer anzuzeigen, dass Sie eine Benachrichtigung erhalten haben.
Sie können auch oben ein Abzeichen anzeigen, wenn Ihre App über eine solche Funktion verfügt.
quelle