
📱 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-phpComposerin 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.

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:
Firebase SDK:n minimi-integraatio iOS-sovelluksessa:

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:

Firebase SDK:n integraatio Androidilla:

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:
1 composer require kreait/firebase-php
send_push.php-tiedosto clientin alustuksella:
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();
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 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 }
Keskeiset kohdat selitettynä:
CloudMessage::withTarget('topic', $topic)lähettää aiheeseen; lähettääksesi tietylle laitteelle, korvaa se muodollawithTarget('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.MessagingExceptionnappaa 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.

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.

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.

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-phphoitaa tämän automaattisesti.
Miten lähetän ilmoituksia tietylle laitteelle kokonaisen aiheen sijaan?
Korvaa
withTarget('topic', $topic)muodollawithTarget('token', $deviceToken), jossa$deviceTokenon 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
FirebaseAppDelegateProxyEnabledarvollaYESon lisättyInfo.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 arvolla1taustakä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.



