Si të dërgoni njoftime Push Mobile me PHP dhe Firebase
Shërbimi i Google Firebase Cloud Messaging (FCM) është një mënyrë e lirë dhe e përshtatshme për të shpërndarë njoftime shtytëse në pajisjet celulare. Ai funksionon me objektivat iOS, Android dhe ueb, duke abstraguar dallimet midis platformave. Ju dërgoni ngarkesën tuaj një herë në API të Firebase dhe merrni dorëzim në kohë reale për të gjithë përdoruesit tuaj.
Në këtë artikull, ne do të tregojmë se si të përdorim Firebase për të dërguar njoftime shtytëse nga kodi juaj PHP nga ana e serverit. Ne po përdorim bibliotekën e palëve të treta php-firebase-cloud-messaging
(PHP-FCM) për të thjeshtuar më tej integrimin e Firebase.
Përvijimi i Arkitekturës
Dërgimi i suksesshëm i një njoftimi shtytës kërkon që disa komponentë të punojnë së bashku. Së pari ju duhet një llogari aktive Firebase me një projekt që ka aktivizuar FCM. Ne do ta rregullojmë këtë në hapat e mëposhtëm. Do t'ju lëshohet një çelës serveri që mbështetja juaj PHP duhet të përfshijë me kërkesat e tij Firebase.
Do t'ju duhet gjithashtu një aplikacion që përdor Firebase SDK për të prodhuar një shenjë regjistrimi të klientit. Kjo shenjë duhet të dërgohet në bazën tuaj të PHP-së. Mbajeni atë në bazën tuaj të të dhënave së bashku me informacionin që identifikon klientin, si p.sh. ID-ja e përdoruesit të regjistruar brenda aplikacionit tuaj.
Meqenëse ky artikull fokusohet në integrimin e backend-it, ne do të supozojmë se keni tashmë një aplikacion klienti Firebase që pajtohet në njoftime dhe merr një shenjë regjistrimi. Mund të ndiqni dokumentacionin për të krijuar një aplikacion bazë Android nëse keni nevojë për një projekt shembull. Brenda kodit të klientit, dërgoni tokenin Firebase në një pikë fundore API që do të krijoni në shërbimin tuaj PHP.
Pasi të keni në dispozicion disa shenja klienti në serverin tuaj, mund të dërgoni njoftime shtytëse duke bërë kërkesa HTTP në API FCM. Firebase do të ndërmjetësojë me platformat individuale të shpërndarjes së njoftimeve, duke e shtyrë sinjalizimin tuaj në pajisjet e specifikuara. FCM harton nga brenda çdo shenjë klienti në platformën e duhur, të tilla si Shërbimet e Google Play për Android dhe Shërbimi i Njoftimeve Push Apple (APNS) për iOS.
Krijimi i projektit tuaj Firebase
Drejtohuni te Konsola e Firebase, identifikohuni dhe klikoni Shto projekt për të filluar konfigurimin e integrimit tuaj. Jepni një emër projektit tuaj dhe klikoni përmes kërkesave të konfigurimit fillestar. Klikoni butonin e cilësimeve në pjesën e sipërme majtas kur të arrini në panelin e kontrollit. Zgjidhni Cilësimet e projektit nga menyja që shfaqet.
Shkoni te skeda Mesazhet në renë kompjuterike dhe shënoni çelësin tuaj të serverit. Shërbimi juaj PHP do ta përdorë këtë kredenciale për të dërguar njoftime në API të Firebase.
Duhet të regjistroni aplikacionet tuaja celulare brenda konsolës Firebase. Kthehuni në faqen kryesore, përdorni butonat Shto një aplikacion për të shtuar komponentët tuaj iOS dhe Android. Ndiqni magjistarin e konfigurimit për të siguruar të dhënat e aplikacionit tuaj dhe për të shkarkuar skedarin e konfigurimit të tij Firebase. Kjo duhet të referohet kur inicializon Firebase në kodin e klientit.
Nëse po ndërtoni një aplikacion iOS, duhet të lidhni manualisht çelësin tuaj APNS me Firebase. Klikoni butonin e cilësimeve në pjesën e sipërme majtas, zgjidhni Cilësimet e projektit dhe lundroni përsëri te Mesazhet në renë kompjuterike. Një seksion Apple Apps do të shfaqet kur të keni një komponent iOS në projektin tuaj. Shtoni një çelës APNS ose certifikatë nga llogaria juaj e zhvilluesit të Apple për të përfunduar integrimin. Kjo lejon FCM të dërgojë njoftime në APNS në emrin tuaj.
Përgatitja e aplikacionit tuaj PHP
Filloni projektin tuaj PHP duke shtuar bibliotekën PHP-FCM duke përdorur Composer:
composer require sngrl/php-firebase-cloud-messaging
Brenda kodit tuaj, krijoni një shembull të klasës Klient
të PHP-FCM:
use sngrlPhpFirebaseCloudMessagingClientClient;
$client = new Client();
$client -> setApiKey("FCM-SERVER-KEY");
$client -> injectGuzzleHttpClient(new GuzzleHttpClient());
Kaloni metodën setApiKey()
çelësin e serverit që keni kopjuar nga konsola juaj API Firebase. Në një aplikacion real, kjo duhet të ruhet në mënyrë të sigurt dhe të trajtohet si një sekret konfidencial.
PHP-FCM mbështetet në një shembull të injektuar Guzzle për të bërë kërkesat e tij HTTP. Guzzle përfshihet automatikisht si një varësi, kështu që nuk keni nevojë ta instaloni manualisht. Ne po ndërtojmë një klient të ri Guzzle në shembullin e mësipërm; ju mund të ripërdorni një shembull ekzistues nëse tashmë keni Guzzle në aplikacionin tuaj.
Shembulli FCM Klient
tani është gati për të dërguar njoftime në llogarinë tuaj FCM.
Regjistrimi i shenjave të klientit
Njoftimet u shpërndahen shenjave të klientit që përfaqësojnë pajisjet e përdoruesve tuaj. Siç u shpjegua më lart, do t'ju duhet të ekspozoni një pikë fundore API në aplikacionin tuaj që lejon aplikacionet e klientëve tuaj të dërgojnë tokenin e tyre FCM pasi përdoruesi të regjistrohet.
Këtu është një shembull bazë se si mund të duket kjo:
$token = $_POST["fcmToken"];
$userId = ((int) $_POST["userId"]);
/**
* Call a function which persists a user/token
* association to your database
*/
saveUserFcmToken($userId, $token);
Për të dërguar një njoftim shtytës në çdo pajisje të regjistruar, zgjidhni të gjitha shenjat në dyqanin tuaj të të dhënave. Ju mund t'i dërgoni një përdoruesi specifik duke marrë shenjat e lidhura me ID-në e tij. Kjo do të shfaqte njoftimin në të gjitha pajisjet në të cilat janë identifikuar, që zakonisht është sjellja e synuar.
Dërgimi i njoftimeve
PHP-FCM abstrakton çdo dërgim njoftimi në një objekt Mesazhi
. Kjo përfundon një Njoftim
- që përmban tekstin që i shfaqet përdoruesit - dhe çdo opsion shpërndarjeje që ju jepni.
Përgatitni fillimisht Njoftimin
tuaj:
use sngrlPhpFirebaseCloudMessagingClientNotification;
$notification = new Notification(
"Notification Title",
"The longer text of the notification, displayed below the title."
);
Më pas krijoni një Mesazhe
për të përfaqësuar dërgimin e njoftimit:
use sngrlPhpFirebaseCloudMessagingClientMessage;
$message = new Message();
$message -> setNotification($notification);
Përpara se të dërgoni mesazhin tuaj, shtoni një ose më shumë marrës. Metoda addRecipient()
merr një shembull Pajisje
; Kjo klasë ka nevojë për një nga shenjat tuaja të klientit FCM si parametrin e saj konstruktor:
use sngrlPhpFirebaseCloudMessagingClientRecipientDevice;
$message -> addReceipient(new Device("FCM-CLIENT-TOKEN-USER-1"));
$message -> addReceipient(new Device("FCM-CLIENT-TOKEN-USER-2"));
Tani jeni gati të dërgoni mesazhin duke përdorur Klientin
të krijuar më parë:
$client -> send($message);
Njoftimi do t'u dërgohet pajisjeve që keni shtuar si marrës.
Këtu është një shembull i plotë që mbështjell kodin e trajtimit të njoftimeve në një funksion të përshtatshëm:
use sngrlPhpFirebaseCloudMessagingClientClient;
use sngrlPhpFirebaseCloudMessagingClientMessage;
use sngrlPhpFirebaseCloudMessagingClientNotification;
use sngrlPhpFirebaseCloudMessagingClientRecipientDevice;
$client = new Client();
$client -> setApiKey("FCM-SERVER-KEY");
$client -> injectGuzzleHttpClient(new GuzzleHttpClient());
function sendNotification(
Client $client,
string $title,
string $body,
string ...$clientTokens) : void {
$message = new Message();
$message -> setNotification(
new Notification(
$title,
$body
)
);
foreach ($clientTokens as $clientToken) {
$message -> addRecipient(new Device($clientToken));
}
$client -> send($message);
}
sendNotification($client, "Hello World", "Test Notification", "FCM-CLIENT-TOKEN-1");
Trajtimi i të dhënave të përgjigjes FCM
Metoda Client::send()
kthen objektin e përgjigjes HTTP për kërkesën e njoftimit. Mund të inspektoni të dhënat e përgjigjes të koduara me JSON për të përcaktuar nëse njoftimet tuaja janë dorëzuar me sukses.
$message = new Message();
$message -> setNotification(new Notification("Test", "Test"));
$message -> addReceipient(new Device("FCM-CLIENT-TOKEN-USER-1"));
$message -> addReceipient(new Device("FCM-CLIENT-TOKEN-USER-2"));
$response = $client -> send($message);
$responseData = $response -> json();
Vargu i të dhënave të përgjigjes ka një strukturë të ngjashme me sa vijon:
{
"success": 1,
"failure": 1,
"results": [
{
"message_id": 100
},
{
"error": "InvalidRegistration"
}
]
}
Vargu rezultatet
përmban një objekt që përfaqëson statusin e dorëzimit të secilës prej pajisjeve që u përpoqët të dërgoni. Kjo do të përputhet me rendin e marrësve të shtuar në Mesazhi
nëpërmjet metodës addRecipient()
. Shembulli JSON i mësipërm tregon se vetëm pajisja e parë e mori njoftimin. Dorëzimi i dytë dështoi, kështu që ju duhet të hiqni kodin e pajisjes nga databaza juaj.
$recipients = [
"FCM-CLIENT-TOKEN-USER-1",
"FCM-CLIENT-TOKEN-USER-2"
];
$message = new Message();
$message -> setNotification(new Notification("Test", "Test"));
foreach ($recipients as $recipient) {
$message -> addReceipient(new Device($recipient));
}
$response = $client -> send($message);
$responseData = $response -> json();
foreach ($responseData["results"] as $i => $result) {
if (isset($result["error"])) {
deleteUserFcmToken($recipients[$i]);
}
}
Shtimi i të dhënave arbitrare në njoftime
Mesazhet mund të përfshijnë të dhëna arbitrare të cilat duhet t'i komunikohen aplikacionit të klientit:
$message = new Message();
$message -> setNotification(
new Notification(
"Breaking News!",
"A breaking news story is available."
)
);
$message -> setData([
"uri" => "/news/latest-stories"
]);
Kodi nga ana e klientit mund t'i qaset këtyre të dhënave për të ndërmarrë veprime të ndryshme kur merret një njoftim.
Vendosja e prioriteteve të mesazheve
FCM mbështet një sistem prioriteti mesazhi që ju lejon të kërkoni një dorëzim të menjëhershëm në pajisjen e synuar. Kur përdoret modaliteti me përparësi të lartë, FCM përpiqet të zgjojë pajisjet Android në gjumë për të trajtuar njoftimin, edhe nëse aktiviteti në sfond është duke u shtypur.
// Indicate a high-priority message
$message -> setPriority("high");
Ky atribut duhet të përdoret me kujdes. Dërgimi i shumë mesazheve prioritare që nuk rezultojnë në ndërveprime me përdoruesit do të bëjë që dërgesat tuaja të privohen nga prioriteti. Mekanizmi është menduar për ngarkesa vërtet të rëndësishme që duhet të kalojnë kursimin e baterisë së pajisjes, frenimin e rrjetit dhe kufizimet e aktivitetit në sfond.
iOS i trajton prioritetet ndryshe. Do të merrni një gabim nëse përpiqeni të dërgoni një mesazh me përparësi high
në një pajisje iOS. Ju mund të përdorni vlerat normal
ose 5
, kjo e fundit që tregon një dërgesë me përparësi të lartë është e preferuar.
Koha për të jetuar
Koha për të jetuar (TTL) e një shembulli Mesazhi
përcakton se për sa kohë do të mbetet e rëndësishme. FCM nuk do të jetë gjithmonë në gjendje të dërgojë njoftime në kohën e duhur. Pajisja e synuar mund të jetë jashtë linje ose në gjendje të kursimit të baterisë. FCM do të vazhdojë të përpiqet të japë njoftimin, por kjo nuk është gjithmonë një sjellje e dëshirueshme. Disa njoftime të tilla si përkujtuesit e skadimit mund të jenë të parëndësishme për përdoruesin në momentin që i marrin.
Përdorni metodën setTimeToLive()
për të përcaktuar jetëgjatësinë e mesazheve tuaja. FCM do të ndalojë përpjekjet për t'i dorëzuar ato pasi të ketë skaduar TTL.
$message = new Message();
$message -> setNotification(
new Notification(
"Server rotation scheduled for 12pm",
"Cancel within the next 10 minutes."
)
);
$message -> setTimeToLive(600);
Shenjat në iOS
iOS përdor distinktivët e kuq në ikonat e ekranit bazë për të treguar numrin e njoftimeve të palexuara të disponueshme brenda aplikacionit. Ju mund të ndryshoni distinktivin numerik të aplikacionit tuaj me metodën setBadge()
në një objekt Njoftimi
:
$message = new Message();
$notification = new Notification(
"Server rotation scheduled for 12pm",
"Cancel within the next 10 minutes."
);
$notification -> setBadge(1);
$message -> setNotification($notification);
$message -> setTimeToLive(600);
Klasa Njoftimi
ka metoda edhe për sjellje të tjera specifike për platformën. Mund të ndryshoni ikonën e njoftimit në pajisjet Android (setIcon()
), të caktoni një tingull për t'u luajtur (setSound()
) dhe të përdorni etiketat (setTag()
) për të kontrolluar nëse njoftimet e mëparshme zëvendësohen nga dërgesa e re. Këto veti dhe veçoritë e zbatimit të platformës së tyre përshkruhen në dokumentacionin e FCM API.
konkluzioni
FCM është një mënyrë ideale për të filluar dërgimin e njoftimeve shtytëse në pajisjet celulare nga një backend PHP. Ai trajton ndërveprimet me implementime shtytëse specifike për platformën, si APNS dhe Shërbimet e Google Play, duke reduktuar sasinë e kodit që duhet të shkruani.
Biblioteka e PHP Firebase Cloud Messaging mbështjell API-në e FCM me klasa dhe metoda të përshtatshme PHP. Për kontroll më të avancuar, mund të telefononi direkt API-në FCM nëpërmjet një biblioteke PHP HTTP si Guzzle. Ju mund të duhet të merrni këtë qasje nëse keni nevojë të përdorni opsionet e njoftimit që nuk janë të ekspozuara nga PHP-FCM.