Skip to content

Alt om WordPress, webutvikling — og mer til

📱 Send push-varsler via Google FCM og PHP: guide for 2026

📱 Send push-varsler via Google FCM og PHP: guide for 2026

Du installerer en app, og en dag senere har du glemt den. Brukerretensjon er en av de mest presserende utfordringene innen mobilutvikling: uten en ekstern trigger vil folk rett og slett ikke huske å åpne appen igjen.

Push-varsler løser dette problemet direkte. Ett kort signal på låseskjermen, og brukeren returnerer til innholdet eller handlingen din. Siden juni 2024 har Google fullstendig stengt den gamle FCM-API-versjonen sammen med autentisering via servernøkkel. Bare HTTP v1 API med OAuth 2.0 fungerer nå.

Nedenfor følger en trinnvis guide for å sette opp Firebase Cloud Messaging og sende push-varsler på tvers av plattformer via PHP: fra å opprette et prosjekt til å motta varsler på Android og iOS.

Hva er FCM og hvorfor den gamle API-en ble stengt

💡 Rask oversikt:

  • Opprett et Firebase-prosjekt og få en JSON-nøkkel
  • Sett opp klient-SDK-et og innhent et FCM-token
  • Installer kreait/firebase-php via Composer
  • Send et push-varsel til et emne med ett enkelt kall
  • Motta varselet på enheten i løpet av 1-3 sekunder

Firebase Cloud Messaging (FCM) er Googles plattformuavhengige tjeneste for å sende varsler til Android, iOS og web. Den er gratis, har ingen strenge kvoter på antall meldinger, og fungerer gjennom ett enkelt server-API.

FCMs forgjenger, Google Cloud Messaging (GCM), brukte et opplegg med enhetsregistrerings-ID-er og en servernøkkel. Utviklere lagret tokens i sin egen database og sendte varsler i en løkke. FCM la til emner (tematiske kanaler): en enhet abonnerer på /topics/news, og serveren sender en melding til hele gruppen samtidig uten å iterere gjennom tokens.

I juni 2023 kunngjorde Google utfasingen av det gamle HTTP API-et, og fra midten av 2024 har det blitt fullstendig stengt. Det gamle endepunktet https://android.googleapis.com/gcm/send aksepterer ikke lenger forespørsler. I stedet for en servernøkkel trenger du nå et OAuth 2.0-token hentet fra JSON-filen til en Firebase-tjenestekonto. Detaljer om migrering er tilgjengelige i den offisielle FCM-dokumentasjonen.

Merk at Instance ID API-et (iid.googleapis.com) for administrasjon av emneabonnementer også er utfaset. Den moderne tilnærmingen er å abonnere på klientsiden via Firebase SDK eller administrere abonnementer gjennom Firebase Admin SDK på serveren.

Trinn 1: Opprette et prosjekt i Firebase Console

Gå til Firebase Console under Google-kontoen din. Klikk «Opprett prosjekt», angi et navn og vent på initialisering.

Firebase-prosjektinnstillinger med servernøkkel

Etter at du har opprettet prosjektet, gå til Prosjektinnstillinger → Tjenestekontoer. Klikk «Generer ny privat nøkkel», så lastes en JSON-fil med legitimasjon ned. Lagre den i en beskyttet mappe på serveren din (utenfor dokumentroten): dette er hvordan PHP-klienten vil hente OAuth 2.0-tokenet for HTTP v1 API-et.

Også i Prosjektinnstillinger → Cloud Messaging, legg til iOS APNs-sertifikater hvis du planlegger å sende varsler til Apple-enheter. Uten dette trinnet vil ikke push-varsler fungere på iOS.

Trinn 2: Sette opp klient-SDK-et

For at serveren skal vite hvor den skal sende varsler, må klientappen innhente et FCM-token og sende det til serveren din. Oppsett for begge plattformer er dekket i Firebase-dokumentasjonen; her er nøkkelpunktene.

IOS

Definer registrerings-URL-en, endepunktet til PHP-skriptet ditt som aksepterer tokenet:

URL for enhetsregistrering i iOS SDK

Minimal Firebase SDK-integrasjon i en iOS-app:

Eksempel på Firebase SDK-oppsett for iOS

Ved hver oppstart kaller appen Messaging.messaging().token(), henter det gjeldende FCM-tokenet og sender det til registrerings-URL-en din. Tokenet kan endres når appen installeres på nytt, så ikke lagre det permanent; oppdater det ved hver oppstart.

Android

Logikken er den samme: angi serverens endepunkt-URL for tokenregistrering:

URL for enhetsregistrering i Android SDK

Firebase SDK-integrasjon på Android:

Eksempel på Firebase SDK-oppsett for Android

På Android oppdateres tokenet også når appen installeres på nytt eller data slettes; ha dette i bakhodet når du utformer serverens enhetstabell.

Trinn 3: Installere PHP-biblioteket og autentisering

For å jobbe med HTTP v1 API-et gjennom PHP trenger du et bibliotek som håndterer innhenting av OAuth 2.0-tokenet fra tjenestekontoens JSON-fil. Det mest modne alternativet per midten av 2026 er kreait/firebase-php. Installasjon via Composer:

1composer require kreait/firebase-php

Filen send_push.php med klientinitialisering:

1<?php
2require_once __DIR__ . '/vendor/autoload.php';
3
4use Kreait\Firebase\Factory;
5use Kreait\Firebase\Messaging\CloudMessage;
6use Kreait\Firebase\Messaging\Notification;
7
8$factory = (new Factory)
9 ->withServiceAccount('/путь/к/serviceAccountKey.json');
10
11$messaging = $factory->createMessaging();

Kontroller at banen til JSON-nøkkelen er absolutt og at filen er lesbar for PHP-prosessen. Plasser aldri JSON-nøkkelen i en offentlig nettsidemappe; hvis den aksesseres direkte via en nettleser, vil en angriper få full tilgang til Firebase-prosjektet ditt.

Trinn 4: Sende et varsel via HTTP v1 API

Nå til selve sendemekanismen. Koden nedenfor henter varseltittel og -tekst fra et skjema, bygger nyttelasten og sender den til det angitte emnet:

1<?php
2require_once __DIR__ . '/vendor/autoload.php';
3
4use Kreait\Firebase\Factory;
5use Kreait\Firebase\Messaging\CloudMessage;
6use Kreait\Firebase\Messaging\Notification;
7
8$factory = (new Factory)
9 ->withServiceAccount('/путь/к/serviceAccountKey.json');
10
11$messaging = $factory->createMessaging();
12
13$topic = 'my-app';
14
15$notification = Notification::create(
16 $_POST['title'] ?? 'Новое уведомление',
17 $_POST['summary'] ?? ''
18);
19
20$message = CloudMessage::withTarget('topic', $topic)
21 ->withNotification($notification)
22 ->withData([
23 'action' => 'models',
24 'model_id' => '2701',
25 ])
26 ->withHighestPossiblePriority();
27
28try {
29 $result = $messaging->send($message);
30 echo "Уведомление отправлено. ID: " . json_encode($result);
31} catch (\Kreait\Firebase\Exception\MessagingException $e) {
32 echo "Ошибка отправки: " . $e->getMessage();
33}

Nøkkelpunkter forklart:

  • CloudMessage::withTarget('topic', $topic) sender til et emne; for å sende til en spesifikk enhet, erstatt det med withTarget('token', 'DEVICE_TOKEN').
  • ->withData([...]) inneholder egendefinerte data for dyp lenking: når du trykker på varselet, åpner appen et spesifikt skjermbilde (i dette eksempelet en modellside).
  • ->withHighestPossiblePriority() setter høy prioritet, og varselet leveres umiddelbart; for stille bakgrunnshendelser, bruk normal.
  • MessagingException fanger opp validerings-, autentiserings- og nettverksfeil; pakk alltid send-kallet inn i try/catch.

Denne koden erstatter fullstendig den utdaterte kombinasjonen av curl + Authorization:key=SERVER_KEY + gcm/send-endepunktet, som sluttet å fungere i 2024.

Skjema for manuell sending

For rask testing, her er et enkelt HTML-grensesnitt:

1<form method="POST" action="send_push.php">
2 <input type="text" name="title" placeholder="Заголовок уведомления" required>
3 <textarea name="summary" placeholder="Текст уведомления" required></textarea>
4 <button type="submit">Отправить push</button>
5</form>

I praksis er et slikt skjema bare et feilsøkingsverktøy. I et produksjonsprosjekt er kallet $messaging->send() integrert i forretningslogikken: publiser en nyhetssak → varsle abonnenter på emnet /topics/news.

Skjema for sending av pushvarsler i adminpanelet

Trinn 5: Verifisere mottak av varsel

Etter sending vises varselet på låseskjermen i løpet av 1-3 sekunder. Tittelen og brødteksten er de som ble sendt til Notification::create(). Ved å trykke på varselet startes appen, og gjennom datanyttelasten sender du parametere for å navigere til riktig skjermbilde.

Pushvarsel på telefonskjermen

Emner gir fleksibel målgruppesegmentering. Ønsker du å skille brukere etter plattform? Opprett /topics/ios-news og /topics/android-news. Etter geografi? /topics/users-europe. Etter språk? /topics/lang-ru. Kombiner som du vil: emner er gratis og har ingen begrensninger på antall.

Leveringsresultat for pushvarsel via FCM

Video: komplett oppsettgjennomgang

Denne 20-minutters veiledningen viser ende-til-ende Firebase Cloud Messaging-integrasjon med en PHP-backend: fra å opprette et prosjekt i konsollen til å sende og motta et push-varsel på en ekte enhet.

⁉️🤔 Ofte stilte spørsmål

Må jeg betale for Firebase Cloud Messaging?

FCM er helt gratis. Google tar ikke betalt for å sende push-varsler og pålegger ikke strenge kvoter på antall meldinger. Ved svært høye volumer (millioner per time) kan struping slå inn, men for en typisk app med et publikum på opptil hundretusenvis av brukere er det ingen begrensninger.

Er det obligatorisk å bruke biblioteket kreait/firebase-php?

Nei, men det er den best vedlikeholdte PHP-pakken for Firebase per midten av 2026. Alternativet er å jobbe direkte med HTTP v1 API-et via Guzzle og google/auth for å innhente OAuth 2.0-tokenet. I så fall må du imidlertid manuelt administrere tokenets levetid, fornye det og spore autentiseringsfeil. kreait/firebase-php håndterer dette automatisk.

Hvordan sender jeg varsler til en spesifikk enhet i stedet for et helt emne?

Erstatt withTarget('topic', $topic) med withTarget('token', $deviceToken), der $deviceToken er FCM-tokenet mottatt fra klientappen. Tokenet er unikt for hver appinstallasjon på en spesifikk enhet.

Hva bør jeg gjøre hvis varsler ikke når frem til iOS?

Sjekk tre ting: (1) APNs-sertifikatet er lastet opp i Firebase-prosjektinnstillingene (Cloud Messaging → Apple-appkonfigurasjon), (2) nøkkelen FirebaseAppDelegateProxyEnabled med verdien YES er lagt til i Info.plist, (3) enheten er ikke i Ikke forstyrr-modus. Merk også at iOS-simulatoren ikke mottar push-varsler; test bare på en fysisk enhet.

Kan jeg sende et stille varsel uten å vise det til brukeren?

Ja, bruk en melding kun med data: send bare ->withData([...]) uten ->withNotification(...). En slik melding vekker appen i bakgrunnen for datasynkronisering, men viser ikke et visuelt varsel. På iOS, legg til headeren content-available med verdien 1 for bakgrunnsprosessering.

Hva har endret seg og hvordan unngå ødelagte varsler i 2026

Google har gradvis strammet inn FCMs sikkerhetskrav. Hovedendringen er stengingen av det gamle HTTP API-et med autentisering via servernøkkel. Hvis PHP-koden din fortsatt kaller https://android.googleapis.com/gcm/send eller https://fcm.googleapis.com/fcm/send med en Authorization: key=...-header, har varsler ikke blitt sendt siden midten av 2024.

Å bytte til HTTP v1 API med OAuth 2.0 via en tjenestekonto løser dette problemet fullstendig. Biblioteket kreait/firebase-php håndterer innhenting og fornyelse av tokenet, slik at du ikke trenger å skrive fornyelseslogikk manuelt. Oppbevar tjenestekontoens JSON-nøkkel utenfor dokumentroten og ekskluder den fra repositoryet ditt via .gitignore.

Med emner og datanyttelaster får du fleksibel ruting: nyheter går til /topics/news-abonnenter, personlige meldinger går per token, og stille synkronisering skjer gjennom meldinger kun med data. All denne funksjonaliteten er gratis og fungerer på Android, iOS og web fra ett enkelt PHP-skript.

Sjekk den gjeldende koden for varselsending i prosjektet ditt akkurat nå. Hvis den fortsatt bruker Authorization: key=, oppdater til HTTP v1 API. Legg inn spørsmål og integrasjonsnyanser i kommentarene.