18/12/2021
I nutidens digitale landskab er mobilapplikationer en integreret del af vores hverdag. For at fastholde brugernes opmærksomhed og sikre en engagerende oplevelse er push-notifikationer et uundværligt værktøj. Disse notifikationer giver applikationer mulighed for at sende tidsfølsomme beskeder direkte til brugerens enhed, selv når appen ikke er aktiv. Men hvordan fungerer det egentlig under overfladen? Nøglen til at levere disse beskeder ligger i enhedstokenet, en unik identifikator for hver enkelt enhed, der er registreret til at modtage push-notifikationer.

Denne artikel vil dykke ned i, hvordan du opsætter og administrerer enhedstokens og push-notifikationer på tværs af de to dominerende mobile platforme: Android (via Firebase Cloud Messaging – FCM) og iOS (via Apple Push Notification service – APNs). Vi vil også udforske, hvordan platforme som PubNub forenkler processen ved at bygge bro mellem din applikation og disse tredjeparts notifikationstjenester. Uanset om du er en erfaren udvikler eller ny inden for mobiludvikling, vil denne guide give dig en omfattende forståelse af, hvordan du implementerer robuste og pålidelige push-notifikationsløsninger.
Android Mobil Push-Notifikationer med FCM og PubNub
For Android-enheder er Firebase Cloud Messaging (FCM) Googles primære platform for afsendelse af push-notifikationer. Integration med en tredjeparts tjeneste som PubNub strømliner processen og giver dig mulighed for at publicere beskeder, der automatisk videresendes som push-notifikationer.
Opsætning af Firebase Cloud Messaging (FCM)
Før du kan sende push-notifikationer til Android-enheder, skal du konfigurere din Firebase-konto og dit projekt. Dette indebærer flere trin for at sikre, at FCM kan kommunikere med din applikation og PubNub.
- Opret et Firebase-projekt: Log ind på Firebase-konsollen og opret et nyt projekt. Følg guiden for at fuldføre oprettelsen.
- Konfigurer tjenestekonto: Gå til Project settings -> Service accounts. Det er vigtigt at bemærke, at standardtjenestekontoen har næsten administratorrettigheder. For sikkerheds skyld anbefales det at oprette en dedikeret tjenestekonto med minimale tilladelser, specifikt Firebase Cloud Messaging API Admin-rollen. Dette begrænser adgangen til kun det, der er nødvendigt for PubNubs FCM-brug.
- Generer privat nøgle: Fra Google Cloud Platform-konsollen (tilgængelig via linket under 'All service accounts' i Firebase), opret den nye tjenestekonto med den specificerede rolle. Tilbage i Firebase-konsollen, naviger til den nyoprettede tjenestekonto, og klik på 'Generate new private key' for at downloade din FCM-private nøglefil (en JSON-fil).
- Integrer
google-services.json: I dit Android Studio-projekt skal du placere den downloadedegoogle-services.json-fil i rodmappen for dit Android-appmodul. Konfigurer derefter dine Gradle-filer til at brugegoogle-servicesGradle-pluginnet og tilføj de nødvendige afhængigheder for Firebase-produkter.
Vigtig note om FCM-migration: Google har udfaset de ældre HTTP FCM API'er, der brugte en API-nøgle, og de fjernes helt i juni 2024. Det anbefales kraftigt at migrere til den nye HTTP v1 FCM, som bruger den private nøglefil, du lige har genereret.
Konfiguration af PubNub til FCM
Når din Firebase-konto er konfigureret, skal du informere PubNub om din FCM-opsætning:
- Upload privat nøgle: I PubNub Admin Portal skal du gå til sektionen for Mobile Push Notifications for dit app-keyset. Aktiver funktionen og upload den private nøglefil (JSON), som du downloadede fra Firebase, via indstillingen 'Private key file' i Firebase Cloud Messaging-sektionen.
Hentning af Android Enhedstoken
For at din applikation kan modtage push-notifikationer, skal den først anmode om et enhedstoken fra FCM. Dette token er unikt for den specifikke app-installation på enheden.
- Første hentning: Du kan hente enhedstokenet ved at kalde
FirebaseMessaging.getInstance().getToken(). Dette gøres typisk tidligt i appens livscyklus, f.eks. ionCreate-metoden for din hovedaktivitet. Resultatet vil blive leveret asynkront. - Håndtering af token-opdateringer:Enhedstokenet kan ændre sig over tid – f.eks. hvis appen geninstalleres, eller hvis FCM genudsteder det af sikkerhedsmæssige årsager. For at håndtere disse opdateringer skal du oprette en brugerdefineret klasse, der udvider
FirebaseMessagingService. Overvej at overskriveonNewToken(String token)-metoden. Denne callback-metode udløses, når et nyt token genereres. Når et nyt token modtages, er det afgørende at gemme det og opdatere dine PubNub-kanalregistreringer.
Håndtering af Enhedstoken og Kanaler
For at sikre en stabil og fejlfri håndtering af push-notifikationer er det essentielt at cache to stykker information: enhedstokenet og listen over registrerede kanaler. Dette forhindrer race-conditions og giver nem adgang fra hele applikationen.
- Caching-strategi: En simpel tilgang er at bruge
SharedPreferencestil grundlæggende, vedvarende lagring. Du kan oprette en hjælpeklasse (f.eks.SharedPreferencesManager) til at indkapsle læse- og skriveoperationer for at sikre trådsikkerhed. Gem det senest modtagne enhedstoken og en opdateret liste over kanaler, når de tilføjes eller fjernes. EnSeter praktisk til at gemme kanallisten for at undgå dubletter. - Opdatering af push-notifikationer på kanaler: Når et nyt enhedstoken modtages, eller hvis kanallisten ændres, skal du opdatere PubNub med de nye oplysninger. Dette involverer typisk at fjerne alle eksisterende push-notifikationer for det gamle token (hvis det eksisterer) og derefter tilføje push-notifikationer for det nye token på de relevante kanaler.
Registrering og Afregistrering af Kanaler
Med et gyldigt enhedstoken kan du nu registrere det med specifikke kanaler, som tillader afsendelse af push-notifikationer til enheden via disse kanaler.
- Tilføjelse af kanaler: Brug PubNub SDK's
addPushNotificationsOnChannels()-metode. Du skal angive push-typen (FCM), enheds-ID'et (det cachede enhedstoken) og listen over kanaler. Efter en vellykket registrering skal de nye kanaler føjes til din cachede liste. - Kontrol af registreringer (Audit): Du kan til enhver tid revidere de kanaler, som en enhed er registreret med, ved at bruge
auditPushChannelProvisions()-metoden i PubNub SDK. Dette er nyttigt for at synkronisere din cachede kanalliste med serverens sandhedskilde. - Fjernelse af kanaler: Brug
removePushNotificationsFromChannels()-metoden til at fjerne enhedens registrering fra specifikke kanaler. Opdater derefter din cachede kanalliste.
Afsendelse af Push-Notifikationer via PubNub
Når enhederne er registreret, kan du sende push-notifikationer ved at publicere en besked på en kanal, der indeholder en FCM-specifik payload.
- Payload-struktur (
pn_fcm): PubNub genkender en specifik JSON-struktur for FCM-payloads, kaldetpn_fcm. Denne struktur er kompatibel med FCM's besked-payload og indeholder nøglefelter somnotification(til titel og brødtekst) ogandroid(til Android-specifikke indstillinger somcollapse_keyellerdata). - Brugerdefineret metadata: Du kan inkludere brugerdefineret information i notifikationen ved at tilføje et
data-felt iandroid-objektet ipn_fcm-payloaden. Dette giver din app mulighed for at reagere intelligent, når notifikationen modtages. - Udelukkelse af enheder (
pn_exceptions): For at undgå, at afsenderen modtager en push-notifikation for deres egen besked, kan du inkludere etpn_exceptions-array ipn_fcm-objektet. Her kan du liste enhedstokens, der skal udelukkes fra at modtage notifikationen. - Publicering: Brug PubNub SDK's
publish()-metode, angiv kanalen og din forberedte push-payload. PubNub vil automatisk hente alle enhedstokens, der er forbundet med push på den målrettede kanal, og videresende en push-notifikationsanmodning til FCM.
iOS Mobil Push-Notifikationer med APNs og PubNub
For iOS-enheder er Apple Push Notification service (APNs) den dedikerede tjeneste til levering af push-notifikationer. Ligesom med FCM kan PubNub bruges til at strømline integrationen med APNs.
Forståelse af Enhedstokens i iOS
På iOS-platformen tildeler APNs en unik identifikator, et enhedstoken, til hver enhed, der er registreret til at modtage push-notifikationer for en specifik app. Dette token er afgørende for, at APNs kan rute notifikationer til den korrekte enhed.

Moderne Opsætning af iOS Push-Notifikationer (iOS 10+)
Den måde, iOS-apps registrerer sig for push-notifikationer på, har udviklet sig. Ældre metoder som registerForRemoteNotificationTypes er udfaset og bør ikke længere anvendes.
- Anmodning om autorisation: Den moderne tilgang involverer brug af UserNotifications-rammeværket (
UNUserNotificationCenter). Din app skal anmode brugeren om tilladelse til at sende notifikationer ved at kaldeUNUserNotificationCenter.current().requestAuthorization(options:completionHandler:). Dette bør gøres, når appen starter, eller når det er relevant for brugeroplevelsen. - Registrering for fjernnotifikationer: Efter at have anmodet om brugerautorisation skal du kalde
UIApplication.shared.registerForRemoteNotifications(). Dette initierer processen, hvor iOS og APNs genererer et enhedstoken for din app på den aktuelle enhed. - Modtagelse af Enhedstoken: Når APNs har genereret et enhedstoken, leveres det til din apps app-delegat via metoden
application(_:didRegisterForRemoteNotificationsWithDeviceToken:). Tokenet modtages som enData-type. For at bruge det med PubNub eller til at gemme det, skal du typisk konvertere det til en streng (f.eks. en hex-streng). - Håndtering af fejl: Hvis registreringen mislykkes, kaldes
application(_:didFailToRegisterForRemoteNotificationsWithError:). Det er vigtigt at logge disse fejl for at diagnosticere eventuelle problemer med certifikater, provisioneringsprofiler eller netværksforbindelse.
Adgang til Enhedstoken i iOS 13+
Mange udviklere støder på udfordringer med at modtage enhedstokenet i iOS 13 og nyere versioner. Det er vigtigt at forstå, at application(_:didRegisterForRemoteNotificationsWithDeviceToken:)-callback-metoden stadig er fuldt funktionel og den korrekte måde at modtage tokenet på i iOS 13+.
Hvis du ikke modtager tokenet, er det sandsynligvis på grund af:
- Forældret registreringsmetode: Brug af den forældede
registerForRemoteNotificationTypes(som ses i det indledende eksempel) vil ikke fungere korrekt på moderne iOS-versioner. Du skal brugeUNUserNotificationCentertil at anmode om autorisation ogregisterForRemoteNotifications()for at starte processen. - Provisioneringsprofiler og certifikater: Korrekt konfiguration af din app-ID i Apple Developer-portalen med "Push Notifications" aktiveret, og brug af den korrekte provisioneringsprofil (udvikling eller distribution) med et tilknyttet APNs-certifikat (eller Authentication Key), er absolut afgørende. En fejl her vil forhindre APNs i at udstede et token.
- Simulator: Push-notifikationer fungerer ikke på iOS-simulatorer; de kræver en fysisk enhed.
Integration med PubNub for iOS
Når du har modtaget enhedstokenet fra APNs, er processen med at registrere det med PubNub-kanaler meget lig den for Android:
- Registrering: Brug PubNub SDK's metoder til at tilføje enhedstokenet til specifikke kanaler, idet du angiver push-typen som APNs.
- Afsendelse af notifikationer: Når du publicerer en besked via PubNub, skal du inkludere en
pn_apns-payload, der er struktureret i henhold til APNs' krav (f.eks. med etaps-ordbog, der indeholderalert,sound,badgeosv.). PubNub vil derefter videresende notifikationen til APNs, som leverer den til de registrerede iOS-enheder.
Bedste Praksis og Fejlfinding
Implementering af push-notifikationer kan være kompleks, men ved at følge bedste praksis kan du sikre en mere robust og pålidelig løsning.
- Cache altid enhedstoken og kanalliste: Som nævnt er caching af enhedstokenet og listen over registrerede kanaler afgørende for at håndtere token-opdateringer og undgå race-conditions.
- Håndter token-opdateringer korrekt: Sørg for, at din app er i stand til at opdage og reagere på nye enhedstokens ved at opdatere PubNub-registreringerne.
- Grundig test: Test notifikationer på forskellige enheder og OS-versioner for at sikre ensartet adfærd. Brug PubNubs fejlfindingskanaler og værktøjer.
- Sikkerhed: Følg princippet om mindste privilegium, især når du konfigurerer Firebase-tjenestekonti.
- Fejlfinding af iOS-registrering: Hvis du har problemer med at få et enhedstoken på iOS, skal du dobbelttjekke:
- Om push-notifikationer er aktiveret for dit app-ID i Apple Developer-portalen.
- Om din provisioneringsprofil og APNs-certifikat (eller Authentication Key) er korrekt konfigureret og matchende.
- Om du tester på en fysisk enhed, ikke en simulator.
- Om du bruger
UNUserNotificationCentertil anmodning om autorisation ogregisterForRemoteNotifications().
Sammenligningstabel: FCM vs. APNs
Selvom både FCM og APNs tjener samme formål – at levere push-notifikationer – er der nogle grundlæggende forskelle i deres økosystemer og konfiguration.
| Funktion | Firebase Cloud Messaging (FCM) | Apple Push Notification service (APNs) |
|---|---|---|
| Primær Platform | Android, Web, iOS (via Firebase SDK) | iOS, macOS, watchOS, tvOS |
| Autentificering | Service Account Key (JSON-fil) | Authentication Key (.p8-fil) eller Certifikater (.p12) |
| Payload Struktur | JSON (PubNub bruger pn_fcm) | JSON (PubNub bruger pn_apns med aps-ordbog) |
| Push-Type | Notifikationsbeskeder (vises direkte) og Databeskeder (håndteres af appen) | Alert, Sound, Badge, Content-available (baggrundshentning) |
| Leveringsgaranti | Bedste indsats, men forsøger at levere | Bedste indsats, men forsøger at levere |
Ofte Stillede Spørgsmål (FAQ)
Hvad er et enhedstoken?
Et enhedstoken er en unik, anonym identifikator, der tildeles af en push-notifikationstjeneste (som FCM eller APNs) til en specifik app-installation på en enhed. Dette token gør det muligt for servere at sende målrettede push-notifikationer til netop denne enhed.
Hvorfor ændres mit enhedstoken?
Enhedstokenet kan ændre sig af flere årsager, herunder hvis brugeren geninstallerer appen, gendanner enheden fra en backup, eller hvis push-tjenesten (FCM/APNs) udsteder et nyt token af sikkerhedsmæssige årsager. Din app skal være forberedt på at modtage og håndtere disse opdateringer ved at opdatere dine registreringer hos din push-udbyder (f.eks. PubNub).
Kan jeg sende push-notifikationer til en specifik bruger uden en kanal?
Med PubNub registrerer du enhedstokens på kanaler. Du sender derefter beskeder til disse kanaler, og PubNub videresender dem som push-notifikationer til alle registrerede enheder på kanalen. Så selvom du ikke sender direkte til et token, giver kanalmekanismen dig mulighed for at målrette brugere ved at registrere deres enhedstokens på specifikke bruger- eller gruppekanaler.
Hvad er formålet med pn_exceptions i PubNub payloaden?
pn_exceptions er et felt i PubNub push-payloaden (f.eks. pn_fcm eller pn_apns), der giver dig mulighed for at angive en liste over enhedstokens, der ikke skal modtage den aktuelle push-notifikation. Dette er ofte nyttigt i chat-applikationer, hvor du ikke ønsker, at afsenderen skal modtage en push-notifikation for deres egen besked.
Hvad skal jeg gøre, hvis jeg ikke modtager enhedstoken i iOS 13+?
Hvis du ikke modtager enhedstokenet i iOS 13+ via application(_:didRegisterForRemoteNotificationsWithDeviceToken:), er de mest almindelige årsager:
- Du bruger en forældet registreringsmetode (f.eks.
registerForRemoteNotificationTypes). Opdater tilUNUserNotificationCenterogUIApplication.shared.registerForRemoteNotifications(). - Problemer med din app-ID, provisioneringsprofil eller APNs-certifikat/nøgle i Apple Developer-portalen. Dobbelttjek, at push-notifikationer er aktiveret, og at alle certifikater er gyldige og matchende.
- Du tester på en iOS-simulator, som ikke understøtter push-notifikationer. Du skal bruge en fysisk enhed.
- Du har ikke anmodet om brugerautorisation for notifikationer, eller brugeren har nægtet tilladelse.
Konklusion
Effektiv implementering af push-notifikationer er afgørende for enhver mobilapplikations succes. Ved at forstå processen med at hente og administrere enhedstokens på både Android og iOS, samt hvordan tredjepartsudbydere som PubNub strømliner denne proces, kan du bygge mere engagerende og funktionsrige applikationer. Husk vigtigheden af korrekt Firebase- og APNs-konfiguration, omhyggelig håndtering af enhedstoken-opdateringer og grundig test for at sikre en problemfri brugeroplevelse. Med den rette opsætning er dine push-notifikationer en stærk kanal til at holde dine brugere informerede og forbundet med din app.
Hvis du vil læse andre artikler, der ligner Få Enhedstoken & Push-Notifikationer: Android og iOS, kan du besøge kategorien Mobil.
