Wenn Apples offizielle iOS-Nachrichten-App geöffnet ist und im Vordergrund steht, lösen neue Nachrichten von anderen Kontakten ein natives iOS-Benachrichtigungsbanner aus. Siehe Bild unten.
Ist dies in Apps von Drittanbietern im App Store möglich? Lokale und / oder Push-Benachrichtigungen für Ihre App, während Ihre App geöffnet ist und im Vordergrund steht ?
Beim Testen meiner App werden Benachrichtigungen empfangen, aber es wird keine Benutzeroberfläche für iOS-Warnungen angezeigt .
Dieses Verhalten ist jedoch in Apples offizieller Nachrichten-App zu sehen:
Das Programmierhandbuch für lokale und Remote-Benachrichtigungen lautet:
Wenn das Betriebssystem eine lokale Benachrichtigung oder eine Remote-Benachrichtigung übermittelt und die Ziel-App nicht im Vordergrund ausgeführt wird , kann es dem Benutzer die Benachrichtigung über eine Warnung , eine Symbolausweisnummer oder einen Sound anzeigen.
Wenn die App bei der Zustellung der Benachrichtigung im Vordergrund ausgeführt wird, erhält der App-Delegat eine lokale oder Remote-Benachrichtigung.
Ja, wir können die Benachrichtigungsdaten im Vordergrund empfangen . Ich sehe jedoch keine Möglichkeit, die native Benutzeroberfläche für iOS-Benachrichtigungen anzuzeigen .
-(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]
}
Verwenden Nachrichten dann eine private API, um die Warnung im Vordergrund anzuzeigen?
Für die Zwecke dieser Frage, bitte geben keinen Hinweis auf 3rd - Party „Toast“ Pop-up - Benachrichtigungen auf GitHub oder etc. Ich bin nur interessiert , wenn dies mit der getan werden kann , Lager, nativen iOS Lokale oder Push Notification Benachrichtigung UI während Anwendung ist offen und im Vordergrund .
UNUserNotificationCenter.current().delegate = self
die Methodeapplication(_:willFinishLaunchingWithOptions:)
oder hinzuzufügenapplication(_:didFinishLaunchingWithOptions:)
Verwenden Sie die folgende Methode, um Bannermeldungen anzuzeigen, während sich die App im Vordergrund befindet.
iOS 10+, Swift 3+ :
quelle
AppDelegate
. Es muss für jedes Objekt platziert werden, das dem entsprichtUNUserNotificationCenterDelegate
. Trotzdem passen sich die meisten EntwicklerAppDelegate
anUNUserNotificationCenterDelegate
. @ YoavR.BEARBEITEN:
Vordergrundwarnungen sind jetzt in iOS 10 möglich! Bitte sehen Sie diese Antwort .
Für iOS 9 und niedriger:
Es scheint nicht möglich zu sein, die Standard-iOS-Benachrichtigung anzuzeigen, wenn Ihre App geöffnet ist und im Vordergrund steht. Messages.app muss eine private API verwenden.
Die
UIApplicationDelegate
Methoden werden weiterhin aufgerufen, sodass Ihre App auf die lokale oder Remote-Benachrichtigung reagieren kann:Die native Benutzeroberfläche des iOS-Benachrichtigungsbanners wird jedoch nicht wie in Apples Messages.app angezeigt , für die eine private API verwendet werden muss.
Das Beste, was Sie tun können, ist, Ihr eigenes Warnbanner zu rollen oder ein vorhandenes Framework zu verwenden:
Ich habe hier ein Radar für dieses Verhalten geöffnet:
rdar://22313177
quelle
toastAlertFromGithub
wenn Sie die Verwendung dieser Drittanbieter-Bibliothek vorschlagen!Um Benachrichtigungen anzuzeigen, während die App geöffnet ist, müssen wir sie manuell bearbeiten. Was ich unten mache, ist, die Benachrichtigung zu bearbeiten, sobald sie empfangen wurde.
Fügen Sie alle unten in AppDelegate.m hinzu
Lassen Sie mich wissen, ob dies eine gute Lösung ist. Hat bei mir gut funktioniert, bin mir aber nicht sicher, ob dies der richtige Weg ist.
quelle
Hier ist der Code zum Empfangen der Push-Benachrichtigung, wenn sich die App im Vordergrund oder in der offenen Phase befindet, iOS 10 & Swift 2.3
Wenn Sie auf userInfo der Benachrichtigung zugreifen müssen, verwenden Sie den folgenden Code:
notification.request.content.userInfo
Die Methode
userNotificationCenter(_:willPresent:withCompletionHandler:)
wird nur aufgerufen, wenn Sie das Attribut zur Nutzlast hinzufügencontent-available:1
. Die endgültige Nutzlast sollte ungefähr so lauten:quelle
userNotificationCenter(_:willPresent:withCompletionHandler:)
wird aufgerufen, wenn Ihre App im Vordergrund läuft. Es spielt also KEINE Rolle bei " content-available ", was mit " background fetch " zusammenhängt.Ich kann eine Push-Benachrichtigung anzeigen, wenn die App für iOS 10 aktiv ist.
Die Push-Benachrichtigung vom Server sollte stumm sein .
Wenn Sie eine Remote-Benachrichtigung vom Server erhalten, senden Sie eine lokale Benachrichtigung und legen den Wert für keyPath fest: shouldAlwaysAlertWhileAppIsForeground = True
quelle
content.setValue("YES", forKeyPath: "shouldAlwaysAlertWhileAppIsForeground")
, richtig? (mit "Ja" und nicht wahr)Sie können die Benachrichtigung selbst bearbeiten und eine benutzerdefinierte Warnung anzeigen. Apps wie Viber, WhatsApp und BisPhone verwenden diesen Ansatz.
Ein Beispiel für eine benutzerdefinierte Warnung eines Drittanbieters ist CRToast .
Versuchen Sie, eine lokale Benachrichtigung zu planen, während sich Ihre App im Vordergrund befindet, und Sie werden feststellen, dass keine Standard-iOS-Warnung angezeigt wird:
quelle
Swift 3 Version
Dies zeigt eine Warnung an, wenn sich die Anwendung im Vordergrund befindet.
ApplicationDelegates Implementierung von
UNUserNotificationCenterDelegate
quelle
Um die lokale Benachrichtigung anzuzeigen, ist dies die beste Option. Benötigen Sie weniger Code, um "BRYXBanner" https://cocoapods.org/pods/BRYXBanner zu schreiben
quelle
BRYXBanner
Framework scheint nicht das Standard- iOS-Benachrichtigungsbanner zu verwenden.Wenn Ihr Bereitstellungsziel> = iOS10 ist, verwenden Sie UNUserNotification wie folgt:
quelle