Türkçe

Progresif Web Uygulamalarını (PWA) uygulamak için temel kavramları, service worker'ları, manifest dosyalarını, anlık bildirimleri ve global kitleler için en iyi uygulamaları kapsayan kapsamlı bir rehber.

Progresif Web Uygulamaları: Global Geliştiriciler için Kapsamlı Bir Uygulama Rehberi

Progresif Web Uygulamaları (PWA'lar), geleneksel web siteleri ile native mobil uygulamalar arasındaki çizgiyi bulanıklaştırarak web geliştirmede bir paradigma değişimini temsil eder. Güvenilirlik, yüklenebilirlik ve etkileşim ile karakterize edilen gelişmiş bir kullanıcı deneyimi sunarlar, bu da onları değişken internet bağlantısı ve cihaz yeteneklerine sahip global bir kitleye ulaşmak için ideal bir çözüm haline getirir.

Progresif Web Uygulamaları Nedir?

PWA'lar, native bir uygulama benzeri deneyim sağlamak için modern web standartlarından yararlanan web uygulamalarıdır. Özellikleri şunlardır:

Native uygulamaların aksine, PWA'lar arama motorları aracılığıyla keşfedilebilir, URL'ler aracılığıyla kolayca paylaşılabilir ve kullanıcıların uygulama mağazalarından geçmesini gerektirmez. Bu, onları erişimlerini genişletmek isteyen işletmeler için erişilebilir ve uygun maliyetli bir çözüm haline getirir.

PWA'ların Arkasındaki Temel Teknolojiler

PWA'lar üç temel teknoloji üzerine kuruludur:

1. HTTPS

Güvenlik her şeyden önemlidir. PWA'lar, gizli dinlemeyi önlemek ve veri bütünlüğünü sağlamak için mutlaka HTTPS üzerinden sunulmalıdır. Bu, service worker'ların çalışması için temel bir gerekliliktir.

2. Service Worker'lar

Service worker'lar, ana tarayıcı iş parçacığından ayrı olarak arka planda çalışan JavaScript dosyalarıdır. Web uygulaması ile ağ arasında proxy sunucuları gibi hareket ederek aşağıdaki gibi özellikleri etkinleştirirler:

Service Worker Yaşam Döngüsü: Service worker yaşam döngüsünü (kayıt, kurulum, aktivasyon, güncellemeler) anlamak, etkili bir PWA uygulaması için çok önemlidir. Yanlış yönetim, önbelleğe alma sorunlarına ve beklenmedik davranışlara yol açabilir. Güncellemeleri daha sonra ayrıntılı olarak ele alacağız.

3. Web Uygulama Manifestosu

Web uygulama manifestosu, PWA hakkında aşağıdaki gibi meta verileri sağlayan bir JSON dosyasıdır:

Uygulama Adımları: Basit bir PWA Oluşturma

Basit bir PWA oluşturma adımlarını inceleyelim:

Adım 1: HTTPS'yi Ayarlayın

Web sitenizin HTTPS üzerinden sunulduğundan emin olun. Let's Encrypt'ten ücretsiz bir SSL sertifikası alabilirsiniz.

Adım 2: Bir Web Uygulama Manifestosu Oluşturun (manifest.json)

`manifest.json` adında bir dosya oluşturun ve aşağıdaki kodu ekleyin:


{
  "name": "Benim Basit PWA'm",
  "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"
}

`icon-192x192.png` ve `icon-512x512.png` dosyalarını kendi ikon dosyalarınızla değiştirin. Bu ikonları çeşitli boyutlarda oluşturmanız gerekecektir. Real Favicon Generator gibi çevrimiçi araçlar bu konuda yardımcı olabilir.

Adım 3: Manifest Dosyasını HTML'inize Bağlayın

`index.html` dosyanızın `` bölümüne aşağıdaki satırı ekleyin:


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

Adım 4: Bir Service Worker Oluşturun (service-worker.js)

`service-worker.js` adında bir dosya oluşturun ve aşağıdaki kodu ekleyin:


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) {
  // Kurulum adımlarını gerçekleştir
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Önbellek açıldı');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Önbellekte bulundu - yanıtı döndür
        if (response) {
          return response;
        }

        // ÖNEMLİ: Eğer buradaysak, isteğin önbellekte bulunmadığı anlamına gelir.
        return fetch(event.request).then(
          function(response) {
            // Geçerli bir yanıt alıp almadığımızı kontrol et
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

            // ÖNEMLİ: Yanıtı klonlayın. Bir yanıt bir akıştır
            // ve hem tarayıcının yanıtı tüketmesini
            // hem de önbelleğin yanıtı tüketmesini istediğimiz için,
            // iki bağımsız kopyaya sahip olmak üzere onu klonlamamız gerekir.
            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);
          }
        })
      );
    })
  );
});

Bu service worker, kurulum sırasında belirtilen dosyaları önbelleğe alır ve kullanıcı çevrimdışı veya yavaş bir ağdayken bunları önbellekten sunar.

Adım 5: Service Worker'ı JavaScript'inizde Kaydedin

`script.js` dosyanıza aşağıdaki kodu ekleyin:


if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/service-worker.js')
      .then(function(registration) {
        // Kayıt başarılı oldu
        console.log('ServiceWorker kaydı başarılı, kapsam: ', registration.scope);
      },
      function(err) {
        // kayıt başarısız oldu :(
        console.log('ServiceWorker kaydı başarısız: ', err);
      });
  });
}

Bu kod, tarayıcının service worker'ları destekleyip desteklemediğini kontrol eder ve `service-worker.js` dosyasını kaydeder.

Adım 6: PWA'nızı Test Edin

Web sitenizi PWA'ları destekleyen bir tarayıcıda (örneğin, Chrome, Firefox, Safari) açın. Geliştirici araçlarını açın ve service worker'ın doğru şekilde kaydedilip kaydedilmediğini ve manifest dosyasının yüklenip yüklenmediğini görmek için "Application" sekmesini kontrol edin.

Artık tarayıcınızda bir "Ana Ekrana Ekle" istemi görmelisiniz. Bu istemi tıklamak PWA'yı cihazınıza yükleyecektir.

Gelişmiş PWA Özellikleri ve Dikkat Edilmesi Gerekenler

Anlık Bildirimler

Anlık bildirimler, PWA'nızla kullanıcılarla yeniden etkileşim kurmanın güçlü bir yoludur. Anlık bildirimleri uygulamak için şunları yapmanız gerekir:

  1. Bir Push API Anahtarı Edinin: Anlık bildirimleri işlemek için Firebase Cloud Messaging (FCM) gibi bir hizmeti veya benzer bir hizmeti kullanmanız gerekecektir. Bu, bir hesap oluşturmayı ve bir API anahtarı almayı gerektirir.
  2. Kullanıcıyı Abone Edin: PWA'nızda, kullanıcıdan anlık bildirimler almak için izin istemeniz ve ardından onları push hizmetinize abone etmeniz gerekir.
  3. Push Olaylarını Ele Alın: Service worker'ınızda, push olaylarını dinlemeniz ve bildirimi kullanıcıya göstermeniz gerekir.

Örnek (Basitleştirilmiş - Firebase kullanarak):

`service-worker.js` dosyanızda:


// Firebase kütüphanelerini içe aktar
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');

// Firebase'i başlat
const firebaseConfig = {
  apiKey: "API_ANAHTARINIZ",
  authDomain: "AUTH_ALAN_ADINIZ",
  projectId: "PROJE_ID'NIZ",
  storageBucket: "DEPOLAMA_KOVANIZ",
  messagingSenderId: "MESAJ_GONDERICI_ID'NIZ",
  appId: "UYGULAMA_ID'NIZ",
  measurementId: "OLCUM_ID'NIZ"
};

firebase.initializeApp(firebaseConfig);

const messaging = firebase.messaging();

messaging.onBackgroundMessage(function(payload) {
  console.log('[firebase-messaging-sw.js] Arka plan mesajı alındı ', payload);
  // Bildirimi burada özelleştirin
  const notificationTitle = 'Arka Plan Mesaj Başlığı';
  const notificationOptions = {
    body: 'Arka plan mesajının gövdesi.',
    icon: '/icon-512x512.png'
  };

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

Önemli: Yer tutucu değerleri gerçek Firebase yapılandırmanızla değiştirin. Bu örnek, arka plan mesajlarının nasıl ele alınacağını gösterir. Ana JavaScript kodunuzda abonelik mantığını uygulamanız gerekecektir.

Arka Plan Senkronizasyonu

Arka plan senkronizasyonu, PWA'nızın kullanıcı çevrimdışıyken bile görevleri gerçekleştirmesine olanak tanır. Bu, aşağıdaki gibi senaryolar için kullanışlıdır:

Arka plan senkronizasyonunu kullanmak için, service worker'ınızda `sync` olayı için kayıt olmanız ve senkronizasyon mantığını ele almanız gerekir.

Çevrimdışı Destek Stratejileri

PWA'nızda çevrimdışı destek sağlamak için birkaç strateji vardır:

En iyi strateji, uygulamanızın özel gereksinimlerine bağlıdır.

PWA Güncellemeleri

Service worker güncellemeleri, PWA bakımının çok önemli bir parçasıdır. Tarayıcı, `service-worker.js` dosyanızda bir değişiklik (tek bir baytlık değişiklik bile) tespit ettiğinde, bir güncelleme sürecini tetikler. Yeni service worker arka planda yüklenir, ancak kullanıcı PWA'nızı bir sonraki ziyaret edene veya eski service worker tarafından kontrol edilen tüm mevcut sekmeler kapatılana kadar aktif olmaz.

Yeni service worker'ınızın `install` olayında `self.skipWaiting()` ve `activate` olayında `clients.claim()` çağrısı yaparak anında bir güncellemeyi zorlayabilirsiniz. Ancak bu, kullanıcının deneyimini kesintiye uğratabilir, bu yüzden dikkatli kullanın.

PWA'lar için SEO Hususları

PWA'lar esasen web siteleri oldukları için genellikle SEO dostudur. Ancak, akılda tutulması gereken birkaç şey vardır:

Tarayıcılar Arası Uyumluluk

PWA'lar web standartlarına dayansa da, tarayıcı desteği değişebilir. PWA'nızın farklı tarayıcılarda ve cihazlarda doğru çalıştığından emin olmak için test etmek önemlidir. Belirli özellikleri desteklemeyen tarayıcılarda işlevselliği zarif bir şekilde düşürmek için özellik algılamayı kullanın.

PWA'larda Hata Ayıklama

Service worker'ların asenkron doğası nedeniyle PWA'larda hata ayıklamak zor olabilir. Service worker kaydını, önbelleğe almayı ve ağ isteklerini incelemek için tarayıcının geliştirici araçlarını kullanın. Konsol günlüklerine ve hata mesajlarına özellikle dikkat edin.

Dünya Genelinden PWA Örnekleri

Dünya çapında çok sayıda şirket PWA'ları başarıyla uygulamıştır. İşte birkaç çeşitli örnek:

Sonuç: Web'in Geleceğini Kucaklamak

Progresif Web Uygulamaları, geleneksel web sitelerine ve native mobil uygulamalara karşı çekici bir alternatif sunar. Üstün bir kullanıcı deneyimi, geliştirilmiş performans ve artırılmış etkileşim sağlarlar, bu da onları global bir kitleye ulaşmak isteyen işletmeler için değerli bir araç haline getirir. Geliştiriciler, bu rehberde özetlenen temel kavramları anlayarak ve uygulama adımlarını izleyerek güvenilir, yüklenebilir ve etkileşimli PWA'lar oluşturabilir ve günümüzün mobil öncelikli dünyasında rekabet avantajı sağlayabilirler. Web'in geleceğini kucaklayın ve bugün kendi Progresif Web Uygulamalarınızı oluşturmaya başlayın!