iOS 10 uitbreidingen voor meldingen

Invoering

Wanneer u een melding ontvangt in een iOS-app, wilt u mogelijk in staat zijn inhoud te downloaden als reactie daarop of de inhoud bewerken voordat deze aan de gebruiker wordt getoond. In iOS 10 staat Apple nu apps toe om dit via een nieuw te doen Uitbreiding van de meldingsservice

Een voorbeeld van wanneer dit nuttig zou kunnen zijn, is of u een berichten-app had waarbij uw back-end-server alleen gebruikers identificeerde op basis van een code in plaats van een naam. Voor een gebruiker van uw app kunnen de namen en andere details van hun contacten lokaal op het apparaat worden opgeslagen. Wanneer een bericht naar een gebruiker wordt verzonden wanneer deze een bericht ontvangt, kan de oorspronkelijke payload de identificatie van de afzender bevatten, die uw servicerextensie kan vervangen door de naam van de contactpersoon.

Als u dit nieuwe extensie-type wilt gebruiken, moet u uw app ontwikkelen met Xcode 8 of hoger en de iOS 10 SDK.

Let op het volgende voordat u doorgaat met deze snelle tip:

  • Dit artikel zal niet doorloop het proces van het instellen van uw app voor het lokaal verzenden of ontvangen van berichten of pushmeldingen. 
  • De getoonde voorbeeldcode maakt gebruik van API's die zijn geïntroduceerd in het UserNotifications-framework, dat ook nieuw is in iOS 10. 
  • Als u wilt leren hoe u aangepaste interfaces voor uw meldingen kunt maken, gebeurt dit via een melding inhoud extensies.

Als u meer wilt weten over een van deze onderwerpen, kunt u deze andere zelfstudies lezen:

1. Extensie instellen

Het toevoegen van een meldingsdienstextensie aan een iOS-app is identiek aan die van andere extensies. Ga in de Xcode-menubalk naar Bestand> Nieuw> Doel ... en selecteer de Uitbreiding van de meldingsservice sjabloon uit het menu dat verschijnt:

In het volgende menu kunt u toepassingsspecifieke informatie invullen.

Zodra uw extensie is aangemaakt, ziet u twee bestanden (of drie als u Objective-C gebruikt) in de extensiemap in de Xcode Project navigator:

  • NotificationService.swift, die alle code en logica voor uw extensie bevat.
  • Info.plist, welke configuratiegegevens voor uw extensie bevat.

De Info.plist bestand bevat alle informatie die nodig is voor uw extensie, dus het enige bestand dat u moet wijzigen is de NotificationService.swift het dossier.

2. Verlengingslevenscyclus

Nadat u uw app heeft geconfigureerd met een uitbreidingsmeldingsextensie, gebeurt het volgende proces voor elke melding:

  1. App ontvangt een melding.
  2. Systeem maakt een instantie van uw uitbreidingsklasse en start deze op de achtergrond.
  3. Uw extensie voert inhoudsbewerkingen uit en / of downloadt wat inhoud.
  4. Als uw extensie te lang duurt om zijn werk uit te voeren, wordt dit gemeld en onmiddellijk beëindigd.
  5. Melding wordt getoond aan de gebruiker.

Zoals u kunt zien, hebt u bij het gebruik van een meldingsdienstextensie slechts een beperkte tijd om het benodigde werk uit te voeren. Als uw extensie te lang duurt, wordt deze door het systeem gestopt en wordt de melding afgeleverd alsof u helemaal geen extensie had. 

3. Extensiecode

Uw uitbreidingsmeldingsextensie bestaat als een enkel object dat een subklasse is van de UNNotificationServiceExtension klasse. Deze klasse definieert de volgende methoden:

  • didReceive (_: withContentHandler :) waarmee uw extensie wordt geleverd met het origineel UNNotificationRequest voorwerp. In deze methode maakt u een nieuwe aan UNNotificationContent object en geef dit door als parameter aan de voltooiingsmanager als u klaar bent. Deze notificatie-inhoud kan van nul worden gemaakt of van een veranderbare kopie van de originele inhoud. De volgende code toont een voorbeeldimplementatie van deze methode:
override func didReceive (_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) if let copy = request.content.mutableCopy () as? UNMutableNotificationContent // Eigenschappen van kopie-inhoud bewerkenHandler (kopie)
  • serviceExtensionTimeWillExpire die wordt uitgevoerd wanneer uw extensie door het systeem wordt beëindigd. Deze methode bevat geen parameters, dus als u wilt dat uw extensie een bezig versie van uw gewijzigde inhoud, moet u een verwijzing naar de voltooiingsmanager van de didReceive (_: withContentHandler :) methode. De volgende code laat zien hoe dit kan worden bereikt in uw uitbreidingssubklasse:
// Stel deze eigenschap in vanuit de didReceive (_: withContentHandler :) methode var contentHandler: ((UNNotificationContent) -> Void)? // Wijzig deze eigenschap terwijl u de inhoud manipuleert var bestAttemptContent: UNMutableNotificationContent? override func serviceExtensionTimeWillExpire () if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent contentHandler (bestAttemptContent)

4. Verlengingsbeperkingen

Het laatste belangrijke dat u moet overwegen bij het gebruik van een uitbreidingsmeldingsuitbreiding, is de voorwaarden waaronder de extensie werkt. 

Ten eerste wordt uw extensie alleen gestart voor meldingen die zijn geconfigureerd om waarschuwingen op het scherm voor de gebruiker weer te geven. Dit betekent dat eventuele stille meldingen (zoals die voor het bijwerken van app-badges) uw extensie niet activeren. 

Ten tweede zijn de binnenkomende meldingen aps woordenboek binnen zijn lading moet de veranderlijk-inhoud sleutel met een waarde van 1

De juiste configuratie van uw meldingen hangt uiteindelijk af van de eigen instellingen van uw app. Om aan de tweede voorwaarde te voldoen, moeten mogelijk enkele wijzigingen worden aangebracht aan de push-notificatie-implementatie aan de serverzijde. Als u geen aangepaste server gebruikt en in plaats daarvan een service van derden gebruikt voor uw implementatie van pushmeldingen, raad ik u aan hun ondersteuningsdocumentatie te onderzoeken en door te lezen als u uw extensie niet kunt laten werken.

Conclusie

Door het nieuwe UNNotificationServiceExtension klasse in iOS 10, is het heel eenvoudig voor u om een ​​meldingsdienstextensie voor uw eigen toepassingen te implementeren. Wat uw use-case ook is, met deze API's kunt u eenvoudig de inhoud van een melding wijzigen voordat deze aan de gebruiker wordt getoond.

Laat zoals altijd uw opmerkingen en feedback achter in de opmerkingen hieronder. En bekijk enkele van onze andere berichten over de ontwikkeling van iOS 10 en de Swift-app!