What are iOS device push tokens?

Få Enhedstoken & Push-Notifikationer: Android og iOS

18/12/2021

Rating: 3.96 (8772 votes)

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.

Are device tokens unique to the phone-app pairing?
The Device Tokens are NOT unique to the phone-app pairing. They are unique to the phone only. If you have multiple apps with push on the same phone they will all use the same Device Token. The certificate you use to send the notification will dictate which app it goes to. Thanks for the question and the answer, that's useful to know. +1 for each.

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.

Indholdsfortegnelse

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.

  1. Opret et Firebase-projekt: Log ind på Firebase-konsollen og opret et nyt projekt. Følg guiden for at fuldføre oprettelsen.
  2. 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.
  3. 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).
  4. Integrer google-services.json: I dit Android Studio-projekt skal du placere den downloadede google-services.json-fil i rodmappen for dit Android-appmodul. Konfigurer derefter dine Gradle-filer til at bruge google-services Gradle-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:

  1. 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. i onCreate-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 overskrive onNewToken(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 SharedPreferences til 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. En Set er 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, kaldet pn_fcm. Denne struktur er kompatibel med FCM's besked-payload og indeholder nøglefelter som notification (til titel og brødtekst) og android (til Android-specifikke indstillinger som collapse_key eller data).
  • Brugerdefineret metadata: Du kan inkludere brugerdefineret information i notifikationen ved at tilføje et data-felt i android-objektet i pn_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 et pn_exceptions-array i pn_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.

What are iOS device push tokens?
It allows gateways and push notification providers to route messages and ensure the notification is delivered only to the unique app-device combination for which it is intended. iOS device push tokens are strings with 64 hexadecimal symbols.

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 kalde UNUserNotificationCenter.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 en Data-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 bruge UNUserNotificationCenter til at anmode om autorisation og registerForRemoteNotifications() 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 et aps-ordbog, der indeholder alert, sound, badge osv.). 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 UNUserNotificationCenter til anmodning om autorisation og registerForRemoteNotifications().

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.

FunktionFirebase Cloud Messaging (FCM)Apple Push Notification service (APNs)
Primær PlatformAndroid, Web, iOS (via Firebase SDK)iOS, macOS, watchOS, tvOS
AutentificeringService Account Key (JSON-fil)Authentication Key (.p8-fil) eller Certifikater (.p12)
Payload StrukturJSON (PubNub bruger pn_fcm)JSON (PubNub bruger pn_apns med aps-ordbog)
Push-TypeNotifikationsbeskeder (vises direkte) og Databeskeder (håndteres af appen)Alert, Sound, Badge, Content-available (baggrundshentning)
LeveringsgarantiBedste indsats, men forsøger at levereBedste 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:

  1. Du bruger en forældet registreringsmetode (f.eks. registerForRemoteNotificationTypes). Opdater til UNUserNotificationCenter og UIApplication.shared.registerForRemoteNotifications().
  2. 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.
  3. Du tester på en iOS-simulator, som ikke understøtter push-notifikationer. Du skal bruge en fysisk enhed.
  4. 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.

Go up