{"id":10063,"date":"2019-05-13T06:00:38","date_gmt":"2019-05-13T04:00:38","guid":{"rendered":"https:\/\/www.tomislavstankovic.com\/blog\/?p=10063"},"modified":"2019-05-28T17:46:38","modified_gmt":"2019-05-28T15:46:38","slug":"ionic-4-pwa","status":"publish","type":"post","link":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/","title":{"rendered":"Ionic 4 PWA &#8211; kreiranje aplikacije"},"content":{"rendered":"<p>Do sada sam u blog postovima <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-framework-resursi\/\" rel=\"noopener noreferrer\" target=\"_blank\">pisao o<em> Ionic<\/em> aplikacijama<\/a> koje svoju budu\u0107nost temelje na objavi na nekoj od trgovina aplikacijama u <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/Android_application_package\" rel=\"noopener noreferrer\" target=\"_blank\">.apk<\/a><\/em> ili <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/.ipa\" rel=\"noopener noreferrer\" target=\"_blank\">.ipa<\/a><\/em> obliku. <\/p>\n<p>Ovaj \u0107e blog post i\u0107i u sasvim jednom drugom smjeru jer u potpunosti mogu zaobi\u0107i trgovine aplikacijama i svoju <em>PWA<\/em> aplikaciju objaviti jednako kao \u0161to bi objavio bilo koju web stranicu.<\/p>\n<h2>\u0160to je, Ionic, PWA?<\/h2>\n<p><em>Ionic 4 PWA<\/em> je zapravo obi\u010dna <em>Ionic 4<\/em> aplikacija prilago\u0111ena prikazu na svim platformama bez potrebe za objavom putem <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-aplikacija-google-play-store\/\" rel=\"noopener noreferrer\" target=\"_blank\">Google Play Storea<\/a><\/em>, <em>Apple App Storea<\/em> i sl.<\/p>\n<h2>Kreiranje projekta<\/h2>\n<p>Projekt kreiram ve\u0107 poznatom naredbom:<\/p>\n<pre class=\"lang:sh decode:true \" >$ ionic start Ionic4PWA blank\r\ncd Ionic4PWA<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-1-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-1-min.png\" alt=\"Ionic 4\" width=\"613\" height=\"439\" class=\"aligncenter size-full wp-image-10083\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-1-min.png 613w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-1-min-300x215.png 300w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/a><\/p>\n<p>U ovom koraku ovo je tek obi\u010dna <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/uvod-ionic-4\/\" rel=\"noopener noreferrer\" target=\"_blank\">Ionic 4<\/a><\/em> aplikacija. Za sada ne\u0107u instalirati <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-native-4x\/\" rel=\"noopener noreferrer\" target=\"_blank\">Ionic Native pluginove<\/a><\/em> jer mi za ovaj primjer ne\u0107e biti potrebni.<\/p>\n<pre class=\"lang:default decode:true \" > create mode 100644 .gitignore\r\n create mode 100644 angular.json\r\n create mode 100644 e2e\/protractor.conf.js\r\n create mode 100644 e2e\/src\/app.e2e-spec.ts\r\n create mode 100644 e2e\/src\/app.po.ts\r\n create mode 100644 e2e\/tsconfig.e2e.json\r\n create mode 100644 ionic.config.json\r\n create mode 100644 package-lock.json\r\n create mode 100644 package.json\r\n create mode 100644 src\/app\/app-routing.module.ts\r\n create mode 100644 src\/app\/app.component.html\r\n create mode 100644 src\/app\/app.component.spec.ts\r\n create mode 100644 src\/app\/app.component.ts\r\n create mode 100644 src\/app\/app.module.ts\r\n create mode 100644 src\/app\/home\/home.module.ts\r\n create mode 100644 src\/app\/home\/home.page.html\r\n create mode 100644 src\/app\/home\/home.page.scss\r\n create mode 100644 src\/app\/home\/home.page.spec.ts\r\n create mode 100644 src\/app\/home\/home.page.ts\r\n create mode 100644 src\/assets\/icon\/favicon.png\r\n create mode 100644 src\/assets\/shapes.svg\r\n create mode 100644 src\/environments\/environment.prod.ts\r\n create mode 100644 src\/environments\/environment.ts\r\n create mode 100644 src\/global.scss\r\n create mode 100644 src\/index.html\r\n create mode 100644 src\/karma.conf.js\r\n create mode 100644 src\/main.ts\r\n create mode 100644 src\/polyfills.ts\r\n create mode 100644 src\/test.ts\r\n create mode 100644 src\/theme\/variables.scss\r\n create mode 100644 src\/tsconfig.app.json\r\n create mode 100644 src\/tsconfig.spec.json\r\n create mode 100644 src\/tslint.json\r\n create mode 100644 src\/zone-flags.ts\r\n create mode 100644 tsconfig.json\r\n create mode 100644 tslint.json<\/pre>\n<h2>Dodavanje <em>PWA<\/em> funkcionalnosti<\/h2>\n<p>Za razliku od <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-framework-uvod\/\" rel=\"noopener noreferrer\" target=\"_blank\">Ionica 3<\/a><\/em> gdje je <a href=\"https:\/\/blog.ionicframework.com\/how-to-make-pwas-with-ionic\/\" rel=\"noopener noreferrer\" target=\"_blank\"><em>Service Worker<\/em> bio dodan od trenutka kreiranja aplikacija i samo ga je trebalo odkomentirati<\/a> unutar <em>index.html<\/em> datoteke kada je u pitaju <em>Ionic 4<\/em> to vi\u0161e nije slu\u010daj.<\/p>\n<figure id=\"attachment_10093\" aria-describedby=\"caption-attachment-10093\" style=\"width: 758px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-2-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-2-min.png\" alt=\"Ionic 3 PWA\" width=\"758\" height=\"501\" class=\"size-full wp-image-10093\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-2-min.png 758w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-2-min-300x198.png 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption id=\"caption-attachment-10093\" class=\"wp-caption-text\">How to make PWAs with Ionic 2017 &#8211; https:\/\/blog.ionicframework.com\/how-to-make-pwas-with-ionic\/<\/figcaption><\/figure>\n<p>Pretpostavka za kreiranje <em>PWA<\/em> su <em><strong><a href=\"https:\/\/developers.google.com\/web\/fundamentals\/primers\/service-workers\/\" rel=\"noopener noreferrer\" target=\"_blank\">Service Worker<\/a><\/strong> (ngsw-worker.js)<\/em> i <em><strong><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Manifest\" rel=\"noopener noreferrer\" target=\"_blank\">Web Manifest<\/a><\/strong> (manifest.json)<\/em>. Oboje \u0107u u projekt dodati pomo\u0107u naredbe:<\/p>\n<pre class=\"lang:sh decode:true \" >$ ng add @angular\/pwa <\/pre>\n<p>Pokretanjem te naredbe kreiraju se i a\u017euriraju razne datoteke.<\/p>\n<pre class=\"lang:default decode:true \" >Installed packages for tooling via npm.\r\nCREATE src\/ngsw-config.json (511 bytes)\r\nCREATE src\/manifest.json (1063 bytes)\r\nCREATE src\/assets\/icons\/icon-128x128.png (1253 bytes)\r\nCREATE src\/assets\/icons\/icon-144x144.png (1394 bytes)\r\nCREATE src\/assets\/icons\/icon-152x152.png (1427 bytes)\r\nCREATE src\/assets\/icons\/icon-192x192.png (1790 bytes)\r\nCREATE src\/assets\/icons\/icon-384x384.png (3557 bytes)\r\nCREATE src\/assets\/icons\/icon-512x512.png (5008 bytes)\r\nCREATE src\/assets\/icons\/icon-72x72.png (792 bytes)\r\nCREATE src\/assets\/icons\/icon-96x96.png (958 bytes)\r\nUPDATE angular.json (5754 bytes)\r\nUPDATE package.json (1809 bytes)\r\nUPDATE src\/app\/app.module.ts (970 bytes)\r\nUPDATE src\/index.html (851 bytes)<\/pre>\n<p>&#8211; kreirana je <a href=\"https:\/\/angular.io\/guide\/service-worker-config\" rel=\"noopener noreferrer\" target=\"_blank\">konfiguracijska datoteka<\/a> <em>Service Workera<\/em> <em><strong>ngsw-config.json<\/strong><\/em>. Trenutno se ovdje nalazi zadani naziv aplikacije <span class=\"lang:js decode:true crayon-inline\">&#8220;name&#8221;: &#8220;app&#8221;<\/span> koji mogu promijeniti u <span class=\"lang:js decode:true crayon-inline\">&#8220;name&#8221;: &#8220;ionic4pwa&#8221;<\/span>.<\/p>\n<pre class=\"lang:js decode:true \" title=\"ngsw-config.json\" >{\r\n  \"index\": \"\/index.html\",\r\n  \"assetGroups\": [\r\n    {\r\n      \"name\": \"app\",\r\n      \"installMode\": \"prefetch\",\r\n      \"resources\": {\r\n        \"files\": [\r\n          \"\/favicon.ico\",\r\n          \"\/index.html\",\r\n          \"\/*.css\",\r\n          \"\/*.js\"\r\n        ]\r\n      }\r\n    }, {\r\n      \"name\": \"assets\",\r\n      \"installMode\": \"lazy\",\r\n      \"updateMode\": \"prefetch\",\r\n      \"resources\": {\r\n        \"files\": [\r\n          \"\/assets\/**\",\r\n          \"\/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)\"\r\n        ]\r\n      }\r\n    }\r\n  ]\r\n}<\/pre>\n<p>&#8211; a\u017eurirana je <em><strong>angular.json<\/strong><\/em> datoteka kako bi podr\u017eavala <em>Service Worker<\/em><\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-3-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-3-min.png\" alt=\"angular.json pwa\" width=\"502\" height=\"222\" class=\"aligncenter size-full wp-image-10101\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-3-min.png 502w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-3-min-300x133.png 300w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/a><\/p>\n<p>&#8211; a\u017eurirana je <em><strong>package.json<\/strong><\/em> datoteka s ranije dodanim <em><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/pwa\" rel=\"noopener noreferrer\" target=\"_blank\">@angular\/pwa<\/a><\/em> tj. <em><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/service-worker\" rel=\"noopener noreferrer\" target=\"_blank\">@angular\/service-worker<\/a><\/em> paketom<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-4-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-4-min.png\" alt=\"ng add @angular\/pwa \" width=\"466\" height=\"452\" class=\"aligncenter size-full wp-image-10103\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-4-min.png 466w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-4-min-300x291.png 300w\" sizes=\"auto, (max-width: 466px) 100vw, 466px\" \/><\/a><\/p>\n<p>&#8211; a\u017eurirana je <em><strong>app.module.ts<\/strong><\/em> datoteka koja slu\u017ei za registraciju <em>Service Workera<\/em>. Ovdje se spominje <em><strong>ngsw-worker.js<\/strong><\/em> koja trenutno ne postoji unutar <em>Ionic<\/em> projekta, ali \u0107e se kreirati pokretanjem  <span class=\"lang:sh decode:true  crayon-inline \" >$ ionic build &#8211;prod<\/span> naredbe.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-5-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-5-min.png\" alt=\"ServiceWorkerModule\" width=\"584\" height=\"617\" class=\"aligncenter size-full wp-image-10107\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-5-min.png 584w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-5-min-284x300.png 284w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p>&#8211; a\u017eurirana je <em>index.html<\/em> datoteka tj.  <span class=\"lang:xhtml decode:true  crayon-inline \" >&lt;head&gt;<\/span> tag unutar kojega se spominje <em><strong>manifest.json<\/strong><\/em> datoteka. Ovdje tako\u0111er mogu promijeniti <span class=\"lang:js decode:true  crayon-inline \" >&#8220;name&#8221;: &#8220;app&#8221;, &#8220;short_name&#8221;: &#8220;app&#8221;,<\/span> u <span class=\"lang:js decode:true  crayon-inline \" >&#8220;name&#8221;: &#8220;Ionic4PWA&#8221;, &#8220;short_name&#8221;: &#8220;Ionic4PWA&#8221;,<\/span>.<\/p>\n<pre class=\"lang:js decode:true \" title=\"manifest.json\" >{\r\n  \"name\": \"app\",\r\n  \"short_name\": \"app\",\r\n  \"theme_color\": \"#1976d2\",\r\n  \"background_color\": \"#fafafa\",\r\n  \"display\": \"standalone\",\r\n  \"scope\": \"\/\",\r\n  \"start_url\": \"\/\",\r\n  \"icons\": [\r\n    {\r\n      \"src\": \"assets\/icons\/icon-72x72.png\",\r\n      \"sizes\": \"72x72\",\r\n      \"type\": \"image\/png\"\r\n    },\r\n...<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-6-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-6-min.png\" alt=\"index.html pwa manifest\" width=\"850\" height=\"618\" class=\"aligncenter size-full wp-image-10109\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-6-min.png 850w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-6-min-300x218.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-6-min-768x558.png 768w\" sizes=\"auto, (max-width: 850px) 100vw, 850px\" \/><\/a><\/p>\n<p>&#8211; kreirane su ikone za razli\u010dite platforme (zadane <em>Angular<\/em> ikone koje je za produkcijski projekt potrebno promijeniti)<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-7-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-7-min.png\" alt=\"PWA ikone\" width=\"1007\" height=\"449\" class=\"aligncenter size-full wp-image-10111\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-7-min.png 1007w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-7-min-300x134.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-7-min-768x342.png 768w\" sizes=\"auto, (max-width: 1007px) 100vw, 1007px\" \/><\/a><\/p>\n<h2>Produkcijska PWA aplikacija<\/h2>\n<p>Produkcijska PWA aplikacija kreira se naredbom:<\/p>\n<pre class=\"lang:sh decode:true   \" >$ ionic build --prod<\/pre>\n<p>Pokretanjem ove naredbe kreirat \u0107e se <strong><em>www<\/em><\/strong> mapa sa produkcijskom verzijom aplikacije spremnom za postavljanje na server.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-8-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-8-min.png\" alt=\"ionic build --prod\" width=\"731\" height=\"628\" class=\"aligncenter size-full wp-image-10121\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-8-min.png 731w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-8-min-300x258.png 300w\" sizes=\"auto, (max-width: 731px) 100vw, 731px\" \/><\/a><\/p>\n<p>Ovu <em>PWA<\/em> aplikaciju mogu pokrenuti i testirati naredbom:<\/p>\n<pre class=\"lang:sh decode:true \" >$ http-server .\/www -o<\/pre>\n<h2>Zaklju\u010dak<\/h2>\n<p>Struktura projekta prema <em><strong>package.json<\/strong><\/em><\/p>\n<pre class=\"lang:js decode:true \" title=\"package.json\" >{\r\n  \"name\": \"Ionic4PWA\",\r\n  \"version\": \"0.0.1\",\r\n  \"author\": \"Tomislav Stankovi\u0107\",\r\n  \"homepage\": \"https:\/\/www.tomislavstankovic.com\/\",\r\n  \"scripts\": {\r\n    \"ng\": \"ng\",\r\n    \"start\": \"ng serve\",\r\n    \"build\": \"ng build\",\r\n    \"test\": \"ng test\",\r\n    \"lint\": \"ng lint\",\r\n    \"e2e\": \"ng e2e\"\r\n  },\r\n  \"private\": true,\r\n  \"dependencies\": {\r\n    \"@angular\/common\": \"^7.2.2\",\r\n    \"@angular\/core\": \"^7.2.2\",\r\n    \"@angular\/forms\": \"^7.2.2\",\r\n    \"@angular\/http\": \"^7.2.2\",\r\n    \"@angular\/platform-browser\": \"^7.2.2\",\r\n    \"@angular\/platform-browser-dynamic\": \"^7.2.2\",\r\n    \"@angular\/pwa\": \"^0.12.4\",\r\n    \"@angular\/router\": \"^7.2.2\",\r\n    \"@angular\/service-worker\": \"^7.2.2\",\r\n    \"@ionic-native\/core\": \"^5.0.0\",\r\n    \"@ionic-native\/splash-screen\": \"^5.0.0\",\r\n    \"@ionic-native\/status-bar\": \"^5.0.0\",\r\n    \"@ionic\/angular\": \"^4.1.0\",\r\n    \"core-js\": \"^2.5.4\",\r\n    \"rxjs\": \"~6.5.1\",\r\n    \"tslib\": \"^1.9.0\",\r\n    \"zone.js\": \"~0.8.29\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"@angular-devkit\/architect\": \"~0.13.8\",\r\n    \"@angular-devkit\/build-angular\": \"~0.13.8\",\r\n    \"@angular-devkit\/core\": \"~7.3.8\",\r\n    \"@angular-devkit\/schematics\": \"~7.3.8\",\r\n    \"@angular\/cli\": \"~7.3.8\",\r\n    \"@angular\/compiler\": \"~7.2.2\",\r\n    \"@angular\/compiler-cli\": \"~7.2.2\",\r\n    \"@angular\/language-service\": \"~7.2.2\",\r\n    \"@ionic\/angular-toolkit\": \"~1.5.1\",\r\n    \"@types\/node\": \"~12.0.0\",\r\n    \"@types\/jasmine\": \"~2.8.8\",\r\n    \"@types\/jasminewd2\": \"~2.0.3\",\r\n    \"codelyzer\": \"~4.5.0\",\r\n    \"jasmine-core\": \"~2.99.1\",\r\n    \"jasmine-spec-reporter\": \"~4.2.1\",\r\n    \"karma\": \"~4.1.0\",\r\n    \"karma-chrome-launcher\": \"~2.2.0\",\r\n    \"karma-coverage-istanbul-reporter\": \"~2.0.1\",\r\n    \"karma-jasmine\": \"~1.1.2\",\r\n    \"karma-jasmine-html-reporter\": \"^0.2.2\",\r\n    \"protractor\": \"~5.4.0\",\r\n    \"ts-node\": \"~8.1.0\",\r\n    \"tslint\": \"~5.16.0\",\r\n    \"typescript\": \"~3.1.6\"\r\n  },\r\n  \"description\": \"An Ionic project\"\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Do sada sam u blog postovima pisao o Ionic aplikacijama koje svoju budu\u0107nost temelje na objavi na nekoj od trgovina aplikacijama u .apk ili .ipa obliku. Ovaj \u0107e blog post i\u0107i u sasvim jednom drugom smjeru jer u potpunosti mogu zaobi\u0107i trgovine aplikacijama i svoju PWA aplikaciju objaviti jednako kao \u0161to bi objavio bilo koju &hellip; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/\" class=\"more-link\">Nastavi \u010ditati <span class=\"screen-reader-text\">Ionic 4 PWA &#8211; kreiranje aplikacije<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":10069,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[564,351],"tags":[529,348,594],"class_list":["post-10063","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile","category-razvoj","tag-ionic-4","tag-ionic-framework","tag-pwa"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ionic 4 PWA - kreiranje aplikacije - Tomislav Stankovi\u0107<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ionic 4 PWA - kreiranje aplikacije - Tomislav Stankovi\u0107\" \/>\n<meta property=\"og:description\" content=\"Do sada sam u blog postovima pisao o Ionic aplikacijama koje svoju budu\u0107nost temelje na objavi na nekoj od trgovina aplikacijama u .apk ili .ipa obliku. Ovaj \u0107e blog post i\u0107i u sasvim jednom drugom smjeru jer u potpunosti mogu zaobi\u0107i trgovine aplikacijama i svoju PWA aplikaciju objaviti jednako kao \u0161to bi objavio bilo koju &hellip; Nastavi \u010ditati Ionic 4 PWA &#8211; kreiranje aplikacije\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/\" \/>\n<meta property=\"og:site_name\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-13T04:00:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-28T15:46:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-min.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"825\" \/>\n\t<meta property=\"og:image:height\" content=\"510\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisao\/la\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomislav Stankovi\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Procijenjeno vrijeme \u010ditanja\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/\"},\"author\":{\"name\":\"Tomislav Stankovi\u0107\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"headline\":\"Ionic 4 PWA &#8211; kreiranje aplikacije\",\"datePublished\":\"2019-05-13T04:00:38+00:00\",\"dateModified\":\"2019-05-28T15:46:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/\"},\"wordCount\":405,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/ionic4-pwa-min.jpg\",\"keywords\":[\"Ionic 4\",\"Ionic Framework\",\"PWA\"],\"articleSection\":[\"Mobile\",\"Razvoj\"],\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/\",\"name\":\"Ionic 4 PWA - kreiranje aplikacije - Tomislav Stankovi\u0107\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/ionic4-pwa-min.jpg\",\"datePublished\":\"2019-05-13T04:00:38+00:00\",\"dateModified\":\"2019-05-28T15:46:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/ionic4-pwa-min.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/ionic4-pwa-min.jpg\",\"width\":825,\"height\":510,\"caption\":\"Ionic 4 PWA\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-4-pwa\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ionic 4 PWA &#8211; kreiranje aplikacije\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"name\":\"Tomislav Stankovi\u0107\",\"description\":\"Sam svoj bloger\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\",\"name\":\"Tomislav Stankovi\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"width\":248,\"height\":165,\"caption\":\"Tomislav Stankovi\u0107\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\"},\"description\":\"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.\",\"sameAs\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tomislavstankovic\\\/\"],\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/author\\\/tomislavstankovic\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ionic 4 PWA - kreiranje aplikacije - Tomislav Stankovi\u0107","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/","og_locale":"hr_HR","og_type":"article","og_title":"Ionic 4 PWA - kreiranje aplikacije - Tomislav Stankovi\u0107","og_description":"Do sada sam u blog postovima pisao o Ionic aplikacijama koje svoju budu\u0107nost temelje na objavi na nekoj od trgovina aplikacijama u .apk ili .ipa obliku. Ovaj \u0107e blog post i\u0107i u sasvim jednom drugom smjeru jer u potpunosti mogu zaobi\u0107i trgovine aplikacijama i svoju PWA aplikaciju objaviti jednako kao \u0161to bi objavio bilo koju &hellip; Nastavi \u010ditati Ionic 4 PWA &#8211; kreiranje aplikacije","og_url":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/","og_site_name":"Tomislav Stankovi\u0107","article_published_time":"2019-05-13T04:00:38+00:00","article_modified_time":"2019-05-28T15:46:38+00:00","og_image":[{"width":825,"height":510,"url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-min.jpg","type":"image\/jpeg"}],"author":"Tomislav Stankovi\u0107","twitter_card":"summary_large_image","twitter_misc":{"Napisao\/la":"Tomislav Stankovi\u0107","Procijenjeno vrijeme \u010ditanja":"5 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/#article","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/"},"author":{"name":"Tomislav Stankovi\u0107","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"headline":"Ionic 4 PWA &#8211; kreiranje aplikacije","datePublished":"2019-05-13T04:00:38+00:00","dateModified":"2019-05-28T15:46:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/"},"wordCount":405,"commentCount":0,"publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-min.jpg","keywords":["Ionic 4","Ionic Framework","PWA"],"articleSection":["Mobile","Razvoj"],"inLanguage":"hr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/","url":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/","name":"Ionic 4 PWA - kreiranje aplikacije - Tomislav Stankovi\u0107","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/#primaryimage"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-min.jpg","datePublished":"2019-05-13T04:00:38+00:00","dateModified":"2019-05-28T15:46:38+00:00","breadcrumb":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/#primaryimage","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-min.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/ionic4-pwa-min.jpg","width":825,"height":510,"caption":"Ionic 4 PWA"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-4-pwa\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/www.tomislavstankovic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ionic 4 PWA &#8211; kreiranje aplikacije"}]},{"@type":"WebSite","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website","url":"https:\/\/www.tomislavstankovic.com\/blog\/","name":"Tomislav Stankovi\u0107","description":"Sam svoj bloger","publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tomislavstankovic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d","name":"Tomislav Stankovi\u0107","image":{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","width":248,"height":165,"caption":"Tomislav Stankovi\u0107"},"logo":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg"},"description":"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.","sameAs":["https:\/\/www.tomislavstankovic.com\/blog\/","https:\/\/www.linkedin.com\/in\/tomislavstankovic\/"],"url":"https:\/\/www.tomislavstankovic.com\/blog\/author\/tomislavstankovic\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/10063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/comments?post=10063"}],"version-history":[{"count":49,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/10063\/revisions"}],"predecessor-version":[{"id":10211,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/10063\/revisions\/10211"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media\/10069"}],"wp:attachment":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media?parent=10063"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/categories?post=10063"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/tags?post=10063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}