0Pricing
Swift Academy · Lección

Gestión de cargas de notificaciones

Responda a las notificaciones en primer plano y en segundo plano.

Gestión de cargas de notificaciones es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Estructura de la carga útil

Una notificación remota es un diccionario JSON que su servidor envía a APNs. La clave reservada aps contiene el contenido visible para el usuario —alerta, sonido e insignia—, mientras que las claves hermanas contienen sus datos personalizados, como el identificador de un elemento que se debe abrir.

// Example payload JSON:
// {
//   "aps": { "alert": { "title": "Hi", "body": "..." },
//            "sound": "default", "badge": 1 },
//   "itemId": "42"
// }

Diccionario aps

Dentro de aps, alert puede ser una cadena o un objeto con título, cuerpo y subtítulo. Aquí también se encuentran sound, badge y opciones como content-available y mutable-content. Todo lo que está fuera de aps lo define usted.

// aps keys:
//   alert: { title, subtitle, body }
//   sound: "default" or critical sound object
//   badge: Int
//   content-available: 1  (silent / background)
//   mutable-content: 1    (allow modification)

Entrega en primer plano

De forma predeterminada, una notificación que llega mientras la aplicación está en primer plano se suprime. Para mostrarla de todos modos, implemente willPresent del delegado y devuelva las opciones de presentación que desee, como un banner y sonido.

import UserNotifications
func userNotificationCenter(
    _ center: UNUserNotificationCenter,
    willPresent notification: UNNotification
) async -> UNNotificationPresentationOptions {
    return [.banner, .sound, .badge]
}

Cómo responder a una pulsación

Cuando el usuario pulsa una notificación (tanto si la aplicación estaba en segundo plano como si estaba terminada), se ejecuta didReceive response del delegado. Aquí es donde se lee la carga útil y se navega a la pantalla correspondiente.

import UserNotifications
func userNotificationCenter(
    _ center: UNUserNotificationCenter,
    didReceive response: UNNotificationResponse
) async {
    let info = response.notification.request
        .content.userInfo
    if let id = info["itemId"] as? String {
        print("open item", id)
    }
}

Lectura de userInfo

La carga útil completa, incluidas sus claves personalizadas, se expone como content.userInfo: un diccionario [AnyHashable: Any]. Convierta cada valor con cuidado; nunca fuerce el desempaquetado, porque una carga útil incorrecta no debe hacer que la aplicación se bloquee.

import UserNotifications
func route(_ userInfo: [AnyHashable: Any]) {
    guard let screen = userInfo["screen"] as? String
    else { return }
    switch screen {
    case "profile": print("go to profile")
    case "cart":    print("go to cart")
    default:        break
    }
}

Notificaciones silenciosas (en segundo plano)

Establecer content-available: 1 y omitir una alerta crea una notificación push silenciosa que activa la aplicación en segundo plano para obtener datos, sin mostrar ninguna interfaz. El sistema limita estas notificaciones y requieren el modo en segundo plano Remote notifications.

// Silent payload — no alert, just a wake-up:
// { "aps": { "content-available": 1 }, "sync": true }
let silent = "content-available wakes app quietly"
_ = silent

Controlador de obtención en segundo plano

Una notificación silenciosa llega al método asíncrono didReceiveRemoteNotification del delegado de la aplicación. Realice la obtención de datos y devuelva un UIBackgroundFetchResult para que el sistema sepa si llegaron datos nuevos y pueda administrar futuras activaciones.

import UIKit
func application(
    _ app: UIApplication,
    didReceiveRemoteNotification userInfo: [AnyHashable: Any]
) async -> UIBackgroundFetchResult {
    // fetch fresh data here
    return .newData
}

Contenido mutable y extensiones de servicio

Con mutable-content: 1, una Notification Service Extension puede interceptar la notificación push antes de que se muestre, por ejemplo, para descifrar el cuerpo, descargar un archivo adjunto de imagen o reescribir el título. La extensión dispone de poco tiempo para terminar.

// Service extension entry point (UNNotificationServiceExtension):
// override didReceive(_:withContentHandler:)
//   modify bestAttemptContent, then call contentHandler
let mutable = "mutable-content enables interception"
_ = mutable

Localización de la alerta

Para localizar el texto desde el servidor, envíe title-loc-key y loc-key, que hagan referencia a claves de las cadenas Localizable de la aplicación, además de loc-args para las sustituciones. El dispositivo las muestra en el idioma del usuario sin que tenga que enviar el texto ya traducido.

// Localized alert payload:
// "alert": {
//   "loc-key": "NEW_MESSAGE",
//   "loc-args": ["Ada"]
// }
let localized = "loc-key resolves on device"
_ = localized

Actualización de la insignia

El valor de badge establece el número del icono de la aplicación. Enviar badge: 0 lo borra. También puede establecerlo en el código mediante setBadgeCount después de que el usuario lea el contenido, para mantener la insignia sincronizada con el estado de lectura.

import UserNotifications
func clearBadge() async {
    try? await UNUserNotificationCenter.current()
        .setBadgeCount(0)
}

Un controlador robusto

Combine todos los elementos: muestre las notificaciones en primer plano, dirija al usuario al pulsarlas y valide cada conversión. El controlador nunca se bloquea ante cargas útiles inesperadas y siempre extrae toda la información posible.

import UserNotifications
func handleTap(_ response: UNNotificationResponse) {
    let info = response.notification.request
        .content.userInfo
    guard let id = info["itemId"] as? String else {
        print("no item id; open home")
        return
    }
    print("navigate to item", id)
}

Comprobación rápida

Recuerde cómo reaccionar a la pulsación de una notificación.

Resumen

Ha aprendido a gestionar cargas útiles:

  • El diccionario aps contiene el contenido visible para el usuario; las claves hermanas contienen sus datos, que se leen mediante userInfo.
  • Implemente willPresent para mostrar notificaciones en primer plano y didReceive response para gestionar las pulsaciones.
  • content-available: 1 activa obtenciones silenciosas en segundo plano que devuelven un UIBackgroundFetchResult.
  • mutable-content habilita una extensión de servicio; loc-key localiza el texto en el dispositivo.

Preguntas frecuentes

¿La lección «Gestión de cargas de notificaciones» es gratis?

Sí — el texto completo de «Gestión de cargas de notificaciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Gestión de cargas de notificaciones»?

Responda a las notificaciones en primer plano y en segundo plano. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Gestión de cargas de notificaciones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Registrarse para recibir notificaciones push
  2. Gestión de cargas de notificaciones
  3. Tareas y actualización en segundo plano
  4. Acciones y categorías de notificaciones
← Volver a Swift Academy