Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

📱 Push-ilmoitusten lähetys Google FCM:n ja PHP:n avulla: 2026 opas

📱 Push-ilmoitusten lähetys Google FCM:n ja PHP:n avulla: 2026 opas

Asennat sovelluksen, ja päivää myöhemmin unohdat sen. Käyttäjien pysyvyys on yksi mobiilikehityksen polttavimmista haasteista: ilman ulkoista herätettä ihmiset eivät yksinkertaisesti muista avata sovellusta uudelleen.

Push-ilmoitukset ratkaisevat tämän ongelman suoraan. Yksi lyhyt signaali lukitusnäytöllä, ja käyttäjä palaa sisältösi tai toimintosi pariin. Kesäkuusta 2024 lähtien Google on sulkenut vanhan FCM-API:n version ja palvelinavainten todennuksen kokonaan. Vain HTTP v1 -API OAuth 2.0:lla toimii enää.

Alla on vaiheittainen opas Firebase Cloud Messagingin käyttöönottoon ja alustariippumattomien push-ilmoitusten lähettämiseen PHP:llä: projektin luomisesta ilmoitusten vastaanottamiseen Androidilla ja iOS:llä.

Mikä FCM on ja miksi vanha API suljettiin

💡 Pikakatsaus:

  • Luo Firebase-projekti ja hanki JSON-avain
  • Määritä client SDK ja hanki FCM-token
  • Asenna kreait/firebase-php Composerin kautta
  • Lähetä push-ilmoitus aiheeseen yhdellä kutsulla
  • Vastaanota ilmoitus laitteella 1-3 sekunnissa

Firebase Cloud Messaging (FCM) on Googlen alustariippumaton palvelu ilmoitusten lähettämiseen Androidille, iOS:lle ja webille. Se on ilmainen, siinä ei ole tiukkoja viestimäärien kiintiöitä, ja se toimii yhden palvelin-API:n kautta.

FCM:n edeltäjä, Google Cloud Messaging (GCM), käytti mallia, jossa oli laitteiden rekisteröintitunnukset ja palvelinavain. Kehittäjät tallensivat tokenit omaan tietokantaansa ja lähettivät ilmoituksia silmukassa. FCM toi mukanaan aiheet (temaattiset kanavat): laite tilaa aiheen /topics/news, ja palvelin lähettää viestin koko ryhmälle kerralla ilman tokenien läpikäyntiä.

Kesäkuussa 2023 Google ilmoitti vanhan HTTP API:n vanhentamisesta, ja vuoden 2024 puolivälistä lähtien se on suljettu kokonaan. Vanha päätepiste https://android.googleapis.com/gcm/send ei enää ota vastaan pyyntöjä. Palvelinavaimen sijaan tarvitset nyt OAuth 2.0 -tokenin, joka hankitaan Firebase-palvelutiliin kuuluvasta JSON-tiedostosta. Siirtymätiedot löytyvät virallisesta FCM-dokumentaatiosta.

Huomaa, että Instance ID -API (iid.googleapis.com) aihetilausten hallintaan on myös vanhentunut. Nykyaikainen tapa on tilata aiheet client-puolella Firebase SDK:n kautta tai hallita tilauksia Firebase Admin SDK:lla palvelimella.

Vaihe 1: Projektin luominen Firebase Consolessa

Siirry Firebase Consoleen Google-tililläsi. Klikkaa "Create a project", anna nimi ja odota alustuksen valmistumista.

Firebase-projektin asetukset ja palvelinavain

Projektin luomisen jälkeen siirry kohtaan Project Settings → Service Accounts. Klikkaa "Generate new private key", jolloin JSON-tiedosto, jossa on tunnistetiedot, latautuu. Tallenna se suojattuun kansioon palvelimellasi (document rootin ulkopuolelle): näin PHP-client hankkii OAuth 2.0 -tokenin HTTP v1 -API:a varten.

Lisää myös kohdassa Project Settings → Cloud Messaging iOS APNs -varmenteet, jos aiot lähettää ilmoituksia Applen laitteille. Ilman tätä vaihetta push-ilmoitukset eivät toimi iOS:llä.

Vaihe 2: Client SDK:n määrittäminen

Jotta palvelin tietää, minne ilmoitukset lähetetään, client-sovelluksen on hankittava FCM-token ja lähetettävä se palvelimellesi. Molempien alustojen määritykset on kuvattu Firebasen dokumentaatiossa; tässä ovat keskeiset kohdat.

IOS

Määritä laitteen rekisteröinti-URL, PHP-skriptisi päätepiste, joka ottaa tokenin vastaan:

Laitteen rekisteröinti-URL iOS SDKssa

Firebase SDK:n minimi-integraatio iOS-sovelluksessa:

Esimerkki Firebase SDKn asennuksesta iOSlle

Jokaisella käynnistyskerralla sovellus kutsuu Messaging.messaging().token(), hakee nykyisen FCM-tokenin ja lähettää sen rekisteröinti-URL:lisi. Token voi muuttua, kun sovellus asennetaan uudelleen, joten älä tallenna sitä pysyvästi; päivitä se jokaisella käynnistyskerralla.

Android

Logiikka on sama: aseta palvelimen päätepisteen URL tokenin rekisteröintiä varten:

Laitteen rekisteröinti-URL Android SDKssa

Firebase SDK:n integraatio Androidilla:

Esimerkki Firebase SDKn asennuksesta Androidille

Androidilla token päivittyy myös, kun sovellus asennetaan uudelleen tai tiedot tyhjennetään; ota tämä huomioon palvelimesi laitetietokantaa suunnitellessasi.

Vaihe 3: PHP-kirjaston asennus ja todennus

Jotta voit työskennellä HTTP v1 -API:n kanssa PHP:llä, tarvitset kirjaston, joka hoitaa OAuth 2.0 -tokenin hankkimisen palvelutiliin kuuluvasta JSON-tiedostosta. Kypsin vaihtoehto vuoden 2026 puolivälissä on kreait/firebase-php. Asennus Composerilla:

1composer require kreait/firebase-php

send_push.php-tiedosto clientin alustuksella:

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

Varmista, että polku JSON-avaimeen on absoluuttinen ja tiedosto on PHP-prosessin luettavissa. Älä koskaan sijoita JSON-avainta julkiseen verkkosivukansioon; jos siihen pääsee suoraan selaimen kautta, hyökkääjä saisi täyden pääsyn Firebase-projektiisi.

Vaihe 4: Ilmoituksen lähettäminen HTTP v1 -API:n kautta

Sitten varsinaiseen lähetysmekanismiin. Alla oleva koodi ottaa ilmoituksen otsikon ja tekstin lomakkeesta, rakentaa hyötykuorman ja lähettää sen määritettyyn aiheeseen:

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}

Keskeiset kohdat selitettynä:

  • CloudMessage::withTarget('topic', $topic) lähettää aiheeseen; lähettääksesi tietylle laitteelle, korvaa se muodolla withTarget('token', 'DEVICE_TOKEN').
  • ->withData([...]) sisältää mukautettua dataa syvälinkitystä varten: ilmoitusta napauttamalla sovellus avaa tietyn näytön (tässä esimerkissä mallisivun).
  • ->withHighestPossiblePriority() asettaa korkean prioriteetin, ja ilmoitus toimitetaan välittömästi; hiljaisille taustatapahtumille käytä normal.
  • MessagingException nappaa validointi-, todennus- ja verkkovirheet; kääri lähetyskutsu aina try/catch-lohkoon.

Tämä koodi korvaa täysin vanhentuneen yhdistelmän curl + Authorization:key=SERVER_KEY + gcm/send-päätepiste, joka lakkasi toimimasta vuonna 2024.

Lomake manuaalista lähetystä varten

Nopeaa testausta varten tässä on yksinkertainen HTML-käyttöliittymä:

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>

Käytännössä tällainen lomake on vain virheenkorjaustyökalu. Tuotantoprojektissa $messaging->send()-kutsu on integroitu liiketoimintalogiikkaan: julkaise uutinen → ilmoita /topics/news-aiheen tilaajille.

Push-ilmoituksen lähetyslomake hallintapaneelissa

Vaihe 5: Ilmoituksen vastaanoton varmistaminen

Lähetyksen jälkeen ilmoitus ilmestyy lukitusnäytölle 1-3 sekunnissa. Otsikko ja leipäteksti ovat ne, jotka välitettiin Notification::create()-kutsulle. Ilmoituksen napauttaminen käynnistää sovelluksen, ja data-hyötykuorman kautta välität parametrit oikeaan näyttöön siirtymiseksi.

Push-ilmoitus puhelimen näytöllä

Aiheet tarjoavat joustavan yleisön segmentoinnin. Haluatko erotella käyttäjät alustan mukaan? Luo /topics/ios-news ja /topics/android-news. Maantieteen mukaan? /topics/users-europe. Kielen mukaan? /topics/lang-ru. Yhdistele miten haluat: aiheet ovat ilmaisia, eikä niiden määrälle ole rajoituksia.

Push-ilmoituksen toimitusraportti FCMn kautta

Video: täydellinen asennuksen läpikäynti

Tämä 20 minuutin opas näyttää Firebase Cloud Messagingin kokonaisvaltaisen integroinnin PHP-backendin kanssa: projektin luomisesta konsolissa push-ilmoituksen lähettämiseen ja vastaanottamiseen oikealla laitteella.

⁉️🤔 Usein kysytyt kysymykset

Pitääkö Firebase Cloud Messagingista maksaa?

FCM on täysin ilmainen. Google ei veloita push-ilmoitusten lähettämisestä eikä aseta tiukkoja viestimäärien kiintiöitä. Erittäin suurilla volyymeilla (miljoonia tunnissa) kuristus voi astua voimaan, mutta tyypilliselle sovellukselle, jonka yleisö on enintään satojatuhansia käyttäjiä, ei ole rajoituksia.

Onko kreait/firebase-php-kirjaston käyttö pakollista?

Ei, mutta se on parhaiten ylläpidetty PHP-paketti Firebaseen vuoden 2026 puolivälissä. Vaihtoehto on työskennellä HTTP v1 -API:n kanssa suoraan Guzzlen ja google/auth-kirjaston avulla OAuth 2.0 -tokenin hankkimiseksi. Siinä tapauksessa sinun on kuitenkin hallittava manuaalisesti tokenin elinikä, päivitettävä se ja seurattava todennusvirheitä. kreait/firebase-php hoitaa tämän automaattisesti.

Miten lähetän ilmoituksia tietylle laitteelle kokonaisen aiheen sijaan?

Korvaa withTarget('topic', $topic) muodolla withTarget('token', $deviceToken), jossa $deviceToken on client-sovelluksesta saatu FCM-token. Token on yksilöllinen jokaiselle sovelluksen asennukselle tietyllä laitteella.

Mitä teen, jos ilmoitukset eivät saavu iOS:lle?

Tarkista kolme asiaa: (1) APNs-varmenne on ladattu Firebase-projektin asetuksiin (Cloud Messaging → Apple app configuration), (2) avain FirebaseAppDelegateProxyEnabled arvolla YES on lisätty Info.plist-tiedostoon, (3) laite ei ole Älä häiritse -tilassa. Huomaa myös, että iOS-simulaattori ei vastaanota push-ilmoituksia; testaa vain fyysisellä laitteella.

Voinko lähettää hiljaisen ilmoituksen näyttämättä sitä käyttäjälle?

Kyllä, käytä pelkän datan sisältävää viestiä: välitä vain ->withData([...]) ilman ->withNotification(...). Tällainen viesti herättää sovelluksen taustalla tietojen synkronointia varten, mutta ei näytä visuaalista ilmoitusta. iOS:llä lisää content-available-otsake arvolla 1 taustakäsittelyä varten.

Mikä on muuttunut ja miten vältät ilmoitusten rikkoutumisen vuonna 2026

Google on asteittain kiristänyt FCM:n tietoturvavaatimuksia. Suurin muutos on vanhan HTTP API:n sulkeminen palvelinavainten todennuksella. Jos PHP-koodisi kutsuu edelleen osoitteita https://android.googleapis.com/gcm/send tai https://fcm.googleapis.com/fcm/send otsakkeella Authorization: key=..., ilmoitukset eivät ole menneet perille vuoden 2024 puolivälin jälkeen.

Siirtyminen HTTP v1 -API:in OAuth 2.0:lla palvelutiliin kautta ratkaisee tämän ongelman täysin. kreait/firebase-php-kirjasto hoitaa tokenin hankkimisen ja päivittämisen, joten sinun ei tarvitse kirjoittaa päivityslogiikkaa manuaalisesti. Säilytä palvelutiliin kuuluva JSON-avain document rootin ulkopuolella ja sulje se pois repositoriostasi .gitignore-tiedoston avulla.

Aiheiden ja data-hyötykuormien avulla saat joustavan reitityksen: uutiset menevät /topics/news-tilaajille, henkilökohtaiset viestit tokenin perusteella, ja hiljainen synkronointi tapahtuu pelkän datan viesteillä. Kaikki tämä toiminnallisuus on ilmaista ja toimii Androidilla, iOS:llä ja webissä yhdestä PHP-skriptistä.

Tarkista nykyinen ilmoitusten lähetyskoodi projektissasi heti. Jos se käyttää edelleen Authorization: key= -muotoa, päivitä HTTP v1 -API:in. Lähetä kysymykset ja integroinnin vivahteet kommentteihin.