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:
Als u meer wilt weten over een van deze onderwerpen, kunt u deze andere zelfstudies lezen:
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:
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.
Nadat u uw app heeft geconfigureerd met een uitbreidingsmeldingsextensie, gebeurt het volgende proces voor elke melding:
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.
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)
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.
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!