Resumen de las nuevas actualizaciones de funciones de iOS
Novedades de iOS 14
Las nuevas funciones de iOS 14 incluyen principalmente App Clip, portapapeles, protección de la privacidad y otras, pero no hay nuevas funciones relacionadas con las notificaciones.
Novedades de iOS 13
Las nuevas funciones de iOS 13 incluyen principalmente Modo oscuro (Dark Mode), Swift UI y otras, pero no hay nuevas funciones relacionadas con las notificaciones.
Novedades de iOS 12
Agrupación de notificaciones push
En iOS 12, las notificaciones del mismo tipo se combinan en un grupo de notificaciones. Los usuarios pueden expandir todas las notificaciones del grupo pulsando el grupo de notificaciones

Para la agrupación de notificaciones se utilizan dos métodos: agrupación automática e identificador de hilo (thread identifier). Los desarrolladores no necesitan realizar ninguna acción adicional para la agrupación automática; el sistema agrupará los push según el bundleId de la aplicación. Si se necesita agrupar las notificaciones con mayor granularidad, será necesario utilizar identificadores de hilo.

Los usuarios pueden configurar la agrupación (automática, por aplicación, desactivada)
El atributo threadIdentifier existe desde iOS 10, pero es en iOS 12 cuando se implementa realmente la agrupación.
// The unique identifier for the thread or conversation related to this notification request. It will be used to visually group notifications together.
@property (NS_NONATOMIC_IOSONLY, copy) NSString *threadIdentifier __TVOS_PROHIBITED;
Configuración del formato de resumen
Después de agrupar automáticamente las notificaciones, aparece un resumen de mensajes en la parte inferior. El formato predeterminado es: n notificaciones más. El formato es personalizable.
La primera opción: personalización del formato mediante 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;
La segunda opción es la personalización mediante UNNotificationContent
/// The argument to be inserted in the summary for this notification.
@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *summaryArgument __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
/// A number that indicates how many items in the summary are represented in the summary.
/// For example if a podcast app sends one notification for 3 new episodes in a show,
/// the argument should be the name of the show and the count should be 3.
/// Default is 1 and cannot be 0.
@property (NS_NONATOMIC_IOSONLY, readonly, assign) NSUInteger summaryArgumentCount __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
Gestión de notificaciones
Apple añadió un botón «Gestionar» (Manage) para los mensajes, que aparece al deslizar hacia la izquierda.

Autorización temporal
La principal manifestación de la autorización temporal es que habrá dos botones en el mensaje push, para que el usuario elija activamente.

Notificación de advertencia
Por ejemplo, seguridad familiar, salud, seguridad pública y otros factores. Este mensaje requiere que el usuario realice una acción. El escenario más simple es cuando tenemos una cámara instalada en casa y vamos a trabajar. Si hay alguien en la casa, la cámara nos enviará un mensaje. Este tipo de notificación requiere un certificado especial.

Novedades de iOS 10
Instrucciones
iOS 10 añade varias funciones nuevas relacionadas con las notificaciones. Para más detalles, consultar el blog oficial de EngageLab.
Service Extension de iOS 10
Instrucciones
Service Extension se añadió en iOS 10.
A continuación se muestra la ilustración oficial:
Esto significa que, antes de que APNs llegue a nuestro dispositivo, se procesa mediante una capa de Service Extension, lo que permite que los usuarios configuren sus propios ajustes y añade variedad a APNs.
Método de uso
Service Extension es fácil de usar. En primer lugar, se debe crear un Service Extension, como se muestra en la siguiente figura:

A continuación, hay un par de aspectos a tener en cuenta:
- El Bundle Identifier de Service Extension no puede ser el mismo que el Bundle Identifier del Main Target (su propio App Target). De lo contrario, se informará de un error de BundleID duplicado.
- El Bundle Identifier de Service Extension debe estar dentro del espacio de nombres del Main Target. Por ejemplo, si el BundleID del Main Target es io.mtpush.xxx, el BundleID de Service Extension debería tener un formato similar a io.mtpush.xxx.yyy. De lo contrario, puede producirse un error.
Ahora que el Service Extension se ha creado y se ha utilizado correctamente, en el proyecto se dispone de una clase que contiene dos métodos:
- didReceiveNotificationRequest:(UNNotificationRequest _)request withContentHandler:(void (^)(UNNotificationContent _contentToDeliver))contentHandler
- serviceExtensionTimeWillExpire
Veamos la explicación oficial del primer método:
«Llamar a contentHandler con el contenido de la notificación modificado para su entrega. Si el manejador no se llama antes de que expire el tiempo del servicio, se entregará la notificación sin modificar.»
En resumen, este método se llama cuando llega APNs y permite procesar el contenido enviado; a continuación, se utiliza contentHandler para entregar el contenido procesado. Pero si el procesamiento tarda demasiado, el APNs se mostrará tal cual.
Es decir, se pueden procesar las notificaciones en este método y personalizarlas para el usuario.
El segundo método, por su parte, es un complemento del primero. Realiza una devolución de llamada antes de que expire el tiempo, momento en el que se puede llevar a cabo un procesamiento urgente del mensaje de APNs.
Integración con iOS 9
Los cambios de iOS 9 afectan a las siguientes secciones del SDK:
- Se añadió el formato de codificación bitCode. Cuando el SDK no es compatible con bitCode, los usuarios no pueden habilitar la opción bitCode durante la integración.
- Síntoma: después de integrar el SDK, la compilación falla y el registro de errores contiene información de error de bitCode.
- La conexión predeterminada es https. Si la solicitud es http, se debe configurar manualmente el plist para admitir el servicio http. Actualmente, todas nuestras solicitudes de servidor se dirigen al servicio http.
- Síntoma: después de integrar el SDK, todos los servicios http relacionados con MTPush muestran un error de conexión o tiempo de espera. Esto puede ser la causa.
Solución para bitCode
- MTPush iOS SDK v1.8.7 y posteriores ya admiten bitCode, una nueva función de iOS 9.
Solución para https
Este paso no es necesario para MTPush 2.0.0 o posterior.
- Añadir de forma explícita el tipo Diccionario NSAppTransportSecurity en el Info.plist del proyecto actual.
- Añadir NSAllowsArbitraryLoads de tipo Boolean bajo NSAppTransportSecurity y establecerlo en YES.
iOS 9 UIUserNotificationActionBehaviorTextInput
Versión compatible
La versión v1.8.0 está disponible.
- El cambio más importante en las notificaciones push en iOS 9 es la modificación del tipo Category de push. Sobre la base de las categorías push originales, se añadió un tipo de acción de texto. Este parámetro se utiliza para registrar los elementos introducidos mediante texto de acceso directo en la notificación.
- Esta categoría está compuesta por una serie de UIUserNotificationCategory. Cada objeto UIUserNotificationCategory permite añadir un conjunto de parámetros de tipo UIMutableUserNotificationAction para incrementar los elementos de la barra de notificaciones. En iOS 9, el tipo UIMutableUserNotificationAction original añade el tipo de entrada de texto (UIUserNotificationActionBehaviorTextInput), que se configura mediante behavior (una propiedad disponible solo en iOS 9).
- iOS 9 utiliza dos nuevos métodos de devolución de llamada para gestionar el evento de pulsación de un botón:
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullableNSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0)
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullableNSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0)
Nota:
- Cuando la acción es UIUserNotificationActionBehaviorTextInput, se debe obtener el texto introducido mediante responseInfo UIUserNotificationActionResponseTypedTextKey y obtener el tipo de botón pulsado mediante UIUserNotificationTextInputActionButtonTitleKey.
- Cuando la acción es UIUserNotificationActionBehaviorDefault, responseInfo es nil; se debe distinguir la acción pulsada mediante identifier para realizar el procesamiento.
Configuración del cliente
Configurar notificaciones con respuestas rápidas
# ifdef __IPHONE_9_0
UIMutableUserNotificationAction *replyAction = [[UIMutableUserNotificationAction alloc]init];
replyAction.title = @"Reply";
replyAction.identifier = @"comment-reply";
replyAction.activationMode = UIUserNotificationActivationModeBackground;
replyAction.behavior = UIUserNotificationActionBehaviorTextInput;
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc]init];
category.identifier = @"reply";
[category setActions:@[replyAction] forContext:UIUserNotificationActionContextDefault];
# endif
Usar funciones de devolución de llamada
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0) {if ([identifier isEqualToString:@"comment-reply"]) {NSString *response = responseInfo[UIUserNotificationActionResponseTypedTextKey];
// Process the input text
}
completionHandler();}
Configuración del lado del servidor
Formato de contenido del servidor: en aps se incrementa el campo category; cuando el campo coincide con el identifier de UIMutableUserNotificationCategory del cliente, se desencadena la acción configurada y se muestra el botón.
payload example:
{"aps":{"alert":"example", "sound":"default", "badge": 1, "category":"reply"}}
iOS 8 UILocalNotification
En iOS 8 se añadieron tres parámetros a UILocalNotification: region, regionTriggersOnce y category.
- region: controla que, cuando el usuario entra o sale de una ubicación geográfica, se active la notificación. Para usar esta función, el usuario debe conceder el permiso "when-in-use" para CoreLocation.
- regionTriggersOnce(BOOL): cuando es YES, las notificaciones se activan solo una vez; cuando es NO, las notificaciones se activan en cada entrada o salida.
- category: si localNotification se registra mediante + [UIUserNotificationSettings SettingsForUserNotificationTypes: userNotificationActionSettings:], se puede obtener la categoría de notificación registrada a través de category.
Configuración del cliente
Uso de UILocalNotification
// set localNotification
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:@"Cancelar"
identifierKey:@"1"
userInfo:nil
soundName:nil
region:currentRegion
regionTriggersOnce:YES
category:@"test"];
iOS 7 Notificación remota en segundo plano (Background Remote Notification)
El cambio más importante en las notificaciones push en iOS 7 es la posibilidad de ejecutar código en segundo plano después de que una aplicación reciba una notificación, lo que puede utilizarse para obtener actualizaciones del servidor. Escenarios de aplicación: (multimedia) chat, actualización de correo electrónico y sincronización de contenido de suscripción basada en notificaciones, mejorando la experiencia de usuario.
Configuración del cliente
Habilitar Remote notifications
Se debe modificar la pestaña Capabilities de la aplicación en Xcode para habilitar Remote notifications. Consultar la imagen siguiente:

(El resto del contenido de esta sección se mantiene sin cambios estructurales ni de formato).
