iOS 10 estensioni del servizio di notifica

introduzione

Quando si riceve una notifica in un'app iOS, potrebbe essere necessario poter scaricare il contenuto in risposta ad esso o modificare il contenuto prima che venga mostrato all'utente. In iOS 10, Apple ora consente alle app di farlo attraverso un nuovo Estensione del servizio di notifica

Un esempio di quando ciò potrebbe essere utile è se si disponesse di un'app di messaggistica in cui il server back-end identificava gli utenti solo per una sorta di codice anziché per nome. Per un utente della tua app, i nomi e altri dettagli dei loro contatti potrebbero essere memorizzati localmente sul dispositivo. Quando si invia una notifica a un utente quando riceve un messaggio, il payload originale potrebbe includere l'identificatore del mittente, che l'estensione del servizio potrebbe sostituire con il nome del contatto.

Per utilizzare questo nuovo tipo di estensione, dovrai sviluppare la tua app con Xcode 8 o successivo e l'SDK di iOS 10.

Si prega di notare quanto segue prima di continuare con questo suggerimento rapido:

  • Questo articolo lo farà non segui il processo di configurazione della tua app per l'invio / ricezione di notifiche locali o push. 
  • Il codice di esempio mostrato utilizzerà le API introdotte nel framework UserNotifications, anch'esso nuovo in iOS 10. 
  • Se vuoi imparare come creare interfacce personalizzate per le tue notifiche, queste sono fatte attraverso la notifica soddisfare estensioni.

Se vuoi saperne di più su uno di questi argomenti, puoi leggere questi altri tutorial:

1. Impostazione estensione

Il processo di aggiunta di un'estensione del servizio di notifica a un'app per iOS è identico a quello di altre estensioni. Nella barra dei menu Xcode, vai a File> Nuovo> Target ... e selezionare il Estensione del servizio di notifica modello dal menu che appare:

Nel menu successivo, puoi compilare le informazioni specifiche dell'applicazione.

Una volta che la tua estensione è stata creata, vedrai due file (o tre se usi Objective-C) all'interno della cartella di estensione in Xcode Navigatore di progetto:

  • NotificationService.swift, che conterrà tutto il codice e la logica per la tua estensione.
  • Info.plist, che contiene i dettagli di configurazione per la tua estensione.

Il Info.plist il file contiene tutte le informazioni richieste per l'estensione, quindi l'unico file che dovresti modificare è il NotificationService.swift file.

2. Ciclo di vita dell'estensione

Una volta configurata l'app con un'estensione del servizio di notifica, per ogni notifica verrà eseguita la seguente procedura:

  1. L'app riceve una notifica.
  2. Il sistema crea un'istanza della classe di estensione e la avvia in background.
  3. La tua estensione esegue modifiche al contenuto e / o scarica alcuni contenuti.
  4. Se la tua estensione impiega troppo tempo per eseguire il proprio lavoro, verrà notificata e immediatamente interrotta.
  5. La notifica viene visualizzata all'utente.

Come puoi vedere, quando utilizzi un'estensione del servizio di notifica, hai solo una quantità limitata di tempo per eseguire il lavoro necessario. Se la tua estensione impiega troppo tempo, verrà arrestata dal sistema e la notifica verrà recapitata come se non avessi alcuna estensione. 

3. Codice di estensione

L'estensione del servizio di notifica esiste come un singolo oggetto che è una sottoclasse di UNNotificationServiceExtension classe. Questa classe definisce i seguenti metodi:

  • didReceive (_: withContentHandler :) che fornisce la tua estensione con l'originale UNNotificationRequest oggetto. In questo metodo, ne crei uno nuovo UNNotificationContent oggetto e passare questo come parametro al gestore di completamento quando hai finito. Questo contenuto di notifica può essere creato da zero o da una copia mutevole del contenuto originale. Il codice seguente mostra un'implementazione di esempio di questo metodo:
override func didReceive (_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) se si lascia copy = request.content.mutableCopy () come? UNMutableNotificationContent // Modifica proprietà del contenuto della copiaHandler (copia)
  • serviceExtensionTimeWillExpire che viene eseguito quando l'estensione sta per essere terminata dal sistema. Questo metodo non contiene alcun parametro, quindi se vuoi che la tua estensione fornisca un in corso versione del contenuto modificato, sarà necessario mantenere un riferimento al gestore di completamento dal didReceive (_: withContentHandler :) metodo. Il seguente codice mostra come ciò potrebbe essere ottenuto nella sottoclasse di estensione:
// Imposta questa proprietà dal metodo didReceive (_: withContentHandler :) var contentHandler: ((UNNotificationContent) -> Void)? // Modificare questa proprietà mentre si manipola il contenuto var bestAttemptContent: UNMutableNotificationContent? override func serviceExtensionTimeWillExpire () if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent contentHandler (bestAttemptContent)

4. Limiti di estensione

L'ultima cosa importante da considerare quando si utilizza un'estensione del servizio di notifica è le condizioni in base alle quali l'estensione funzionerà. 

Innanzitutto, l'estensione verrà avviata solo per le notifiche configurate per mostrare all'utente gli avvisi sullo schermo. Ciò significa che qualsiasi notifica silenziosa (come quelle utilizzate per aggiornare i badge delle app) non attiverà la tua estensione. 

In secondo luogo, la notifica in arrivo aps dizionario all'interno del suo carico utile deve includere il mutabile-content chiave con un valore di 1

La corretta configurazione delle tue notifiche dipenderà in ultima analisi dalla configurazione della tua app. Per soddisfare la seconda condizione, in particolare, potrebbe essere necessario apportare alcune modifiche all'implementazione della notifica push sul lato server. Se non si utilizza un server personalizzato e si utilizza invece un servizio di terze parti per l'implementazione della notifica push, quindi suggerirei di ricercare e leggere la documentazione di supporto se non si riesce a far funzionare la propria estensione.

Conclusione

Attraverso il nuovo UNNotificationServiceExtension classe in iOS 10, è molto semplice implementare un'estensione del servizio di notifica per le proprie applicazioni. Qualunque sia il tuo caso d'uso, queste API ti consentono di modificare facilmente il contenuto di una notifica prima che venga mostrato all'utente.

Come sempre, si prega di essere sicuri di lasciare i vostri commenti e feedback nella sezione commenti qui sotto. E controlla alcuni dei nostri altri post su iOS 10 e lo sviluppo di app Swift!