Skip to content

Alles für WordPress, Webentwicklung — und mehr

📱 Push-benachrichtigungen über Google FCM und PHP senden: Leitfaden 2026

📱 Push-benachrichtigungen über Google FCM und PHP senden: Leitfaden 2026

Sie installieren eine App und vergessen sie einen Tag später. Die Nutzerbindung ist eine der drängendsten Herausforderungen in der mobilen Entwicklung: Ohne einen externen Auslöser denken die Leute schlicht nicht daran, die App erneut zu öffnen.

Push-Benachrichtigungen lösen dieses Problem direkt. Ein kurzes Signal auf dem Sperrbildschirm, und der Nutzer kehrt zu Ihrem Inhalt oder Ihrer Aktion zurück. Seit Juni 2024 hat Google die veraltete FCM-API-Version samt Server-Key-Authentifizierung vollständig abgeschaltet. Es funktioniert nur noch die HTTP-v1-API mit OAuth 2.0.

Nachfolgend eine Schritt-für-Schritt-Anleitung, um Firebase Cloud Messaging einzurichten und plattformübergreifende Push-Benachrichtigungen per PHP zu versenden: von der Projekterstellung bis zum Empfang von Benachrichtigungen auf Android und iOS.

Was FCM ist und warum die alte API abgeschaltet wurde

💡 Kurzüberblick:

  • Firebase-Projekt anlegen und JSON-Schlüssel beziehen
  • Client-SDK einrichten und FCM-Token beziehen
  • kreait/firebase-php via Composer installieren
  • Push-Benachrichtigung mit einem einzigen Aufruf an ein Topic senden
  • Benachrichtigung innerhalb von 1-3 Sekunden auf dem Gerät empfangen

Firebase Cloud Messaging (FCM) ist der plattformübergreifende Dienst von Google zum Versenden von Benachrichtigungen an Android, iOS und Web. Er ist kostenlos, unterliegt keinen strikten Kontingenten bei der Nachrichtenanzahl und funktioniert über eine einzige Server-API.

Der Vorgänger von FCM, Google Cloud Messaging (GCM), nutzte ein Schema mit Geräteregistrierungs-IDs und einem Server-Key. Entwickler speicherten Tokens in ihrer eigenen Datenbank und versendeten Benachrichtigungen in einer Schleife. FCM führte Topics (thematische Kanäle) ein: Ein Gerät abonniert /topics/news, und der Server sendet eine Nachricht auf einmal an die gesamte Gruppe, ohne Tokens einzeln durchzugehen.

Im Juni 2023 kündigte Google die Abschaffung der alten HTTP-API an, und seit Mitte 2024 ist sie vollständig abgeschaltet. Der alte Endpunkt https://android.googleapis.com/gcm/send nimmt keine Anfragen mehr an. Statt eines Server-Keys benötigen Sie nun ein OAuth-2.0-Token, das aus der JSON-Datei eines Firebase-Dienstkontos bezogen wird. Details zur Migration finden Sie in der offiziellen FCM-Dokumentation.

Beachten Sie, dass die Instance-ID-API (iid.googleapis.com) für die Verwaltung von Topic-Abonnements ebenfalls veraltet ist. Der moderne Ansatz ist das Abonnieren auf Client-Seite über das Firebase-SDK oder die Verwaltung von Abonnements über das Firebase Admin SDK auf dem Server.

Schritt 1: Projekt in der Firebase Console anlegen

Rufen Sie die Firebase Console mit Ihrem Google-Konto auf. Klicken Sie auf „Projekt erstellen", vergeben Sie einen Namen und warten Sie die Initialisierung ab.

Firebase-Projekteinstellungen mit Serverschlüssel

Nachdem das Projekt erstellt wurde, navigieren Sie zu Projekteinstellungen → Dienstkonten. Klicken Sie auf „Neuen privaten Schlüssel generieren", woraufhin eine JSON-Datei mit den Anmeldedaten heruntergeladen wird. Speichern Sie diese in einem geschützten Ordner auf Ihrem Server (außerhalb des Document Root): So bezieht der PHP-Client das OAuth-2.0-Token für die HTTP-v1-API.

Fügen Sie zudem unter Projekteinstellungen → Cloud Messaging die iOS-APNs-Zertifikate hinzu, falls Sie Benachrichtigungen an Apple-Geräte senden möchten. Ohne diesen Schritt funktionieren Push-Benachrichtigungen auf iOS nicht.

Schritt 2: Client-SDK einrichten

Damit der Server weiß, wohin Benachrichtigungen gesendet werden sollen, muss die Client-App einen FCM-Token beziehen und an Ihren Server übermitteln. Die Einrichtung für beide Plattformen ist in der Firebase-Dokumentation beschrieben; hier die Kernpunkte.

IOS

Definieren Sie die Geräte-Registrierungs-URL, den Endpunkt Ihres PHP-Skripts, das den Token entgegennimmt:

Geräteregistrierungs-URL im iOS SDK

Minimale Firebase-SDK-Integration in einer iOS-App:

Beispiel für Firebase SDK-Einrichtung für iOS

Bei jedem Start ruft die App Messaging.messaging().token() auf, bezieht den aktuellen FCM-Token und sendet ihn an Ihre Registrierungs-URL. Der Token kann sich bei einer Neuinstallation der App ändern, speichern Sie ihn daher nicht dauerhaft, sondern aktualisieren Sie ihn bei jedem Start.

Android

Die Logik ist dieselbe: Legen Sie die Server-Endpunkt-URL für die Token-Registrierung fest:

Geräteregistrierungs-URL im Android SDK

Firebase-SDK-Integration unter Android:

Beispiel für Firebase SDK-Einrichtung für Android

Auch unter Android aktualisiert sich der Token bei einer Neuinstallation oder Datenlöschung; berücksichtigen Sie dies beim Entwurf Ihrer serverseitigen Gerätetabelle.

Schritt 3: PHP-Bibliothek installieren und Authentifizierung

Um mit der HTTP-v1-API über PHP zu arbeiten, benötigen Sie eine Bibliothek, die den Bezug des OAuth-2.0-Tokens aus der Dienstkonto-JSON-Datei übernimmt. Die ausgereifteste Option ist Mitte 2026 kreait/firebase-php. Installation via Composer:

1composer require kreait/firebase-php

Die Datei send_push.php mit Client-Initialisierung:

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();

Stellen Sie sicher, dass der Pfad zum JSON-Schlüssel absolut ist und die Datei vom PHP-Prozess lesbar ist. Platzieren Sie den JSON-Schlüssel niemals in einem öffentlichen Website-Ordner; bei direktem Zugriff über einen Browser erhielte ein Angreifer vollen Zugriff auf Ihr Firebase-Projekt.

Schritt 4: Benachrichtigung via HTTP-v1-API senden

Nun zum eigentlichen Sendemechanismus. Der folgende Code entnimmt Titel und Text der Benachrichtigung aus einem Formular, baut die Nutzlast auf und sendet sie an das angegebene Topic:

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}

Erläuterung der Kernpunkte:

  • CloudMessage::withTarget('topic', $topic) sendet an ein Topic; um an ein bestimmtes Gerät zu senden, ersetzen Sie dies durch withTarget('token', 'DEVICE_TOKEN').
  • ->withData([...]) enthält benutzerdefinierte Daten für Deep Linking: Beim Antippen der Benachrichtigung öffnet die App einen bestimmten Bildschirm (in diesem Beispiel eine Modellseite).
  • ->withHighestPossiblePriority() setzt hohe Priorität, und die Benachrichtigung wird sofort zugestellt; für stille Hintergrundereignisse verwenden Sie normal.
  • MessagingException fängt Validierungs-, Authentifizierungs- und Netzwerkfehler ab; umschließen Sie den Sendeaufruf stets mit try/catch.

Dieser Code ersetzt vollständig die veraltete Kombination aus curl + Authorization:key=SERVER_KEY + dem Endpunkt gcm/send, die 2024 den Betrieb eingestellt hat.

Formular für manuellen Versand

Für schnelle Tests hier eine einfache HTML-Oberfläche:

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>

In der Praxis ist ein solches Formular nur ein Debugging-Werkzeug. In einem Produktivprojekt wird der Aufruf $messaging->send() in die Geschäftslogik integriert: Einen Nachrichtenartikel veröffentlichen → Abonnenten des Topics /topics/news benachrichtigen.

Push-Benachrichtigungsformular im Admin-Panel

Schritt 5: Empfang der Benachrichtigung prüfen

Nach dem Senden erscheint die Benachrichtigung innerhalb von 1-3 Sekunden auf dem Sperrbildschirm. Titel und Text entsprechen den an Notification::create() übergebenen Werten. Das Antippen der Benachrichtigung startet die App, und über die Daten-Nutzlast übergeben Sie Parameter, um zum entsprechenden Bildschirm zu navigieren.

Push-Benachrichtigung auf dem Telefonbildschirm

Topics ermöglichen eine flexible Zielgruppensegmentierung. Möchten Sie Nutzer nach Plattform trennen? Erstellen Sie /topics/ios-news und /topics/android-news. Nach Geografie? /topics/users-europe. Nach Sprache? /topics/lang-ru. Kombinieren Sie beliebig: Topics sind kostenlos und in der Anzahl unbegrenzt.

Push-Benachrichtigungszustellungsergebnis via FCM

Video: Komplette Einrichtungsanleitung

Dieses 20-minütige Tutorial zeigt die durchgängige Firebase-Cloud-Messaging-Integration mit einem PHP-Backend: von der Projekterstellung in der Console bis zum Senden und Empfangen einer Push-Benachrichtigung auf einem echten Gerät.

⁉️🤔 Häufig gestellte Fragen

Muss ich für Firebase Cloud Messaging bezahlen?

FCM ist vollständig kostenlos. Google erhebt keine Gebühren für das Senden von Push-Benachrichtigungen und legt keine strikten Kontingente für die Nachrichtenanzahl fest. Bei sehr hohen Volumina (Millionen pro Stunde) kann eine Drosselung einsetzen, aber für eine typische App mit einer Zielgruppe von bis zu Hunderttausenden Nutzern gibt es keine Einschränkungen.

Ist die Nutzung der Bibliothek kreait/firebase-php zwingend erforderlich?

Nein, aber es ist das am besten gepflegte PHP-Paket für Firebase, Stand Mitte 2026. Die Alternative ist die direkte Arbeit mit der HTTP-v1-API via Guzzle und google/auth für den Bezug des OAuth-2.0-Tokens. In diesem Fall müssen Sie jedoch die Token-Lebensdauer manuell verwalten, das Token erneuern und Authentifizierungsfehler nachverfolgen. kreait/firebase-php übernimmt dies automatisch.

Wie sende ich Benachrichtigungen an ein bestimmtes Gerät statt an ein ganzes Topic?

Ersetzen Sie withTarget('topic', $topic) durch withTarget('token', $deviceToken), wobei $deviceToken der von der Client-App empfangene FCM-Token ist. Der Token ist eindeutig für jede App-Installation auf einem bestimmten Gerät.

Was tun, wenn Benachrichtigungen auf iOS nicht ankommen?

Prüfen Sie drei Dinge: (1) Das APNs-Zertifikat ist in den Firebase-Projekteinstellungen hochgeladen (Cloud Messaging → Apple-App-Konfiguration), (2) der Schlüssel FirebaseAppDelegateProxyEnabled mit dem Wert YES ist in der Info.plist hinzugefügt, (3) das Gerät befindet sich nicht im Modus „Nicht stören". Beachten Sie auch, dass der iOS-Simulator keine Push-Benachrichtigungen empfängt; testen Sie nur auf einem physischen Gerät.

Kann ich eine stille Benachrichtigung senden, ohne sie dem Nutzer anzuzeigen?

Ja, verwenden Sie eine reine Datennachricht: Übergeben Sie nur ->withData([...]) ohne ->withNotification(...). Eine solche Nachricht weckt die App im Hintergrund zur Datensynchronisation, zeigt aber keine visuelle Benachrichtigung an. Fügen Sie unter iOS den Header content-available mit dem Wert 1 für die Hintergrundverarbeitung hinzu.

Was sich geändert hat und wie Sie vermeiden, dass Benachrichtigungen 2026 ausfallen

Google hat die FCM-Sicherheitsanforderungen schrittweise verschärft. Die wesentliche Änderung ist die Abschaltung der alten HTTP-API mit Server-Key-Authentifizierung. Falls Ihr PHP-Code noch https://android.googleapis.com/gcm/send oder https://fcm.googleapis.com/fcm/send mit einem Authorization: key=...-Header aufruft, werden seit Mitte 2024 keine Benachrichtigungen mehr zugestellt.

Der Umstieg auf die HTTP-v1-API mit OAuth 2.0 über ein Dienstkonto löst dieses Problem vollständig. Die Bibliothek kreait/firebase-php übernimmt den Bezug und die Erneuerung des Tokens, sodass Sie keine Aktualisierungslogik manuell schreiben müssen. Speichern Sie den JSON-Schlüssel des Dienstkontos außerhalb des Document Root und schließen Sie ihn via .gitignore aus Ihrem Repository aus.

Mit Topics und Daten-Nutzlasten erhalten Sie flexibles Routing: Nachrichten gehen an /topics/news-Abonnenten, persönliche Nachrichten gehen per Token, und stille Synchronisation erfolgt über reine Datennachrichten. All diese Funktionalität ist kostenlos und funktioniert auf Android, iOS und Web aus einem einzigen PHP-Skript heraus.

Prüfen Sie jetzt den aktuellen Code zum Senden von Benachrichtigungen in Ihrem Projekt. Falls er noch Authorization: key= verwendet, stellen Sie auf die HTTP-v1-API um. Stellen Sie Fragen und Hinweise zur Integration gern in den Kommentaren.