Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
PWA#1
3.1. Tujuan
1. Praktikan mengetahui apa itu Progressive Web Application.
2. Praktikan memahami kegunaan dari Progressive Web Application.
3. Praktikan dapat memahami cara kerja dari Progressive Web Application.
4. Praktikan mengetahui cara mengimplementasikan Progressive Web
Application.
5. Praktikan dapat membuat aplikasi Progressive Web Application sederhana.
6. Praktikan dapat memahami fungsi Service Worker pada PWA.
7. Praktikan dapat memahami fungsi manifest.js pada PWA.
3.2. Alat dan Bahan
3.2.1. PC/Laptop
11. Buat file dengan nama service-worker.js di dalam folder project. Biarkan
kosong terlebih dahulu. Kemudian buka kembali file index.html dan
tambahkan kode berikut di bagian paling bawah sebelum tag tutup </body>.
<script>
// REGISTER SERVICE WORKER
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() { //untuk
mengecek status pendaftaran service worker
navigator.serviceWorker.register('/service-worker.js')
.then(function() {
console.log('Pendaftaran ServiceWorker berhasil');
}) //apabila service worker berhasil
.catch(function(){
console.log('Pendaftaran ServiceWorker gagal');
}); //apabila service worker tidak berhasil
})
} else {
console.log("ServiceWorker belum didukung browser ini");
} //apabila browser tidak mendukung sw
</script>
self.addEventListener('install', function(event){
//menyimpan aset yang dicache pada storage
event.waitUntil(
caches.open(CACHE_NAME) memuat CACHE_NAME
.then(function(cache) { membuat fungsi untuk cache
return cache.addAll(urlsToCache);
//mengembalikan ke urlsToCache
})
);
});
Bila kode berjalan dengan baik, maka seharusnya aset-aset tadi akan terdaftar
pada cache browser. Kamu dapat mengecek cache yang sudah terdaftar
pada DevTools tab Application bagian Cache Storage. Klik tanda segitiga
terbalik di sebelah kiri menu Cache Storage untuk melihat daftar cache. Sampai
sini baru menyimpan aset-aset file ke cache.
Gambar 3.11 Cache storage
13. Tambahkan kode berikut pada file service-worker.js agar halaman
menggunakan asset yang sudah disimpan di-cache.
self.addEventListener('fetch', function(event) { /untuk
menggunakan aset dari cache pada penyimpanan
event.respondWith( //respons ketika event
caches.match(event.request, {cacheName:CACHE_NAME})
.then(function(response) { //mengecek aset diakses
dari mana asalnya
if(response){
console.log("ServiceWorker: Gunakan aset dari
cache: ", response.url); //jika cache diakses dari cache
return response;
}
console.log("ServiceWorker: Memuat aset dari serv
er: ", event.request.url); //jika cache diakses server
return fetch(event.request); //mengembalikan
fetch menyimpan halaman ke cache storage
})
);
});
Bila sekarang kamu refresh kembali halaman, kamu akan lihat pada tab
Network aplikasi masih belum menggunakan aset dari cache. Hal ini disebabkan
karena service worker yang aktif masih kode yang lama. Browser akan menunggu
proses pengaktifan sampai kita membuka aplikasi pada sesi yang baru. Satu sesi
dihitung selama kita membuka aplikasi sampai kita menutup tab browser atau
jendela browsernya.
Gambar 3.12 Merefresh halaman
Setelah service worker yang terbaru diaktifkan, kamu dapat memuat ulang
halaman dan sekarang seharusnya halaman sudah menggunakan aset dari cache,
ditunjukkan pada kolom size yang sekarang sudah tertulis bahwa aset disuplai dari
service worker.
15. Menambahkan aplikasi ke home screen. Agar sebuah PWA bisa dipasang
ke home screen. Sebuah web app manifest didaftarkan melalui
elemen link yang disimpan di dalam tag head di setiap halaman HTML
seperti saat kita akan menggunakan CSS eksternal. Ubah
kode index.html dengan memasukkan kode berikut di dalam elemen <head>.
<!--mengatur warna tema yang digunakan-->
<meta name="theme-color" content="#00897B"/>
<!--mengatur letak file manifes-->
<link rel="manifest" href="/manifest.json">
17. Terakhir simpan file icon di dalam folder project dan beri nama icon.png.
Hapus tanda komentar yang ada di nav.html agar icon muncul di halaman
kerja.
<li><a id="logo-container" class="brand-
logo center pulse"><img src=" img/icon.png" class="circle"
style="height: 23px;" href="#"></a></li>
18. Untuk menguji web app manifest telah berhasil di daftarkan, buka kembali
aplikasi PWA di Chrome, lalu buka tab Application di jendela Chrome Dev
Tools dan pilih menu Manifest di sebelah kiri. Periksa bahwa icon dan
elemen lainnya telah terdefinisikan di dalam file manifest.json.
19. Terakhir, install aplikasi dengan cara menekan tombol titik tiga dipojok
kanan atas, seperti yang ditunjukkan pada gambar di bawah ini. Lalu, klik
“Install ...”.
self.addEventListener('install', function(event){
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request, {cacheName:CACHE_NAME})
.then(function(response) {
if(response){
console.log("ServiceWorker: Gunakan aset dari
cache: ", response.url);
return response;
}
console.log("ServiceWorker: Memuat aset dari
server: ", event.request.url);
return fetch(event.request);
})
);
});
self.addEventListener("activate", function(event) {
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.map(function(cacheName) {
if (cacheName != CACHE_NAME) {
console.log("ServiceWorker: cache " + cacheName
+ " dihapus");
return caches.delete(cacheName);
}
})
);
})
);
});
Pada kode dari service worker di atas, terdapat urlsToCache yang isinya
merupakan file-file yang akan dicache sehingga dapat diakses apabila tidak ada
koneksi internet seperti gambar di bawah.
self.addEventListener('install', function(event){
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request, {cacheName:CACHE_NAME})
.then(function(response) {
if(response){
console.log("ServiceWorker: Gunakan aset dari
cache: ", response.url);
return response;
}
console.log("ServiceWorker: Memuat aset dari
server: ", event.request.url);
return fetch(event.request);
})
);
});
self.addEventListener("activate", function(event) {
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.map(function(cacheName) {
if (cacheName != CACHE_NAME) {
console.log("ServiceWorker: cache " + cacheName
+ " dihapus");
return caches.delete(cacheName);
}
})
);
})
);
});
Pada kode dari service worker di atas, terdapat urlsToCache yang isinya
merupakan file-file yang akan dicache sehingga dapat diakses apabila tidak ada
koneksi internet seperti gambar di bawah. Pada halaman ini, karena berisikan foto,
ditambahkan /img/arief.jpg dan /img/majid.jpg untuk di-cache.
3.6.2. Contact Us
self.addEventListener('install', function(event){
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request, {cacheName:CACHE_NAME})
.then(function(response) {
if(response){
console.log("ServiceWorker: Gunakan aset dari
cache: ", response.url);
return response;
}
console.log("ServiceWorker: Memuat aset dari
server: ", event.request.url);
return fetch(event.request);
})
);
});
self.addEventListener("activate", function(event) {
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.map(function(cacheName) {
if (cacheName != CACHE_NAME) {
console.log("ServiceWorker: cache " + cacheName
+ " dihapus");
return caches.delete(cacheName);
}
})
);
})
);
});
Pada kode dari service worker di atas, terdapat urlsToCache yang isinya
merupakan file-file yang akan dicache sehingga dapat diakses apabila tidak ada
koneksi internet seperti gambar di bawah.