Slik bruker du Apples CloudKit for push notifications

Introduksjon

Apple introduserte sitt CloudKit-rammeverk sammen med iOS 8 i 2014. Mens hovedformålet var å fungere som en online database for iOS-applikasjoner, tilbyr CloudKit også mange andre funksjoner, inkludert push notifications. 

I denne veiledningen vil jeg vise deg hvordan du bruker CloudKit-rammeverket for å implementere pushvarsler for iOS-appene dine. Hvis du vil lære mer om de andre funksjonene CloudKit har å tilby, kan du lese opplæringen min som dekker grunnleggende om rammen:

  • En introduksjon til CloudKit

    I denne opplæringen lærer du hvordan du konfigurerer CloudKit for et iOS-program. Underveis blir du kjent med CloudKit dashbordet, ...
    Davis Allie
    iOS 8

Denne opplæringen krever at du bruker minst Xcode 8 med Swift 3. Du må også ha en fysisk iOS-enhet til å teste med og en Apple-utvikler-konto slik at du kan aktivere CloudKit for søknaden din.

1. Hvorfor bruke CloudKit?

Først vil vi se på fordelene (og ulempene) ved å bruke CloudKit for appens push-varsler. 

Som du vil se i denne opplæringen, for å sette opp meldinger med CloudKit, trenger du ikke å bekymre deg for å opprette sertifikater og provisjonsprofiler som du gjør med andre skygtjenester. Siden alt er laget av Apple, er alt du trenger å gjøre, aktivere CloudKit for appen din, og resten fungerer bare.

En av de beste tingene med CloudKit for noen utviklere er hvor mye du får gratis. Mange andre Backend-as-a-Service-selskaper (BaaS) eksisterer og tilbyr push-varsler for iOS-apper, men de fleste av disse har begrensninger på hvor mange meldinger som kan sendes gratis. Med CloudKit er det ingen grense for antall push varsler du kan sende til brukerne. CloudKits gratis nivå begrenser imidlertid datalagring, dataoverføring og antall brukerforespørsler per sekund. 

En annen fordel ved å bruke CloudKit i appene dine er at Apple, nettverksstabilitet og vedlikehold, vil være noe du aldri trenger å bekymre deg for. Apple-servicebrudd forekommer svært sjelden og er rettet raskt. Dette betyr at du kan stole på CloudKit for alltid å fungere riktig for brukerne.

En ulempe du bør være oppmerksom på når du bruker CloudKit, er at den ikke er tilgjengelig for øyeblikket på noen plattformer uten Apple. Det betyr at CloudKit ikke fungerer hvis du vil lage en Android-versjon av appen din. For en kryssplattformløsning, vil jeg anbefale en annen BaaS som back4app (bygget på Parse) som jeg diskuterer i denne opplæringen:

2. Sette opp CloudKit

For å starte, opprett et nytt prosjekt i Xcode fra iOS> Program> Enkeltvisningsprogram mal. 

Når Xcode har opprettet prosjektet ditt, går du til Prosjektnavigator og klikk på Capabilities fane. På denne skjermen klikker du på bryteren for å aktivere iCloud og aktiver deretter CloudKit boksen:

Når du har aktivert CloudKit, kan du nå gå til CloudKit dashbordet for appen din.

For å sende push notifikasjoner til brukerne våre, skal vi lage en GlobalNotification posttype som vil varsle alle brukere når en ny post av denne typen er opprettet. Hvis Record Type delen av CloudKit dashbordet er ikke allerede åpen for deg etter at du har logget på, klikker du på den i sidefeltet.

Hvis du vil opprette en ny posttype, klikker du på +knappen øverst på skjermen. Fyll inn menyen som vist på følgende skjermbilde:

For denne opplæringen legger vi bare til en enkelt innhold feltet til posttypen, men for dine egne applikasjoner kan du legge til så mange som du trenger. 

Når du er ferdig, klikk på Lagre knappen i nederste høyre hjørne.

3. Sette opp app

Tilbake i Xcode, åpne opp din AppDelegate.swift fil og legg til følgende importerklæringer øverst på koden din:

importere CloudKit import UserNotifications

Denne koden vil bare importere rammer for CloudKit og UserNotifications. Vi skal bruke UserNotifications for å administrere både varslingsrettigheter og innkommende varsler. Hvis du vil lære mer om dette rammeverket, kan du lese veiledningen min som dekker det her:

  • En introduksjon til UserNotifications Framework

    I denne opplæringen lærer du om det nye UserNotifications-rammeverket i iOS 10, tvOS 10 og watchOS 3. Dette nye rammeverket gir et moderne sett med ...
    Davis Allie
    iOS

Deretter redigerer du AppDelegate klasse definisjon for å gjøre det i samsvar med UNUserNotificationCenterDelegate protokoll:

klasse AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate ...

Nå må vi be om tillatelse til å vise varsler. For å gjøre det, erstatt din applikasjons (_: didFinishLaunchingWithOptions :) metode med følgende:

Funk-applikasjon (_ søknad: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool UNUserNotificationCenter.current (). delegate = selv UNUserNotificationCenter.current (). requestAuthorization (alternativer: [.alert .badge, .sound ], completionHandler: autorisert, feil i hvis autorisert application.registerForRemoteNotifications ()) return true

Med denne koden ber vi brukeren om tillatelse til å vise varsler, og hvis de godtar, kan du registrere appen for push-varsler.

Nå må vi implementere søknad (_: didRegisterForRemoteNotificationsWithDeviceToken :) metode. Legg til følgende kode i din AppDelegate klasse:

func application (_ søknad: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) la abonnement = CKQuerySubscription (recordType: "GlobalNotification", predikat: NSPredicate (format: "TRUEPREDICATE"), alternativer: .firesOnRecordCreation) la info = CKNotificationInfo () info.alertBody = "Et nytt varsel er lagt ut!" info.shouldBadge = sann info.soundName = "default" subscription.notificationInfo = info CKContainer.default (). publicCloudDatabase.save (abonnement, fullføringHandler: abonnement, feil i hvis feil == nil // Abonnement lagret vellykket else  // En feil oppstod  ) 

Med denne koden, oppretter vi først en CKQuerySubscription gjenstand. Dette abonnementsobjektet er hva som forteller CloudKit hva det skal sende varsler om. Når du initialiserer dette abonnementet, inkluderer vi følgende:

  • Navnet på posttypen som skal overvåkes.
  • Et predikat som kan brukes til å begrense abonnementet på bestemte poster av spesifisert type. I denne opplæringen ønsker vi å abonnere på alle GlobalNotification poster slik at vi passerer i et predikat som alltid er sant.
  • En eller flere utløsere forteller CloudKit når et varsel skal sendes. I dette eksemplet vil vi bare ha et varsel når en ny post blir opprettet. Andre gyldige utløsere inkluderer når en post er oppdatert eller slettet.

Deretter lager vi en CKNotificationInfo objekt, gi det litt innhold, og tilordne det til abonnementsobjektet. De CKNotificationInfo Objektet er hvordan du formaterer pushvarselet som er levert til brukerne. I dette eksemplet konfigurerer vi det med følgende egenskaper:

  • en alertBody av "Et nytt varsel er lagt ut!"
  • EN shouldBadge verdien av ekte. Dette vil føre til at appikonet på startskjermen øker tallet for hvert varsel som kommer inn.
  • EN soundName av "misligholde". Dette vil bare bruke standard iOS-varslingslyden for appen din. Hvis du vil bruke en egendefinert lyd, må du bruke navnet på lydfilen din.
  • EN desiredKeys array med en enkelt verdi. For hver nøkkel du inkluderer i denne gruppen, vil CloudKit laste den tilsvarende verdien fra posten som utløste varselet og inkludere det i varselens brukerinformasjon ordbok.

Videre ned, tilordner vi varslingsinformasjonen til abonnementet, som deretter lagres i den offentlige CloudKit-databasen for appen din. 

Slik at du kan se varselet mens appen din kjører, legger du til følgende metode i AppDelegate-klassen din:

func userNotificationCenter (_ senter: UNUserNotificationCenter, willPresent melding: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Gratulerer) completionHandler ([.varsel, .ound])

Denne koden bruker brukernotifikasjonsrammen for å vise varselet ditt som om appen din ikke kjørte i det hele tatt.

Før du kjører appen din, må du sjekke om testenheten din er logget inn i en iCloud-konto ved å gå til innstillinger. Hvis ikke, må du gjøre det fordi CloudKit-API-ene krever at brukeren er innlogget.

Bygg og kjør appen din fra Xcode og godta appens forespørsel om å vise varsler. Når du har gjort det, gå tilbake til CloudKit dashbordet for appen din og klikk på Abonnementstyper i venstre sidefelt. Du bør se et nytt abonnement for GlobalNotification poster med en SETT INN avtrekker:

4. Sende en melding

Nå er alt som er igjen for oss å gjøre, å sende et varsel! Fortsett i CloudKit-dashbordet, klikk på Standard sone under Offentlige data i venstre sidefelt. Klikk enten på + knappen eller på Ny rekord å opprette en ny GlobalNotification ta opp. Fyll ut innhold med hva du vil og klikk Lagre i nederste høyre hjørne.

Når oppføringen din er lagret, bør du se varselet vises umiddelbart på testenheten din:

Konklusjon

Som du har sett, kan du enkelt implementere pushvarsler for din iOS-app ved hjelp av CloudKit. Oppsettet er veldig enkelt, med bare et lite antall trinn, og de angitte APIene tillater eventuelle pushvarsler du måtte trenge for appene dine.

Som alltid, vær så snill å legge igjen dine kommentarer og tilbakemeldinger i kommentarfeltet nedenfor. Og sjekk ut noen av våre andre iOS-kurs og opplæringsprogrammer!

  • Hva er nytt i iOS 10

    Med hver ny versjon av iOS, introduserer Apple en rekke nye funksjoner og forbedringer til utvikleropplevelsen. Disse er spesielt spennende for ...
    Markus Mühlberger
    iOS
  • Opprett SiriKit Extensions i IOS 10

    iOS 10 har endelig åpnet Siri til tredjepartsapps. I denne veiledningen vil jeg vise deg hvordan du kan utnytte Siri's evner og integrere stemme ...
    Patrick Balestra
    iOS SDK
  • iOS 10: Notifikasjonstjenesteutvidelser

    Når du mottar et varsel i en iOS-app, kan det være lurt å laste ned innhold som svar på det eller redigere innholdet før det vises til brukeren. I dette…
    Davis Allie
    iOS 10
  • Enkle IOS Push Notifications Med back4app

    I denne opplæringen lærer du hvordan du enkelt implementerer pushvarsler for iOS-apper ved hjelp av back4app som back-end-tjeneste. Denne opplæringen dekker ...
    Davis Allie
    iOS SDK