Hrvatski

Sveobuhvatan vodič za implementaciju progresivnih web-aplikacija (PWA), koji pokriva ključne koncepte, servisne radnike, manifest datoteke i push obavijesti.

Progresivne web-aplikacije: Potpuni vodič za implementaciju za globalne programere

Progresivne web-aplikacije (PWA) predstavljaju promjenu paradigme u web-razvoju, brišući granice između tradicionalnih web-stranica i nativnih mobilnih aplikacija. One nude poboljšano korisničko iskustvo koje se odlikuje pouzdanošću, mogućnošću instalacije i angažmanom, što ih čini idealnim rješenjem za dosezanje globalne publike s različitom internetskom vezom i mogućnostima uređaja.

Što su progresivne web-aplikacije?

PWA su web-aplikacije koje koriste moderne web-standarde kako bi pružile iskustvo slično nativnoj aplikaciji. One su:

Za razliku od nativnih aplikacija, PWA su vidljive putem tražilica, lako se dijele putem URL-ova i ne zahtijevaju od korisnika da prolaze kroz trgovine aplikacijama. To ih čini pristupačnim i isplativim rješenjem za tvrtke koje žele proširiti svoj doseg.

Ključne tehnologije iza PWA

PWA se temelje na tri ključne tehnologije:

1. HTTPS

Sigurnost je najvažnija. PWA se mora posluživati preko HTTPS-a kako bi se spriječilo prisluškivanje i osigurala cjelovitost podataka. Ovo je temeljni preduvjet za funkcioniranje servisnih radnika.

2. Servisni radnici

Servisni radnici (service workers) su JavaScript datoteke koje se izvode u pozadini, odvojeno od glavne niti preglednika. Djeluju kao proxy poslužitelji između web-aplikacije i mreže, omogućujući značajke kao što su:

Životni ciklus servisnog radnika: Razumijevanje životnog ciklusa servisnog radnika (registracija, instalacija, aktivacija, ažuriranja) ključno je za učinkovitu implementaciju PWA. Neispravno upravljanje može dovesti do problema s predmemoriranjem i neočekivanog ponašanja. O ažuriranjima ćemo detaljnije govoriti kasnije.

3. Manifest web-aplikacije

Manifest web-aplikacije je JSON datoteka koja pruža metapodatke o PWA, kao što su:

Koraci implementacije: Izrada jednostavne PWA

Prođimo kroz korake izrade jednostavne PWA:

Korak 1: Postavite HTTPS

Osigurajte da se vaša web-stranica poslužuje preko HTTPS-a. Možete dobiti besplatan SSL certifikat od Let's Encrypt.

Korak 2: Izradite manifest web-aplikacije (manifest.json)

Izradite datoteku pod nazivom `manifest.json` i dodajte sljedeći kod:


{
  "name": "Moja jednostavna PWA",
  "short_name": "PWA",
  "icons": [
    {
      "src": "icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ],
  "start_url": "/index.html",
  "display": "standalone",
  "theme_color": "#ffffff",
  "background_color": "#ffffff"
}

Zamijenite `icon-192x192.png` i `icon-512x512.png` svojim stvarnim datotekama ikona. Trebat ćete generirati ove ikone u različitim veličinama. Online alati poput Real Favicon Generator mogu pomoći u tome.

Korak 3: Povežite manifest datoteku u svom HTML-u

Dodajte sljedeći redak u `` odjeljak vaše `index.html` datoteke:


<link rel="manifest" href="/manifest.json">

Korak 4: Izradite servisnog radnika (service-worker.js)

Izradite datoteku pod nazivom `service-worker.js` i dodajte sljedeći kod:


const CACHE_NAME = 'my-pwa-cache-v1';
const urlsToCache = [
  '/',
  '/index.html',
  '/style.css',
  '/script.js',
  '/icon-192x192.png',
  '/icon-512x512.png'
];

self.addEventListener('install', function(event) {
  // Izvrši korake instalacije
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Otvorena predmemorija');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Pogodak u predmemoriji - vrati odgovor
        if (response) {
          return response;
        }

        // VAŽNO: Ako smo ovdje, znači da zahtjev nije pronađen u predmemoriji.
        return fetch(event.request).then(
          function(response) {
            // Provjeri jesmo li primili valjan odgovor
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

            // VAŽNO: Kloniraj odgovor. Odgovor je tok (stream)
            // i budući da želimo da preglednik konzumira odgovor
            // kao i da predmemorija konzumira odgovor, moramo
            // ga klonirati kako bismo imali dvije neovisne kopije.
            var responseToCache = response.clone();

            caches.open(CACHE_NAME)
              .then(function(cache) {
                cache.put(event.request, responseToCache);
              });

            return response;
          }
        );
      })
  );
});

self.addEventListener('activate', function(event) {

  var cacheWhitelist = [CACHE_NAME];

  event.waitUntil(
    caches.keys().then(function(cacheNames) {
      return Promise.all(
        cacheNames.map(function(cacheName) {
          if (cacheWhitelist.indexOf(cacheName) === -1) {
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});

Ovaj servisni radnik predmemorira navedene datoteke tijekom instalacije i poslužuje ih iz predmemorije kada je korisnik izvan mreže ili na sporoj mreži.

Korak 5: Registrirajte servisnog radnika u svom JavaScriptu

Dodajte sljedeći kod u svoju `script.js` datoteku:


if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/service-worker.js')
      .then(function(registration) {
        // Registracija je bila uspješna
        console.log('Registracija ServiceWorker-a uspješna s opsegom: ', registration.scope);
      },
      function(err) {
        // registracija nije uspjela :(
        console.log('Registracija ServiceWorker-a nije uspjela: ', err);
      });
  });
}

Ovaj kod provjerava podržava li preglednik servisne radnike i registrira datoteku `service-worker.js`.

Korak 6: Testirajte svoju PWA

Otvorite svoju web-stranicu u pregledniku koji podržava PWA (npr. Chrome, Firefox, Safari). Otvorite razvojne alate i provjerite karticu "Application" kako biste vidjeli je li servisni radnik ispravno registriran i je li manifest datoteka učitana.

Sada biste trebali vidjeti upit "Dodaj na početni zaslon" u svom pregledniku. Klikom na ovaj upit instalirat ćete PWA na svoj uređaj.

Napredne značajke i razmatranja PWA

Push obavijesti

Push obavijesti su moćan način za ponovno angažiranje korisnika s vašom PWA. Da biste implementirali push obavijesti, trebat ćete:

  1. Pribaviti ključ za Push API: Trebat ćete koristiti uslugu kao što je Firebase Cloud Messaging (FCM) ili sličnu uslugu za rukovanje push obavijestima. To zahtijeva stvaranje računa i dobivanje API ključa.
  2. Pretplatiti korisnika: U svojoj PWA morat ćete zatražiti dopuštenje od korisnika za primanje push obavijesti, a zatim ga pretplatiti na svoju push uslugu.
  3. Rukovati push događajima: U svom servisnom radniku morat ćete osluškivati push događaje i prikazati obavijest korisniku.

Primjer (pojednostavljeno - koristeći Firebase):

U vašem `service-worker.js`:


// Uvezite Firebase biblioteke
importScripts('https://www.gstatic.com/firebasejs/9.6.11/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/9.6.11/firebase-messaging-compat.js');

// Inicijalizirajte Firebase
const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_AUTH_DOMAIN",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
  appId: "YOUR_APP_ID",
  measurementId: "YOUR_MEASUREMENT_ID"
};

firebase.initializeApp(firebaseConfig);

const messaging = firebase.messaging();

messaging.onBackgroundMessage(function(payload) {
  console.log('[firebase-messaging-sw.js] Primljena pozadinska poruka ', payload);
  // Ovdje prilagodite obavijest
  const notificationTitle = 'Naslov pozadinske poruke';
  const notificationOptions = {
    body: 'Tijelo pozadinske poruke.',
    icon: '/icon-512x512.png'
  };

  self.registration.showNotification(notificationTitle, notificationOptions);
});

Važno: Zamijenite rezervirane vrijednosti svojim stvarnim Firebase konfiguracijskim podacima. Ovaj primjer demonstrira rukovanje pozadinskim porukama. Morat ćete implementirati logiku pretplate u svom glavnom JavaScript kodu.

Pozadinska sinkronizacija

Pozadinska sinkronizacija omogućuje vašoj PWA da obavlja zadatke čak i kada je korisnik izvan mreže. To je korisno za scenarije kao što su:

Da biste koristili pozadinsku sinkronizaciju, morat ćete se registrirati za `sync` događaj u svom servisnom radniku i rukovati logikom sinkronizacije.

Strategije za podršku izvan mreže

Postoji nekoliko strategija za pružanje podrške izvan mreže u vašoj PWA:

Najbolja strategija ovisi o specifičnim zahtjevima vaše aplikacije.

Ažuriranja PWA

Ažuriranja servisnog radnika ključan su dio održavanja PWA. Kada preglednik otkrije promjenu u vašoj `service-worker.js` datoteci (čak i promjenu od jednog bajta), pokreće proces ažuriranja. Novi servisni radnik instalira se u pozadini, ali ne postaje aktivan sve dok korisnik sljedeći put ne posjeti vašu PWA ili dok se ne zatvore sve postojeće kartice koje kontrolira stari servisni radnik.

Možete prisiliti trenutno ažuriranje pozivanjem `self.skipWaiting()` u `install` događaju vašeg novog servisnog radnika i `clients.claim()` u `activate` događaju. Međutim, to može poremetiti korisničko iskustvo, stoga ga koristite s oprezom.

SEO razmatranja za PWA

PWA su općenito prijateljske prema SEO-u, jer su u suštini web-stranice. Međutim, postoji nekoliko stvari koje treba imati na umu:

Kompatibilnost s različitim preglednicima

Iako se PWA temelje na web-standardima, podrška preglednika može varirati. Važno je testirati vašu PWA u različitim preglednicima i na različitim uređajima kako biste osigurali da radi ispravno. Koristite otkrivanje značajki (feature detection) kako biste graciozno smanjili funkcionalnost u preglednicima koji ne podržavaju određene značajke.

Otklanjanje pogrešaka (debuggiranje) PWA

Otklanjanje pogrešaka u PWA može biti izazovno zbog asinkrone prirode servisnih radnika. Koristite razvojne alate preglednika za pregled registracije servisnog radnika, predmemoriranja i mrežnih zahtjeva. Posebno obratite pozornost na zapise u konzoli i poruke o pogreškama.

Primjeri PWA diljem svijeta

Brojne tvrtke diljem svijeta uspješno su implementirale PWA. Evo nekoliko različitih primjera:

Zaključak: Prihvaćanje budućnosti weba

Progresivne web-aplikacije nude uvjerljivu alternativu tradicionalnim web-stranicama i nativnim mobilnim aplikacijama. One pružaju vrhunsko korisničko iskustvo, poboljšane performanse i povećan angažman, što ih čini vrijednim alatom za tvrtke koje žele dosegnuti globalnu publiku. Razumijevanjem ključnih koncepata i slijedeći korake implementacije navedene u ovom vodiču, programeri mogu stvoriti PWA koje su pouzdane, mogu se instalirati i angažirajuće, pružajući konkurentsku prednost u današnjem mobilno-orijentiranom svijetu. Prihvatite budućnost weba i počnite graditi vlastite progresivne web-aplikacije već danas!