
📱 Skicka pushnotiser via Google FCM och PHP: guide för 2026
Du installer en app, och en dag senare har du glömt bort den. Användarretention är en av de största utmaningarna inom mobilutveckling: utan en extern trigger kommer folk helt enkelt inte ihåg att öppna appen igen.
Pushnotiser löser detta problem direkt. En kort signal på låsskärmen, och användaren återvänder till ditt innehåll eller din handling. Sedan juni 2024 har Google helt stängt ner den gamla FCM-API-versionen tillsammans med autentisering via servernyckel. Endast HTTP v1 API med OAuth 2.0 fungerar nu.
Nedan följer en steg-för-steg-guide för att sätta upp Firebase Cloud Messaging och skicka plattformsoberoende pushnotiser via PHP: från att skapa ett projekt till att ta emot notiser på Android och iOS.
Vad är FCM och varför den gamla API:n stängdes ner
💡 Snabb översikt:
- Skapa ett Firebase-projekt och hämta en JSON-nyckel
- Sätt upp klient-SDK:n och erhåll en FCM-token
- Installera
kreait/firebase-phpvia Composer - Skicka en pushnotis till ett ämne med ett enda anrop
- Ta emot notisen på enheten inom 1-3 sekunder
Firebase Cloud Messaging (FCM) är Googles plattformsoberoende tjänst för att skicka notiser till Android, iOS och webb. Den är gratis, har inga strikta kvoter för antal meddelanden och fungerar via ett enda server-API.
FCM:s föregångare, Google Cloud Messaging (GCM), använde ett schema med enhetsregistrerings-ID:n och en servernyckel. Utvecklare lagrade tokens i sin egen databas och skickade notiser i en loop. FCM lade till ämnen (tematiska kanaler): en enhet prenumererar på /topics/news, och servern skickar ett meddelande till hela gruppen på en gång utan att iterera genom tokens.
I juni 2023 meddelade Google att den gamla HTTP API:n skulle fasas ut, och från mitten av 2024 har den stängts ner helt. Den gamla slutpunkten https://android.googleapis.com/gcm/send tar inte längre emot förfrågningar. Istället för en servernyckel behöver du nu en OAuth 2.0-token som hämtas från JSON-filen för ett Firebase-tjänstkonto. Information om migrering finns i den officiella FCM-dokumentationen.
Observera att Instance ID API:t (iid.googleapis.com) för att hantera ämnesprenumerationer också har fasats ut. Det moderna tillvägagångssättet är att prenumerera på klientsidan via Firebase SDK eller hantera prenumerationer via Firebase Admin SDK på servern.
Steg 1: Skapa ett projekt i Firebase Console
Gå till Firebase Console med ditt Google-konto. Klicka på "Create a project", ange ett namn och vänta på initieringen.

Efter att du har skapat projektet, gå till Project Settings → Service Accounts. Klicka på "Generate new private key" så laddas en JSON-fil med autentiseringsuppgifter ner. Spara den i en skyddad mapp på din server (utanför document root): det är så här PHP-klienten kommer att hämta OAuth 2.0-token för HTTP v1 API:n.
Lägg även till iOS APNs-certifikat under Project Settings → Cloud Messaging om du planerar att skicka notiser till Apple-enheter. Utan detta steg fungerar inte pushnotiser på iOS.
Steg 2: Sätta upp klient-SDK:n
För att servern ska veta vart notiserna ska skickas måste klientappen hämta en FCM-token och skicka den till din server. Konfigurationen för båda plattformarna täcks i Firebases dokumentation; här är de viktigaste punkterna.
IOS
Definiera enhetens registrerings-URL, slutpunkten för ditt PHP-skript som tar emot token:
Minimal Firebase SDK-integration i en iOS-app:

Vid varje uppstart anropar appen Messaging.messaging().token(), hämtar den aktuella FCM-token och skickar den till din registrerings-URL. Token kan ändras när appen ominstalleras, så spara den inte permanent; uppdatera den vid varje uppstart.
Android
Logiken är densamma: ange server-slutpunktens URL för token-registrering:

Firebase SDK-integration på Android:

På Android uppdateras token också när appen ominstalleras eller data rensas; ha detta i åtanke när du utformar serverns enhetstabell.
Steg 3: Installera PHP-biblioteket och autentisering
För att arbeta med HTTP v1 API:n via PHP behöver du ett bibliotek som hanterar hämtning av OAuth 2.0-token från tjänstkontots JSON-fil. Det mest mogna alternativet från mitten av 2026 är kreait/firebase-php. Installation via Composer:
1 composer require kreait/firebase-php
Filen send_push.php med klientinitiering:
1 <?php 2 require_once __DIR__ . '/vendor/autoload.php'; 3 4 use Kreait\Firebase\Factory; 5 use Kreait\Firebase\Messaging\CloudMessage; 6 use Kreait\Firebase\Messaging\Notification; 7 8 $factory = (new Factory) 9 ->withServiceAccount('/путь/к/serviceAccountKey.json'); 10 11 $messaging = $factory->createMessaging();
Kontrollera att sökvägen till JSON-nyckeln är absolut och att filen är läsbar av PHP-processen. Placera aldrig JSON-nyckeln i en publik webbplatsmapp; om den nås direkt via en webbläsare skulle en angripare få full åtkomst till ditt Firebase-projekt.
Steg 4: Skicka en notis via HTTP v1 API
Nu till själva sändningsmekanismen. Koden nedan hämtar notisens titel och text från ett formulär, bygger upp datanyttolasten och skickar den till det angivna ämnet:
1 <?php 2 require_once __DIR__ . '/vendor/autoload.php'; 3 4 use Kreait\Firebase\Factory; 5 use Kreait\Firebase\Messaging\CloudMessage; 6 use 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 28 try { 29 $result = $messaging->send($message); 30 echo "Уведомление отправлено. ID: " . json_encode($result); 31 } catch (\Kreait\Firebase\Exception\MessagingException $e) { 32 echo "Ошибка отправки: " . $e->getMessage(); 33 }
Viktiga punkter förklarade:
CloudMessage::withTarget('topic', $topic)skickar till ett ämne; för att skicka till en specifik enhet, ersätt det medwithTarget('token', 'DEVICE_TOKEN').->withData([...])innehåller anpassad data för djuplänkning: när användaren trycker på notisen öppnar appen en specifik skärm (i detta exempel en modellsida).->withHighestPossiblePriority()sätter hög prioritet, och notisen levereras omedelbart; för tysta bakgrundshändelser, användnormal.MessagingExceptionfångar validerings-, autentiserings- och nätverksfel; omslut alltid sändningsanropet i try/catch.
Denna kod ersätter helt den föråldrade kombinationen av curl + Authorization:key=SERVER_KEY + slutpunkten gcm/send, som slutade fungera 2024.
Formulär för manuell sändning
För snabb testning finns här ett enkelt HTML-gränssnitt:
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 praktiken är ett sådant formulär bara ett felsökningsverktyg. I ett produktionsprojekt integreras anropet $messaging->send() i affärslogiken: publicera en nyhet → meddela prenumeranter på ämnet /topics/news.

Steg 5: Verifiera mottagning av notis
Efter sändning visas notisen på låsskärmen inom 1-3 sekunder. Titeln och brödtexten är de som skickades till Notification::create(). När användaren trycker på notisen startas appen, och via datanyttolasten skickar du parametrar för att navigera till lämplig skärm.

Ämnen ger flexibel målgruppssegmentering. Vill du separera användare efter plattform? Skapa /topics/ios-news och /topics/android-news. Efter geografi? /topics/users-europe. Efter språk? /topics/lang-ru. Kombinera hur du vill: ämnen är gratis och har inga begränsningar i antal.

Video: komplett genomgång av installationen
Denna 20-minuters handledning visar end-to-end-integration av Firebase Cloud Messaging med en PHP-backend: från att skapa ett projekt i konsolen till att skicka och ta emot en pushnotis på en riktig enhet.
⁉️🤔 Vanliga frågor
Måste jag betala för Firebase Cloud Messaging?
FCM är helt gratis. Google tar inte betalt för att skicka pushnotiser och inför inga strikta kvoter för antal meddelanden. Vid mycket höga volymer (miljoner per timme) kan strypning aktiveras, men för en typisk app med en publik på upp till hundratusentals användare finns det inga begränsningar.
Är det obligatoriskt att använda biblioteket kreait/firebase-php?
Nej, men det är det mest välunderhållna PHP-paketet för Firebase från mitten av 2026. Alternativet är att arbeta direkt med HTTP v1 API:n via Guzzle och
google/authför att hämta OAuth 2.0-token. I så fall måste du dock manuellt hantera tokenens livslängd, uppdatera den och spåra autentiseringsfel.kreait/firebase-phphanterar detta automatiskt.
Hur skickar jag notiser till en specifik enhet istället för ett helt ämne?
Ersätt
withTarget('topic', $topic)medwithTarget('token', $deviceToken), där$deviceTokenär den FCM-token som mottagits från klientappen. Token är unik för varje appinstallation på en specifik enhet.
Vad ska jag göra om notiser inte når iOS?
Kontrollera tre saker: (1) APNs-certifikatet är uppladdat i Firebase-projektinställningarna (Cloud Messaging → Apple app configuration), (2) nyckeln
FirebaseAppDelegateProxyEnabledmed värdetYESär tillagd iInfo.plist, (3) enheten inte är i Stör ej-läge. Observera också att iOS-simulatorn inte tar emot pushnotiser; testa endast på en fysisk enhet.
Kan jag skicka en tyst notis utan att visa den för användaren?
Ja, använd ett data-only-meddelande: skicka endast
->withData([...])utan->withNotification(...). Ett sådant meddelande väcker appen i bakgrunden för datasynkronisering men visar ingen visuell notis. På iOS, lägg till headerncontent-availablemed värdet1för bakgrundsbearbetning.
Vad har förändrats och hur du undviker att notiserna slutar fungera 2026
Google har successivt skärpt FCM:s säkerhetskrav. Den största förändringen är nedstängningen av den gamla HTTP API:n med autentisering via servernyckel. Om din PHP-kod fortfarande anropar https://android.googleapis.com/gcm/send eller https://fcm.googleapis.com/fcm/send med en Authorization: key=...-header, har notiser inte gått ut sedan mitten av 2024.
Att byta till HTTP v1 API:n med OAuth 2.0 via ett tjänstkonto löser detta problem helt. Biblioteket kreait/firebase-php hanterar hämtning och uppdatering av token, så du behöver inte skriva uppdateringslogik manuellt. Förvara tjänstkontots JSON-nyckel utanför document root och exkludera den från ditt repository via .gitignore.
Med ämnen och datanyttolaster får du flexibel routing: nyheter går till prenumeranter på /topics/news, personliga meddelanden går via token, och tyst synkronisering sker genom data-only-meddelanden. All denna funktionalitet är gratis och fungerar på Android, iOS och webb från ett enda PHP-skript.
Kontrollera den aktuella koden för att skicka notiser i ditt projekt just nu. Om den fortfarande använder Authorization: key=, uppdatera till HTTP v1 API:n. Ställ eventuella frågor och integrationsnyanser i kommentarerna.



