Tutorial Push Notifications: aan de slag

update opmerking: Chuck Krutsinger heeft deze tutorial bijgewerkt voor Xcode 11 en Swift 5. Jack Wu schreef de originele tutorial, en Keegan Rush schreef een eerdere update.

iOS-ontwikkelaars stellen zich graag voor dat mensen hun geweldige app constant gebruiken. Maar, natuurlijk, gebruikers zullen soms moeten de app te sluiten en het uitvoeren van andere activiteiten. De was vouwt zichzelf niet op. Gelukkig stellen pushmeldingen ontwikkelaars in staat om gebruikers te bereiken en kleine taken uit te voeren — zelfs als gebruikers niet actief gebruik maken van een app! In deze tutorial leert u hoe u:

  • uw app configureert om pushmeldingen te ontvangen.
  • toon ze aan uw gebruikers of voer andere taken uit.

aan de slag

Wat zijn pushmeldingen? Het zijn berichten die naar uw app worden verzonden via de APN ‘ s (Apple Push Notification service), zelfs als uw app niet actief is of de telefoon slaapt. Waar kun je pushmeldingen voor gebruiken?

  • Toon een kort SMS-bericht, een waarschuwing genoemd, dat de aandacht vestigt op iets nieuws in uw app.
  • een notificatiegeluid Afspelen.
  • Stel een badgenummer in op het pictogram van de app om de gebruiker te laten weten dat er nieuwe items zijn.
  • geef acties aan die de gebruiker kan ondernemen zonder de app te openen.
  • Toon een mediabijlage.
  • stil zijn, zodat de app een taak op de achtergrond kan uitvoeren.
  • groepeer meldingen in threads.
  • geleverde meldingen bewerken of verwijderen.
  • Voer code uit om uw melding te wijzigen voordat u deze weergeeft.
  • Toon een aangepaste, interactieve gebruikersinterface voor uw melding.
  • en waarschijnlijk meer.

deze tutorial behandelt veel van deze toepassingen om u te helpen met het maken van pushmeldingen in uw apps. Om deze tutorial te voltooien, heb je het volgende nodig:

  • Xcode 11.4 of hoger. Eerdere versies van Xcode ondersteunen geen pushmeldingen met behulp van de simulator.
  • een Apple Developer Program-lidmaatschap om de app te kunnen compileren met het pushmeldingen-recht.
opmerking: Later in de tutorial leert u hoe u pushmeldingen naar een echt apparaat stuurt in Verzenden naar een echt apparaat.

om pushmeldingen te verzenden en te ontvangen, moet u drie hoofdtaken uitvoeren:

  1. configureer uw app en registreer deze met de APN ‘ s.
  2. stuur een push notificatie van een server naar specifieke apparaten via APN ‘ s. Dat simuleer je met Xcode.
  3. gebruik callbacks in de app om pushmeldingen te ontvangen en af te handelen.

het verzenden van pushmeldingen is een verantwoordelijkheid van de servercomponent van uw app. Veel apps maken gebruik van derden om pushmeldingen te verzenden. Anderen gebruiken aangepaste oplossingen of populaire bibliotheken (zoals Houston). Je raakt alleen aan op het verzenden van pushberichten in deze tutorial, dus zorg ervoor dat u de Waar te gaan vanaf hier? sectie om voort te bouwen op uw kennis van pushmeldingen.

om te beginnen, download het WenderCast starter project met behulp van de Download materialen knop aan de boven-of onderkant van deze tutorial. WenderCast is iedereen ‘ s go-to bron voor raywenderlich.com podcasts en het laatste nieuws.

open WenderCast in de startmap.xcodeproj. Selecteer WenderCast in de projectnavigator en selecteer vervolgens het WenderCast-doel. Selecteer in het tabblad Algemeen & mogelijkheden uw ontwikkelteam. Bouwen en draaien in een simulator.

bouwen en uitvoeren van het starter project

WenderCast toont een lijst van raywenderlich.com podcasts en laat gebruikers ze spelen. Maar het laat gebruikers niet weten wanneer een nieuwe podcast beschikbaar is en het tabblad Nieuws is leeg! U zult snel deze problemen op te lossen met de kracht van push-notificaties.

het verzenden en ontvangen van pushmeldingen

het configureren van de App

beveiliging is erg belangrijk voor pushmeldingen. Je wilt niet dat iemand anders pushmeldingen naar je gebruikers stuurt via je app. Je moet verschillende taken uitvoeren om je app te configureren om veilig pushmeldingen te ontvangen.

inschakelen van de Push Notification Service

eerst moet u de bundelidentificatie wijzigen. Markeer in Xcode WenderCast in de projectnavigator en selecteer vervolgens het WenderCast-doel. Selecteer Algemeen, verander dan bundel Identifier naar iets unieks, zodat Apple ‘ s Push notification server kan direct pushes naar deze app.

Wijzig de bundelidentificatie

vervolgens moet u een app-ID maken in uw ontwikkelaarsaccount en de push notificatierechten inschakelen. Xcode heeft een eenvoudige manier om dit te doen: met het WenderCast doel nog steeds geselecteerd, klik op de ondertekening & mogelijkheden tab en klik vervolgens op de + mogelijkheden knop. Typ “push” in het filterveld en druk op Enter.

voeg de push notificaties toe

na het toevoegen van de push notificaties moet uw project er zo uitzien:

Project met pushmeldingen

Opmerking: Als er problemen optreden, bezoek dan het Apple Developer Center. Mogelijk moet u akkoord gaan met een nieuwe ontwikkelaarslicentie, die Apple graag bijwerkt, en het opnieuw proberen.

achter de schermen wordt de App-ID aangemaakt en wordt er de pushmeldingen aan toegevoegd. U kunt inloggen op het Apple Developer Center om dit te verifiëren:

App ID-configuratie met pushmeldingen

dat is alles wat u nu moet configureren. U bent klaar om te beginnen met het verbeteren van de app.

vragen om toestemming voor Gebruikersmeldingen

Er zijn twee stappen die u neemt om u te registreren voor pushmeldingen. Eerste, moet u de toestemming van de gebruiker om meldingen te tonen te krijgen. Vervolgens kunt u het apparaat registreren om externe (push) meldingen te ontvangen. Als alles goed gaat, het systeem zal u dan voorzien van een apparaat token, die u kunt denken aan als een “adres” om dit apparaat.

in WenderCast registreert u zich direct na het opstarten van de app voor pushmeldingen. Vraag eerst om gebruikersmachtigingen.

Open AppDelegate.swift en voeg het volgende toe aan de bovenkant van het bestand:

import UserNotifications

voeg vervolgens de volgende methode toe aan het einde van AppDelegate:

func registerForPushNotifications() { //1 UNUserNotificationCenter.current() //2 .requestAuthorization(options: ) { granted, _ in //3 print("Permission granted: \(granted)") }}

wat deze code doet:

  1. UNUserNotificationCenter verwerkt alle notificatiegerelateerde gegevens activiteiten in de app, inclusief pushmeldingen.
  2. u roept requestAuthorization(options:completionHandler:) aan om (u raadt het al) autorisatie aan te vragen om meldingen te tonen. De doorgegeven options geeft de typen meldingen aan die u wilt dat uw app gebruikt — hier vraagt u om waarschuwing, geluid en badge.
  3. de handler voor voltooiing ontvangt een Bool die aangeeft of autorisatie succesvol was. In dit geval drukt u gewoon het resultaat af.
opmerking: de opties die u doorgeeft aan requestAuthorization(options:completionHandler:) kunnen elke combinatie van UNAuthorizationOptions:

  • bevatten .badge: Toon een nummer op de hoek van het pictogram van de app.
  • .geluid: Speel een geluid af.
  • .waarschuwing: Geef een tekstbericht weer.
  • .carPlay: meldingen weergeven in CarPlay.
  • .voorlopig: berichten die niet worden onderbroken. De gebruiker krijgt geen verzoek om toestemming als u alleen deze optie gebruikt, maar uw meldingen worden alleen stil weergegeven in het meldingscentrum.
  • .providesAppNotificationSettings: geef aan dat de app een eigen gebruikersinterface heeft voor meldingsinstellingen.
  • .criticalAlert: negeer de mute-schakelaar en niet storen. Je hebt een speciaal recht van Apple nodig om deze optie te gebruiken, omdat het alleen bedoeld is voor zeer speciale gebruiksgevallen.

voeg het volgende toe aan het einde van application(_:didFinishLaunchingWithOptions:), net voor return:

registerForPushNotifications()

aanroep registerForPushNotifications() hier zorgt ervoor dat de app zal proberen om zich te registreren voor pushmeldingen wanneer het wordt gestart.

bouwen en uitvoeren. Wanneer de app wordt gestart, moet u een prompt die vraagt om toestemming om u meldingen te sturen ontvangen.

Prompt voor meldingen

Tik op Toestaan, en poef! De app kan nu meldingen weergeven. Geweldig! Maar wat als de gebruiker de machtigingen weigert? Voeg deze methode toe binnen AppDelegate:

func getNotificationSettings() { UNUserNotificationCenter.current().getNotificationSettings { settings in print("Notification settings: \(settings)") }}

eerst hebt u de gewenste instellingen opgegeven. Deze methode retourneert de instellingen die de gebruiker heeft verleend. Voor nu, druk je ze af, maar je komt hier binnenkort terug om hier meer mee te doen.

in registerForPushNotifications(), vervang de aanroep naar requestAuthorization(options:completionHandler:) door het volgende:

UNUserNotificationCenter.current() .requestAuthorization( options: ) { granted, _ in print("Permission granted: \(granted)") guard granted else { return } self?.getNotificationSettings() }

u hebt een aanroep toegevoegd aan getNotificationSettings() in de handler voor voltooiing. Dit is belangrijk omdat de gebruiker kan, op elk gewenst moment, ga naar de Instellingen app en hun kennisgeving machtigingen wijzigen. De guard vermijdt het maken van deze aanroep in gevallen waar geen toestemming werd verleend.

registreren met APN ‘ s

Nu u rechten hebt, registreert u zich voor meldingen op afstand!

in getNotificationSettings(), voeg het volgende toe onder print binnen de sluiting:

guard settings.authorizationStatus == .authorized else { return }DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications()}

hier controleert u of authorizationStatus is .authorized: De Gebruiker heeft meldingsrechten verleend. Als dat zo is, bel je UIApplication.shared.registerForRemoteNotifications() om de registratie met de Apple Push Notification service te starten. Je moet dit aanroepen op de hoofdthread, of je krijgt een runtime waarschuwing.

voeg het volgende toe aan het einde van AppDelegate:

func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) } let token = tokenParts.joined() print("Device Token: \(token)")}

Deze methode wordt aangeroepen door iOS wanneer een aanroep naar registerForRemoteNotifications() slaagt. De code ziet er misschien cryptisch uit, maar het neemt gewoon een ontvangen deviceToken en converteert het naar een string. Het device token is de vrucht van dit proces. Het wordt geleverd door APN ‘ s en uniek identificeert deze app op dit specifieke apparaat.

bij het verzenden van een push notificatie gebruikt de server tokens als “adressen” om aan de juiste apparaten te leveren. In je app zou je dit token nu naar je server sturen om op te slaan en later te gebruiken voor het verzenden van meldingen.

Voeg nu het volgende toe:

func application( _ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Failed to register: \(error)")}

Deze methode wordt door iOS aangeroepen als registerForRemoteNotifications() mislukt. Je drukt alleen de fout af.

dat is het! Bouwen en rennen. Omdat u zich op een simulator bevindt, ziet u een Failed to register fout. Dat kun je voorlopig negeren. Later, wanneer u op een echt apparaat draait, moet u een token in de console-uitvoer ontvangen. Hier is een voorbeeld:

voorbeeld van een apparaattoken

Opmerking: Er zijn verschillende redenen waarom registratie zou kunnen mislukken. Meestal, het is omdat de App-ID is niet goed geconfigureerd. De foutmelding geeft over het algemeen een goede hint voor wat er mis is.

een gesimuleerde pushmelding versturen

Gebruik een teksteditor om een bestand genaamd first aan te maken.apn, die u zult doorgeven aan Xcode ‘ s simctl utility. Plak in de volgende JSON tekst en sla het bestand op.

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

de structuur van deze JSON zal in de volgende sectie worden uitgelegd. Geduld, Sprinkhaan.

bouw en voer de app opnieuw uit op de simulator, achtergrond de app of vergrendel het apparaat. De app is nog niet in staat om pushmeldingen te verwerken terwijl op de voorgrond.

om simctl te gebruiken, moet u de apparaat-ID weten van de simulator waarin u de app draait. Als er slechts één apparaat in de simulator draait, kunt u booted gebruiken in plaats van een identifier. Om de identifier te krijgen, selecteert u in Xcode Windows Devices apparaten en simulatoren, selecteert u het tabblad simulatoren bovenaan en selecteert u de simulator die u gebruikt in de lijst aan de linkerkant. Gebruik uw muis om de identifier te kopiëren. Mogelijk moet u het dialoogvenster verbreden om het volledig te zien.

het vinden van de apparaat-ID in Xcode

Open De Terminal-app en ga naar de map waar u het eerst hebt opgeslagen.toegangspunt. Typ vervolgens het volgende commando met behulp van booted of de device identifier van Xcode in plaats van device_identifier: xcrun simctl push device_identifier bundle_identifier first.apn. Vervang device_identifier met de apparaat — ID die u hebt gekopieerd van Xcode en vervang bundle_identifier met de bundel-ID van de app-degene die u hebt gebruikt toen u het project voor het eerst instelde. Hier is een voorbeeld:

gebruik xcrun simctl om een push notificatie te verzenden vanaf de terminal

voer het commando uit en je zult de push notificatie op de simulator zien verschijnen!

Push notificatie verschijnt op simulator

Tik op de melding om de app te starten.

App gestart vanaf de push notification

is dat niet cool? :]

kijkend naar een basis Push Notification

voordat u verder gaat met het afhandelen van push notificaties, kijk dan eens naar de inhoud van de notificatie die u hebt verzonden:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

de payload is een JSON-woordenboek dat ten minste één item bevat, aps, dat ook een woordenboek is. In dit voorbeeld bevat aps de velden alertsound, en link_url. Wanneer het apparaat deze push notificatie ontvangt, toont het een waarschuwingsweergave met de tekst ” Breaking News!”en speelt het standaard geluidseffect.

link_url is eigenlijk een aangepast veld. U kunt aangepaste velden toe te voegen aan de payload als deze, en ze zullen krijgen geleverd aan uw toepassing. Omdat je niet omgaan met het in de app nog, deze sleutel/waarde paar doet momenteel niets.

correctie: Een scherpzinnige lezer wees erop dat de documentatie van Apple stelt dat aangepaste inhoud zoals link_url op een peer-niveau moet zijn van de aps woordenboek-ingang in plaats van Erin. Het werkt nog steeds als je het binnen plaatst, maar we raden altijd vast te houden aan Apple ‘ s documentatie en zal dit corrigeren in onze volgende update van deze tutorial.

Er zijn acht ingebouwde sleutels die u kunt toevoegen aan hetaps woordenboek (zie de officiële Payload Key referentie voor meer informatie):

  • alert: Dit kan een string zijn, zoals in het vorige voorbeeld, of een woordenboek. Als woordenboek kan het de tekst lokaliseren of andere aspecten van de melding wijzigen.
  • badge: dit is een getal dat wordt weergegeven in de hoek van het app-pictogram. U kunt de badge verwijderen door deze in te stellen op 0.
  • geluid: naam van het bestand van een aangepast notificatiegeluid in de app. Deze moeten korter zijn dan 30 seconden.
  • thread-id: Gebruik deze sleutel om meldingen te groeperen.
  • Categorie: dit definieert de categorie van de kennisgeving, die wordt gebruikt om aangepaste acties op de kennisgeving weer te geven. Je zult dit binnenkort onderzoeken.
  • content-available: door deze sleutel in te stellen op 1, wordt de push notificatie stil. U zult hierover meer te weten komen in het gedeelte Stille pushmeldingen hieronder.
  • mutable-content: door deze sleutel in te stellen op 1, kan uw app de melding wijzigen voordat deze wordt weergegeven.
  • target-content-id: Dit is de identifier van het naar voren gebrachte venster.

buiten deze, kunt u zoveel aangepaste gegevens toevoegen als u wilt, zolang de payload niet groter is dan 4.096 bytes.

als je genoeg plezier hebt gehad met het uitproberen van deze opties en het versturen van push notificaties naar je simulator, ga dan naar de volgende sectie!

pushmeldingen verwerken

In deze sectie leert u hoe u acties kunt uitvoeren wanneer uw app meldingen ontvangt en wanneer gebruikers erop tikken.

inzicht in wat er gebeurt wanneer u een Push notificatie ontvangt

wanneer uw app een push notificatie ontvangt, roept iOS een methode aan inUIApplicationDelegate.

u moet een notificatie anders afhandelen, afhankelijk van de status waarin uw app zich bevindt wanneer de notificatie wordt ontvangen:

  • als uw app niet actief was en de gebruiker start het door op de push Notificatie te tikken, geeft iOS de notificatie door aan uw app in de launchOptions van application(_:didFinishLaunchingWithOptions:).
  • als uw app op de voorgrond of op de achtergrond actief was, waarschuwt het systeem uw app door application(_:didReceiveRemoteNotification:fetchCompletionHandler:)aan te roepen. Wanneer de gebruiker de app opent door op de push Notificatie te tikken, kan iOS deze methode opnieuw bellen, zodat u de gebruikersinterface kunt bijwerken en relevante informatie kunt weergeven.

in het eerste geval zal WenderCast het nieuwsbericht aanmaken en direct openen naar het tabblad Nieuws. In AppDelegate.swift, voeg de volgende code toe aan het einde van application(_:didFinishLaunchingWithOptions:), net voor het return statement:

Dit is wat je doet:

  1. Controleer of de waarde voor UIApplication.LaunchOptionsKey.remoteNotification bestaat in launchOptions. Als dat zo is, dan is uw app werd gelanceerd vanaf een melding. Dit zal de push notification payload bevatten die u hebt verzonden.
  2. aangezien het woordenboek aps bestaat, maakt u hiermee een NewsItem aan.
  3. Wijzig het geselecteerde tabblad van de tabcontroller naar de sectie Nieuws.

om dit te testen, moet u het schema van WenderCast bewerken. Eerst, bouwen en uitvoeren om de nieuwste code te installeren op de simulator. Klik vervolgens op het WenderCast-schema en selecteer Schema bewerken…:

Bewerk het schema

selecteer Uitvoeren vanaf de zijbalk, selecteer vervolgens in het Info-tabblad wachten tot het uitvoerbare bestand wordt gestart:

kies wachten tot het uitvoerbare bestand wordt gestart

Deze optie zorgt ervoor dat de debugger wacht tot de app voor het eerst wordt gestart na de installatie om aan te sluiten het.

bouwen en uitvoeren. Als het klaar is met installeren, verstuur dan meer nieuws met xcrun simctl zoals eerder. Tik op de melding, en de app zal worden geopend voor nieuws:

App geopend naar het nieuws tabblad

voeg het volgende toe aan AppDelegate:

func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

Dit probeert de aps uit de meegeleverde userInfo object en, indien succesvol, maakt een nieuwe NewsItem van het.

aangezien iOS deze methode aanroept wanneer de app wordt uitgevoerd, moet u het schema weer wijzigen om de app automatisch te starten om het te testen. Selecteer in de Schema-editor onder starten automatisch.

bouwen en uitvoeren. Houd de app actief op de voorgrond en op het tabblad Nieuws. Stuur nog een nieuws push notificatie en kijk als het verschijnt in de feed:

tweede push notificatie getoond in het nieuws tabblad

dat is het! Uw app kan nu magisch ontvangen breaking news als het gebeurt. :]

opmerking: pushmeldingen zijn niet gegarandeerd. Dit is OK voor WenderCast, omdat het hebben van de volledige lijst van nieuws is niet te belangrijk voor deze app. In het algemeen moet u echter geen pushmeldingen gebruiken als de enige manier om inhoud te leveren. In plaats daarvan moeten pushmeldingen aangeven dat er nieuwe content beschikbaar is en de app de content van de bron laten downloaden (bijvoorbeeld van een REST API).met

werken met bruikbare notificaties

bruikbare notificaties kunt u aangepaste knoppen aan de notificatie zelf toevoegen. Je hebt dit misschien gemerkt op e-mailmeldingen of Tweets waarmee je ter plaatse “antwoord” of “favoriet” kunt geven.

uw app kan bruikbare meldingen definiëren wanneer u zich registreert voor meldingen met behulp van categorieën. Elke categorie van kennisgeving kan een paar vooraf ingestelde aangepaste acties hebben.

eenmaal geregistreerd, kan uw server de categorie van een push notificatie instellen. De bijbehorende acties zullen beschikbaar zijn voor de gebruiker wanneer deze wordt ontvangen.

voor WenderCast definieert u een nieuwscategorie met een aangepaste actie genaamd View. Met deze actie kunnen gebruikers het nieuwsartikel in de app bekijken als ze ervoor kiezen om.

in registerForPushNotifications(), voeg het volgende in net onder de guard en boven de aanroep van getNotificationSettings():

// 1let viewAction = UNNotificationAction( identifier: Identifiers.viewAction, title: "View", options: )// 2let newsCategory = UNNotificationCategory( identifier: Identifiers.newsCategory, actions: , intentIdentifiers: , options: )// 3UNUserNotificationCenter.current().setNotificationCategories()

stap voor stap:

  1. Maak een nieuwe meldingsactie aan, met de titelweergave op de knop, die de app op de voorgrond opent wanneer deze wordt geactiveerd. De actie heeft een aparte identifier, die iOS gebruikt om onderscheid te maken tussen andere acties op dezelfde melding.
  2. Definieer de nieuwscategorie, die de weergaveactie zal bevatten. Dit heeft ook een aparte identifier die uw lading moet bevatten om aan te geven dat de push notificatie tot deze categorie behoort.
  3. Registreer de nieuwe actionable notification door setNotificationCategoriesaan te roepen.

bouw en voer de app uit om de nieuwe meldingsinstellingen te registreren.

achtergrond van de app en stuur vervolgens de volgende payload via dexcrun simctl utility:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

wanneer de notificatie verschijnt, trek er dan op om de View actie weer te geven:

push notificatie met de view actie revealed

Nice! Tikken View zal starten WenderCast, maar het doet niets spannends gewoon nog niet doen. Om het nieuwsbericht weer te geven, moet je wat meer event handling doen in de delegate.

afhandeling van Meldingsacties

wanneer een meldingsactie wordt geactiveerd, informeertUNUserNotificationCenter de gemachtigde. Terug in AppDelegate.swift, voeg de volgende class extension toe aan de onderkant van het bestand:

// MARK: - UNUserNotificationCenterDelegateextension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter( _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { // 1 let userInfo = response.notification.request.content.userInfo // 2 if let aps = userInfo as? , let newsItem = NewsItem.makeNewsItem(aps) { (window?.rootViewController as? UITabBarController)?.selectedIndex = 1 // 3 if response.actionIdentifier == Identifiers.viewAction, let url = URL(string: newsItem.link) { let safari = SFSafariViewController(url: url) window?.rootViewController? .present(safari, animated: true, completion: nil) } } // 4 completionHandler() }}

Dit is de callback die je krijgt als de app wordt geopend vanwege een aangepaste actie. Het ziet er misschien uit alsof er veel aan de hand is, maar er is hier niet veel nieuws:

  1. haal de userInfo dictionary.
  2. Maak een NewsItem vanuit het aps woordenboek en navigeer naar het tabblad Nieuws.
  3. controleer de actionIdentifier. Als het de” View “actie is en de link Een geldige URL is, wordt de link weergegeven in een SFSafariViewController.
  4. roep de handler aan die het systeem aan u doorgeeft.

Er is nog een laatste bit: u moet de gedelegeerde instellen op UNUserNotificationCenter. Voeg deze regel toe aan de bovenkant van application(_:didFinishLaunchingWithOptions:):

UNUserNotificationCenter.current().delegate = self

bouwen en uitvoeren. Sluit de app opnieuw, stuur dan een ander nieuws bericht met de volgende lading:

{ "aps": { "alert": "New Posts!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

Trek de melding op en tik op Weergeven, en je zult zien WenderCast een Safari-View-controller direct na het van start:

Notificatie link van de URL geopend in Safari bekijken

Gefeliciteerd, u heeft geïmplementeerd een bruikbare kennisgeving! Stuur een paar meer en probeer het openen van de melding op verschillende manieren om te zien hoe het zich gedraagt.

verzenden naar een echt apparaat

Als u geen pushmeldingen naar een echt apparaat wilt verzenden of als u nog geen stille pushmeldingen nodig hebt, kunt u deze sectie overslaan en naar waar gaan vanaf hier?

echter, als je een idee wilt krijgen hoe je pushmeldingen naar een echt apparaat kunt sturen en stil push kunt proberen, dan moet je wat extra instellingen doen. Download het hulpprogramma PushNotifications. U zult dit hulpprogramma app gebruiken om meldingen naar een echt apparaat te sturen. Om het te installeren, Volg de instructies onder Hoe te installeren. Besteed speciale aandacht aan het openen van de app, omdat je een aantal instellingen moet wijzigen om dit hulpprogramma uit te voeren.

Ga naar het Apple Developer Member Center en log in.

het versturen van pushmeldingen vereist een Authenticatiesleutel. Selecteer certificaten, Identifiers & profielen, en zoek vervolgens sleutels in het linkerdeelvenster. Aan de rechterkant van de toetsen titel is een + knop. Klik erop om een nieuwe sleutel te maken.

Geef de sleutel een naam, zoals Push Notification Key. Selecteer APN ‘ s (Apple Push Notifications service) onder Sleuteldiensten.

voorbeeld push notification key

klik op Doorgaan en registreer op het volgende scherm om uw nieuwe sleutel aan te maken. Tik Op Downloaden. Het gedownloade bestand zal een naam hebben zoals AuthKey_4SVKWF966R.p8. Houd dit bestand bij — je hebt het nodig om je meldingen te verzenden! Het 4svkwf966r deel van de bestandsnaam is het Key ID. Je hebt dit ook nodig.

Het Laatste stuk dat je nodig hebt is je Team ID. Navigeer naar de pagina met Lidmaatschapsdetails van het ledencentrum om het te vinden.

Het is je gelukt! Met je nieuwe sleutel ben je nu klaar om je eerste push Notificatie te versturen! Je hebt nog één ding nodig.

Voer de app uit op uw echte apparaat en kopieer het device token van de debugger console en zorg dat het klaar is.

start PushNotifications en voer de volgende stappen uit:

  1. selecteer Token onder authenticatie.
  2. klik op de knop selecteer P8 en selecteer de .p8 bestand uit de vorige sectie.
  3. Voer uw sleutel-ID en Team-ID in de relevante velden in.
  4. voer onder Body De Bundel-ID van uw app en uw apparaattoken in.
  5. Wijzig het verzoek om er zo uit te zien:
{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

klik op de knop Verzenden in pushnotificaties.

pushmeldingen tester

u dient uw pushmeldingen te ontvangen:

uw eerste pushmeldingen

problemen oplossen veelvoorkomende problemen

Hier zijn een paar problemen die u kunt tegenkomen:

  • sommige meldingen komen aan, maar niet alle: als je veel pushmeldingen tegelijk verstuurt, maar je ontvangt er maar een paar, vrees dan niet! Dat is door opzet. APNs onderhoudt een QoS (Quality of Service) wachtrij voor elk apparaat. De grootte van deze wachtrij is 1, dus als u meerdere meldingen verstuurt, wordt de laatste melding overschreven.
  • probleem bij het verbinden met de Push Notification Service: een mogelijkheid zou kunnen zijn dat er een firewall is die de poorten blokkeert die door APN ‘ s worden gebruikt. Zorg ervoor dat u deze poorten deblokkeert.

het gebruik van stille pushmeldingen

Stille pushmeldingen kan uw app stilletjes wakker maken om bepaalde taken op de achtergrond uit te voeren. WenderCast kan deze functie gebruiken om de podcast-lijst rustig te vernieuwen.

met een juiste server component kan dit zeer efficiënt zijn. Uw app hoeft niet voortdurend te pollen naar gegevens. U kunt het een stille push notificatie sturen wanneer er nieuwe gegevens beschikbaar zijn.

om te beginnen, selecteert u het WenderCast doel opnieuw. Klik nu op de ondertekening & mogelijkheden tab en voeg de achtergrond modi mogelijkheid. Controleer dan de Remote notifications optie:

controleer de optie Meldingen op afstand voor achtergrondmodi recht

nu wordt uw app op de achtergrond wakker wanneer deze een van deze pushmeldingen ontvangt.

in AppDelegate.swift, zoek application(_:didReceiveRemoteNotification:fetchCompletionHandler:). Vervang de aanroep naar NewsItem.makeNewsItem() door het volgende:

// 1if aps as? Int == 1 { let podcastStore = PodcastStore.sharedStore // 2 podcastStore.refreshItems { didLoadNewItems in // 3 completionHandler(didLoadNewItems ? .newData : .noData) }} else { // 4 NewsItem.makeNewsItem(aps) completionHandler(.newData)}

bij het doornemen van de code:

  1. controleer je of content-available is ingesteld op 1. Zo ja, dan is dit een stille melding.
  2. u vernieuwt de podcast-lijst, een asynchrone netwerkaanroep.
  3. wanneer de verversing is voltooid, bel de handler voor voltooiing om het systeem te laten weten of de app nieuwe gegevens heeft geladen.
  4. als het geen stille melding is, dan is het een nieuwsbericht, dus maak een nieuwsbericht.

zorg ervoor dat u de voltooiingshandler aanroept met het eerlijke resultaat. Het systeem meet het batterijverbruik en de tijd die uw app gebruikt op de achtergrond en kan uw app gas geven indien nodig.

dat is alles wat er is. Om het te testen, bouwen en uitvoeren, de voorgrond van de app en druk op de volgende payload via de pushnotifications utility:

{ "aps": { "content-available": 1 }}

als alles goed gaat, mag er niets gebeuren, tenzij er zojuist een nieuwe podcast is toegevoegd aan de database op afstand. Om te bevestigen dat de code is uitgevoerd zoals verwacht, zet je een breekpunt in application(_:didReceiveRemoteNotification:fetchCompletionHandler:) en stap je er doorheen nadat de melding is verzonden.

waar moet ik nu naartoe?

Gefeliciteerd! Je hebt deze tutorial voltooid en WenderCast een volledig uitgeruste app met push-notificaties gemaakt!

u kunt het voltooide project downloaden met behulp van de knop materialen Downloaden aan de boven-of onderkant van deze tutorial.

wilt u dieper ingaan op alles wat u kunt doen met pushmeldingen, zoals het bouwen van aangepaste gebruikersinterface en het verzenden van kritische waarschuwingen? Onze Push notificaties door Tutorials boek leert u de geavanceerde functies van push notificaties.

een andere bron is de pushmeldingen-Tutorial voor iOS: Rich pushmeldingen-tutorial.

hoewel pushmeldingen een belangrijk onderdeel zijn van moderne apps, is het ook heel gebruikelijk dat gebruikers machtigingen voor uw app weigeren als u de meldingen overdrijft. Maar met doordacht ontwerp kunnen pushmeldingen ervoor zorgen dat je gebruikers keer op keer terugkomen naar je app!

Cute cat notification bell

Deze kat kreeg een push notification dat zijn diner klaar was!

Ik hoop dat je genoten hebt van deze push notificaties tutorial. Als je vragen hebt, voel je vrij om ze te verlaten in het discussieforum hieronder.

raywenderlich.com wekelijks

De raywenderlich.com nieuwsbrief is de makkelijkste manier om op de hoogte te blijven van alles wat u als mobiele ontwikkelaar moet weten.

ontvang een wekelijkse samenvatting van onze tutorials en cursussen, en ontvang een gratis diepgaande e-mail cursus als bonus!

gemiddelde waardering

4.9 / 5

voeg een waardering toe voor deze inhoud

Meld u aan om een waardering toe te voegen

17 beoordelingen

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *