0Pricing
Swift Academy · Lezione

Gestione dei payload delle notifiche

Rispondi alle notifiche in primo piano e in background.

Gestione dei payload delle notifiche è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

Struttura del payload

Una notifica remota è un dizionario JSON che il server invia ad APNs. La chiave riservata aps contiene il contenuto visibile all'utente — alert, sound, badge — mentre le chiavi allo stesso livello contengono i dati personalizzati, ad esempio l'ID di un elemento da aprire.

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

Dizionario aps

All'interno di aps, alert può essere una stringa oppure un oggetto con titolo, corpo e sottotitolo. Anche sound, badge e flag come content-available e mutable-content si trovano qui. Tutto ciò che è fuori da aps è definito da Lei.

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

Consegna in primo piano

Per impostazione predefinita, una notifica che arriva mentre l'app è in primo piano non viene mostrata. Per mostrarla comunque, implementi il metodo willPresent del delegato e restituisca le opzioni di presentazione desiderate, ad esempio un banner e un suono.

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

Rispondere a un tocco

Quando l'utente tocca una notifica, sia che l'app fosse in background sia che fosse terminata, viene eseguito il metodo didReceive response del delegato. È qui che legge il payload e passa alla schermata corretta.

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)
    }
}

Lettura di userInfo

Il payload completo, comprese le chiavi personalizzate, è esposto come content.userInfo — un dizionario [AnyHashable: Any]. Esegua il cast di ogni valore con attenzione; non utilizzi mai il force unwrap, perché un payload non valido non deve causare l'arresto dell'app.

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
    }
}

Notifiche silenziose (in background)

Impostare content-available: 1 e omettere un alert crea una push silenziosa che riattiva l'app in background per recuperare dati, senza alcuna interfaccia. Queste notifiche vengono limitate dal sistema e richiedono la modalità in background Remote notifications.

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

Gestore del recupero in background

Una push silenziosa arriva nel metodo async didReceiveRemoteNotification del delegato dell'app. Esegue il recupero dei dati e restituisce un UIBackgroundFetchResult, così il sistema sa se sono arrivati nuovi dati e può dosare le riattivazioni future.

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

Contenuto modificabile ed estensioni di servizio

Con mutable-content: 1, una Notification Service Extension può intercettare la push prima che venga mostrata — per decifrare il corpo, scaricare un allegato immagine o riscrivere il titolo. L'estensione ha a disposizione poco tempo per terminare.

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

Localizzazione dell'alert

Per localizzare il testo sul server, invii title-loc-key e loc-key, che fanno riferimento alle chiavi nelle stringhe Localizable dell'app, oltre a loc-args per le sostituzioni. Il dispositivo le visualizza nella lingua dell'utente senza che Lei debba inviare un testo già tradotto.

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

Aggiornamento del badge

Il valore badge imposta il numero sull'icona dell'app. Inviando badge: 0 lo si cancella. Può anche impostarlo nel codice tramite setBadgeCount dopo che l'utente ha letto il contenuto, mantenendo il badge sincronizzato con lo stato di lettura.

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

Un gestore robusto

Metta insieme tutti gli elementi: mostri le notifiche in primo piano, gestisca la navigazione al tocco e convalidi ogni cast. Il gestore non va mai in arresto a causa di payload imprevisti ed estrae sempre tutte le informazioni possibili.

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)
}

Verifica rapida

Ricordi come reagire al tocco di una notifica.

Riepilogo

Ha imparato a gestire i payload:

  • Il dizionario aps contiene il contenuto visibile all'utente; le chiavi allo stesso livello contengono i Suoi dati, accessibili tramite userInfo.
  • Sovrascriva willPresent per mostrare le notifiche in primo piano e didReceive response per gestire i tocchi.
  • content-available: 1 attiva i recuperi silenziosi in background, che restituiscono un UIBackgroundFetchResult.
  • mutable-content abilita un'estensione di servizio; loc-key localizza il testo sul dispositivo.

Domande Frequenti

La lezione «Gestione dei payload delle notifiche» è gratuita?

Sì — il testo completo di «Gestione dei payload delle notifiche» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «Gestione dei payload delle notifiche»?

Rispondi alle notifiche in primo piano e in background. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Gestione dei payload delle notifiche»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Registrazione alle notifiche push
  2. Gestione dei payload delle notifiche
  3. Attività e aggiornamento in background
  4. Azioni e categorie delle notifiche
← Torna a Swift Academy