Zusammenfassung der neuen iOS-Feature-Updates
Neue Funktionen in iOS 14
Die neuen Funktionen in iOS 14 umfassen vor allem APP Clip, Zwischenablage, Datenschutz und weitere Neuerungen. Es gibt keine neuen Funktionen im Zusammenhang mit Benachrichtigungen.
Neue Funktionen in iOS 13
Die neuen Funktionen von iOS 13 beinhalten insbesondere den Dunkelmodus (Dark Mode), Swift UI und weitere Verbesserungen. Es gibt keine neuen Funktionen im Zusammenhang mit Benachrichtigungen.
Neue Funktionen in iOS 12
Gruppierung von Push-Benachrichtigungen
In iOS 12 werden Push-Benachrichtigungen desselben Typs zu einer Benachrichtigungsgruppe zusammengefasst. Nutzer:innen können alle Benachrichtigungen in der Gruppe durch Antippen der Benachrichtigungsgruppe einsehen.

Für die Gruppierung von Benachrichtigungen gibt es zwei Methoden: Automatische Gruppierung und Thread-Identifier. Bei der automatischen Gruppierung müssen Entwickler:innen nichts weiter tun, das System gruppiert die Push-Benachrichtigungen anhand der BundleId der App. Wer Benachrichtigungen gezielter gruppieren möchte, muss Thread-Identifier verwenden.


Nutzer:innen können Gruppen (automatisch, nach App, aus) einstellen.
Das Attribut Thread-Identifier existiert bereits seit iOS 10, aber erst ab iOS 12 wird damit die Gruppierung tatsächlich umgesetzt.
// Die eindeutige Kennung für den Thread oder die Konversation, die mit dieser Benachrichtigungsanfrage verknüpft ist. Sie wird verwendet, um Benachrichtigungen visuell zu gruppieren.
@property (NS_NONATOMIC_IOSONLY, copy) NSString *threadIdentifier __TVOS_PROHIBITED;
Zusammenfassungsformat einstellen
Nach der automatischen Gruppierung von Benachrichtigungen erscheint unten eine Nachrichten-Zusammenfassung. Das Standardformat lautet: n weitere Benachrichtigungen. Das Format kann individuell angepasst werden.
Erstens: Format-Anpassung über UNNotificationCategory
+ (instancetype)categoryWithIdentifier:(NSString *)identifier
actions:(NSArray<UNNotificationAction *> *)actions
intentIdentifiers:(NSArray<NSString *> *)intentIdentifiers
hiddenPreviewsBodyPlaceholder:(nullable NSString *)hiddenPreviewsBodyPlaceholder
categorySummaryFormat:(nullable NSString *)categorySummaryFormat
options:(UNNotificationCategoryOptions)options __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED;
Zweitens: Anpassung über UNNotificationContent
/// Das Argument, das in die Zusammenfassung für diese Benachrichtigung eingefügt wird.
@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *summaryArgument __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
/// Eine Zahl, die angibt, wie viele Elemente in der Zusammenfassung durch diese Benachrichtigung repräsentiert werden.
/// Beispiel: Wenn eine Podcast-App eine Benachrichtigung für 3 neue Episoden einer Show sendet,
/// sollte das Argument der Name der Show und der Wert 3 sein.
/// Standard ist 1 und darf nicht 0 sein.
@property (NS_NONATOMIC_IOSONLY, readonly, assign) NSUInteger summaryArgumentCount __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
Benachrichtigungsverwaltung
Apple hat einen „Verwalten“-Button für Nachrichten eingeführt, der durch Wischen nach links erscheint.

Temporäre Berechtigung
Die temporäre Autorisierung zeigt sich darin, dass bei Push-Nachrichten zwei Buttons angezeigt werden, mit denen Nutzer:innen aktiv eine Auswahl treffen können.

Warnhinweise
Zum Beispiel bei Familien- oder Gesundheitsschutz, öffentlicher Sicherheit und ähnlichen Faktoren. Diese Nachrichten erfordern, dass Nutzer:innen zwingend reagieren. Ein einfaches Szenario: Wir haben eine Kamera im Haus installiert und sind auf der Arbeit. Wenn jemand das Haus betritt, sendet die Kamera eine Nachricht. Für diese Art von Benachrichtigung ist ein spezielles Zertifikat erforderlich.

Neue Funktionen in iOS 10
Hinweise
iOS 10 bringt zahlreiche neue Funktionen rund um Benachrichtigungen. Weitere Details finden Sie im offiziellen Blog von engagelab.
iOS 10 Service Extension
Hinweise
Mit iOS 10 wurde die Service Extension eingeführt.

Das bedeutet, dass APNs vor der Zustellung auf das Gerät von einer Extension-Schicht verarbeitet werden, die es Nutzer:innen ermöglicht, eigene Einstellungen vorzunehmen und APNs zu individualisieren.
Verwendung
Die Nutzung der Service Extension ist einfach. Zunächst muss eine Service Extension erstellt werden, wie im folgenden Bild dargestellt:

Wichtige Hinweise:
- Die Bundle Identifier der Service Extension darf nicht mit dem Bundle Identifier des Main Targets (der eigenen App) identisch sein. Andernfalls tritt ein Fehler wegen doppelter BundleID auf.
- Der Bundle Identifier der Service Extension muss im Namensraum des Main Targets liegen. Beispiel: Ist die BundleID des Main Targets io.mtpush.xxx, sollte die BundleID der Service Extension das Format io.mtpush.xxx.yyy haben. Andernfalls kann es zu Fehlern kommen.
Nach erfolgreicher Erstellung und Nutzung der Service Extension erscheint in Ihrem Projekt eine Klasse mit zwei Methoden:
- didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *contentToDeliver))contentHandler
- serviceExtensionTimeWillExpire
Die erste Methode wird aufgerufen, wenn APNs ankommt. Hier kann der Inhalt der Push-Benachrichtigung verarbeitet und über contentHandler weitergegeben werden. Wird die Methode nicht rechtzeitig abgeschlossen, wird die Benachrichtigung im Originalzustand angezeigt. Das bedeutet, dass Benachrichtigungen in dieser Methode personalisiert werden können.
Die zweite Methode dient als Fallback und wird kurz vor Ablauf aufgerufen, um letzte Anpassungen vorzunehmen.
Integration in iOS 9
Änderungen in iOS 9 betreffen folgende SDK-Bereiche:
- Hinzufügen des bitCode-Codierungsformats. Wird bitCode vom SDK nicht unterstützt, kann die Option bei der Integration nicht aktiviert werden.
- Symptom: Nach der Integration schlägt die Kompilierung fehl, im Fehlerprotokoll steht ein bitCode-Fehler.
- Standardmäßig ist die Verbindung https. Für http-Anfragen muss die plist manuell angepasst werden. Alle Serveranfragen laufen aktuell über http.
- Symptom: Nach der Integration schlagen alle http-Dienste von MTPush fehl (Verbindungsfehler oder Timeout).
bitCode-Lösung
- Ab MTPush iOS SDK v1.8.7 wird bitCode unterstützt.
Https-Lösung
Für MTPush 2.0.0 oder höher nicht mehr erforderlich.
- In der Info.plist des Projekts muss der Typ NSAppTransportSecurity als Dictionary hinzugefügt werden.
- Unter NSAppTransportSecurity muss NSAllowsArbitraryLoads (Boolean) auf YES gesetzt werden.
iOS 9 UIUserNotificationActionBehaviorTextInput
Unterstützte Version
Ab Version v1.8.0 verfügbar.
- Die größte Änderung im Bereich Push ist die Erweiterung der Kategorie-Typen um eine Text-Action. Damit können Nutzer:innen direkt über die Benachrichtigung Texte eingeben.
- Die Kategorie besteht aus mehreren UIUserNotificationCategory-Objekten. Jedes erlaubt das Hinzufügen von UIMutableUserNotificationAction-Parametern, um weitere Aktionen in der Benachrichtigungsleiste bereitzustellen. Neu in iOS 9 ist der Text-Input-Typ (UIUserNotificationActionBehaviorTextInput), der über das behavior-Attribut gesetzt wird.
- Zwei neue Callback-Methoden verarbeiten Button-Events:
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0)
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0)
Hinweis:
- Bei UIUserNotificationActionBehaviorTextInput kann über responseInfo[UIUserNotificationActionResponseTypedTextKey] der eingegebene Text abgefragt werden, mit UIUserNotificationTextInputActionButtonTitleKey der geklickte Button.
- Bei UIUserNotificationActionBehaviorDefault ist responseInfo nil; die Unterscheidung erfolgt über identifier.
Client-Einstellungen
Benachrichtigungen mit Schnellantwort einrichten
# ifdef __IPHONE_9_0
UIMutableUserNotificationAction *replyAction = [[UIMutableUserNotificationAction alloc]init];
replyAction.title = @"Antworten";
replyAction.identifier = @"comment-reply";
replyAction.activationMode = UIUserNotificationActivationModeBackground;
replyAction.behavior = UIUserNotificationActionBehaviorTextInput;
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc]init];
category.identifier = @"reply";
[category setActions:@[replyAction] forContext:UIUserNotificationActionContextDefault];
# endif
Callback-Funktionen verwenden
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler {
if ([identifier isEqualToString:@"comment-reply"]) {
NSString *response = responseInfo[UIUserNotificationActionResponseTypedTextKey];
// Verarbeite den eingegebenen Text
}
completionHandler();
}
Server-Einstellungen
Im Server-Payload muss das Feld category ergänzt werden. Wenn dieses mit der identifier der Client-Kategorie übereinstimmt, werden die Aktionen und Buttons angezeigt.
{"aps":{"alert":"example", "sound":"default", "badge": 1, "category":"reply"}}
iOS 8 UILocalNotification
Drei neue Parameter wurden zu UILocalNotification in iOS 8 hinzugefügt: region, regionTriggersOnce und category.
- region: Steuert, ob beim Betreten oder Verlassen eines geografischen Bereichs eine Benachrichtigung ausgelöst wird. Dafür ist die „Beim Verwenden“-Berechtigung für CoreLocation erforderlich.
- regionTriggersOnce (BOOL): Ist dieser Wert YES, wird die Benachrichtigung nur einmal ausgelöst, bei NO bei jedem Betreten/Verlassen.
- category: Wenn localNotification über + [UIUserNotificationSettings SettingsForUserNotificationTypes: userNotificationActionSettings:] registriert wurde, kann über category die registrierte Kategorie abgerufen werden.
Client-Einstellungen
Verwendung von UILocalNotification
// Lokale Benachrichtigung setzen
CLLocationCoordinate2D coordinate2D;
coordinate2D.latitude = 100.0;
coordinate2D.longitude = 100.0;
CLRegion *currentRegion =
[[CLCircularRegion alloc] initWithCenter:coordinate2D
radius:CLLocationDistanceMax
identifier:@"test"];
[APService setLocalNotification:[NSDate dateWithTimeIntervalSinceNow:120]
alertBody:@"test ios8 notification"
badge:0
alertAction:@"Abbrechen"
identifierKey:@"1"
userInfo:nil
soundName:nil
region:currentRegion
regionTriggersOnce:YES
category:@"test"];
iOS 8 UIUserNotificationSettings
Unterstützte Version
Ab Version v1.8.0 verfügbar.
- Die größte Änderung bei Push-Benachrichtigungen in iOS 8 ist die Anpassung der Registrierungsoberfläche. Ein category-Parameter wurde hinzugefügt, um eine Gruppe von Button-Events für Benachrichtigungen zu registrieren.
- Die Kategorie besteht aus mehreren UIUserNotificationCategory-Objekten. Jedes enthält die Reaktionen der App auf lokale oder Remote-Benachrichtigungen. Der Titel jeder Kategorie wird als Button-Titel angezeigt. Bei Klick auf einen Button ruft das System die entsprechenden In-App-Callbacks auf: application:handleActionWithIdentifier:forRemoteNotification:completionHandler: oder application:handleActionWithIdentifier:forLocalNotification:completionHandler:.
Client-Einstellungen
Verwendung von UIUserNotificationCategory
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
NSMutableSet *categories = [NSMutableSet set];
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init];
category.identifier = @"identifier";
UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];
action.identifier = @"test2";
action.title = @"Test";
action.activationMode = UIUserNotificationActivationModeBackground;
action.authenticationRequired = YES;
// YES wird rot angezeigt, NO blau
action.destructive = NO;
NSArray *actions = @[action];
[category setActions:actions forContext:UIUserNotificationActionContextMinimal];
[categories addObject:category];
}
Verwendung von UIUserNotificationType
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
[APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:categories];
} else {
[APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
}
Callback-Funktionen verwenden
// Wird aufgerufen, wenn die App durch Auswahl einer Aktion aus einer Remote-Benachrichtigung aktiviert wurde.
// Ein nil-Action-Identifier steht für die Standardaktion.
// Der Completion-Handler sollte so bald wie möglich nach der Verarbeitung aufgerufen werden.
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo
completionHandler:(void (^)())completionHandler {}
Server-Einstellungen
Im Server-Payload muss das Feld category ergänzt werden. Wenn dieses mit der identifier der Client-Kategorie übereinstimmt, werden die Aktionen und Buttons angezeigt.
{"aps":{"alert":"example", "sound":"default", "badge": 1, "category":"identifier"}}
iOS 7 Hintergrund-Push-Benachrichtigung
Die größte Neuerung im Bereich Push in iOS 7 ist die Möglichkeit, nach Empfang einer Benachrichtigung im Hintergrund Code auszuführen, um z. B. Updates vom Server zu erhalten. Anwendungsszenarien: (Multimedia-)Chat, E-Mail-Updates, abonnierte Inhalte synchronisieren – für ein besseres Nutzer:innenerlebnis.
Der Unterschied zu früheren Versionen ist in den beiden offiziellen Apple-Grafiken unten zu sehen.


Wenn nur content-available: 1 gesendet wird, ohne badge, sound oder Nachricht, können Inhalte im Hintergrund aktualisiert werden, ohne die Nutzer:innen zu stören. Diese werden als „Silent Remote Notifications“ bezeichnet.

Client-Einstellungen
Remote-Benachrichtigungen aktivieren
In Xcode müssen unter Capabilities die Remote notifications aktiviert werden.

Benachrichtigungs-Handler anpassen
Nach der Registrierung unter Background Modes -> Remote notifications wird der folgende Handler verwendet, in dem auch der Hintergrund-Code ausgeführt wird.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
Server-Push-Einstellungen
Für Hintergrundausführung muss content-available: 1 im Push enthalten sein. Fehlt dieses Feld, verhält sich die Benachrichtigung wie in früheren iOS-Versionen.
Push über das Web-Portal
Unter Optionale Einstellungen die entsprechenden Parameter auswählen.

Push per API
Im Push-API für iOS muss einfach das Feld "content-available":true ergänzt werden (wird ab iOS 7 unterstützt).
Einschränkungen und Hinweise
- „Silent Remote Notifications“ unterliegen den von Apple festgelegten Frequenzbegrenzungen. Nicht alle erreichen die gewünschte Client-Funktion.
- Das Zeitfenster für Hintergrundausführung ist begrenzt. Für größere Downloads siehe Apples NSURLSession-Dokumentation.
- Hintergrund-Push benötigt, dass die App im Hintergrund oder im Suspended-State ist. Wird die App vom Nutzer über den App Switcher beendet, kann sie nicht mehr für Hintergrund-Code geweckt werden.
Weitere Details finden Sie in der offiziellen iOS-Entwicklerdokumentation von Apple.

