{"id":1349,"date":"2016-08-30T13:42:57","date_gmt":"2016-08-30T13:42:57","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=1349"},"modified":"2017-01-09T06:53:24","modified_gmt":"2017-01-09T06:53:24","slug":"navigating-the-world-of-progressive-web-apps-with-ionic-2","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2","title":{"rendered":"Navigating the World of Progressive Web Apps with Ionic 2"},"content":{"rendered":"<p>Building progressive web apps can be hard. Getting what is traditionally considered a \u201cnative\u201d look and feel on the web is something that many web technologies are just getting the hang of. The awesome thing about Ionic is that we specialize in providing the native look and feel PWA\u2019s strive for, with performant, native style components and a complete base to build your PWA on, so you can just focus on building something cool.<\/p>\n<p>This is why Ionic is the perfect platform for building progressive web apps and the reason I chose to build my latest PWA, <a href=\"https:\/\/jgw96.github.io\/Ionic2-Hacker-News\/www\/\">IonicHN<\/a>, with Ionic 2. Also, for those not familiar with what a PWA is, check out <a href=\"https:\/\/ionic.io\/blog\/what-is-a-progressive-web-app\/\">this article<\/a> for more info.<br \/>\n<!--more--><\/p>\n<p>Since Ionic 2 is built with web technologies that normally run in a WebView when packaged as a native app, it&#8217;s already built to work perfectly in the browser\u2014in fact, IonicHN runs just as well as a packaged app as it does as a PWA. This gives you a huge advantage when building your PWA with Ionic, because if you know how to build an Ionic 2 app packaged as a native app, then you are already 95% of the way to building a PWA. Just add a service worker and a manifest, and you\u2019re ready to deploy!<\/p>\n<h3>What Makes a Web App a PWA?<\/h3>\n<p>There are a few key things that make a PWA, well, a PWA. You\u2019ll notice as I go down this list that Ionic already takes care of a lot of this for you.<\/p>\n<p>First, a PWA is meant to be eventually installed to the user&#8217;s home screen, which means they will access it exactly like they would a native app. Due to this, many users expect a similar experience to a native app. Luckily, Ionic 2 is designed to create a native app experience with standard web technologies, so this is already handled for you.<\/p>\n<p>Second, a PWA should be very performant. Remember that your PWA is gonna be installed to the home screen right alongside native apps. Ionic 2 is built from the ground up with performance in mind, which means you barely have to think about it.<\/p>\n<p>Third, the thing that most differentiates a progressive web app from a normal web app is the fact that it can be installed to the home screen. This requires that you write a <a href=\"https:\/\/developers.google.com\/web\/fundamentals\/engage-and-retain\/web-app-manifest\/?hl=en\">web manifest<\/a> for your app. While this is not something Ionic currently does for you, I&#8217;ll show you just how easy it is.<\/p>\n<p>Finally, the majority of native apps will launch offline and give at least a limited offline experience to the user. In the past, this was outside of what was possible with web apps, but with <a href=\"https:\/\/developers.google.com\/web\/fundamentals\/getting-started\/push-notifications\/step-03?hl=en\">service workers<\/a> we can now make our web apps work while offline. This is also something Ionic 2 doesn\u2019t currently do for you, but while service workers may seem like daunting JavaScript monsters that are out to get you, I&#8217;ll show you just how simple it can be to add a service worker to your Ionic 2 PWA.<\/p>\n<h3>Adding a Web Manifest<\/h3>\n<p>So, you&#8217;ve built your Ionic 2 app and are ready to transform it into a PWA. All you&#8217;re missing at this point is a web manifest and a service worker. First, let&#8217;s add a web manifest to your Ionic 2 app. Simply open up the <code>www<\/code> directory and add a file named <code>manifest.json<\/code>. In this file, we&#8217;re going to list a few things that the browser uses to install your app to the user&#8217;s home screen.<\/p>\n<p>Below is an example of my web manifest for IonicHN:<\/p>\n<pre><code class=\"json\">{\n  &quot;name&quot;: &quot;IonicHN&quot;,\n  &quot;short_name&quot;: &quot;IonicHN&quot;,\n  &quot;start_url&quot;: &quot;index.html&quot;,\n  &quot;display&quot;: &quot;standalone&quot;,\n  &quot;icons&quot;: [{\n    &quot;src&quot;: &quot;img\/icon.png&quot;,\n    &quot;sizes&quot;: &quot;512x512&quot;,\n    &quot;type&quot;: &quot;image\/png&quot;\n  }],\n  &quot;background_color&quot;: &quot;#FF9800&quot;,\n  &quot;theme_color&quot;: &quot;#FF9800&quot;\n}\n<\/code><\/pre>\n<p>Once you&#8217;ve created this file and filled out the info for your app, you must link to your web manifest from your <code>index.html<\/code> file in the www directory. To do this, simply open that file and add this line into the head:<\/p>\n<pre><code class=\"html\">&lt;link rel=&quot;manifest&quot; href=&quot;manifest.json&quot;&gt;\n<\/code><\/pre>\n<p>And that&#8217;s it; you&#8217;ve added a web manifest to your Ionic app!<\/p>\n<h3>Adding a Service Worker<\/h3>\n<p>Now, to tackle the offline situation. While you can get as in-depth and complicated as you like with your service workers, one of the simplest ways to get started is with the service workers provided in <a href=\"https:\/\/github.com\/GoogleChrome\/samples\/tree\/gh-pages\/service-worker\">this handy repo<\/a> from the Google Chrome team, which provides many different service workers with comments about what they do, as well as demos of each.<\/p>\n<p>To add one of these service worker implementations to your Ionic app, simply create a file in the <code>www<\/code> directory named <code>sw.js<\/code> and copy and paste the service worker you picked to that file. Once that\u2019s done, you can add a little JavaScript to your <code>index.html<\/code> file that will make the service worker do its thing. Simply open the <code>index.html<\/code> file in your <code>www<\/code> folder and add this code to the head:<\/p>\n<pre><code class=\"typescript\">if (&#039;serviceWorker&#039; in navigator) {\n  navigator.serviceWorker.register(&#039;sw.js&#039;).then((registration) =&gt; { \n    \/\/ Registration was successful \n    console.log(&#039;ServiceWorker registration successful with scope: &#039;, registration.scope);\n  }).catch((err) =&gt; {\n     \/\/ registration failed \n     console.log(&#039;ServiceWorker registration failed: &#039;, err); });\n}\n<\/code><\/pre>\n<p>Now, simply run <code>ionic serve<\/code> inside your project directory from the command line and bask in the glory of your first PWA built with Ionic!<\/p>\n<p>Welcome to the PWA world! We&#8217;re happy you&#8217;ve joined us.? As you can see, Ionic 2 makes building PWAs extremely easy, and we&#8217;re extremely excited to see what awesome PWAs you build with Ionic 2. If you&#8217;ve built a PWA with Ionic and are ready to show it off, feel free to <a href=\"https:\/\/twitter.com\/ionicframework\">tweet at us<\/a>&#8211;we&#8217;d love to see what you&#8217;ve built!<\/p>\n<p>Progressive Web Apps are a major initiative for us, and PWAs are going to be a first class platform for deployment with Ionic apps soon. To us, Progressive Web Apps are the future, and we look forward to supporting them extensively in Ionic. Keep an eye on our blog and <a href=\"http:\/\/ionicframework.com\/docs\/v2\/resources\/progressive-web-apps\/\">our docs<\/a> for updates!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Building progressive web apps can be hard. Getting what is traditionally considered a \u201cnative\u201d look and feel on the web is something that many web technologies are just getting the hang of. The awesome thing about Ionic is that we specialize in providing the native look and feel PWA\u2019s strive for, with performant, native style [&hellip;]<\/p>\n","protected":false},"author":36,"featured_media":1030,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[13,22,34,35],"class_list":["post-1349","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","tag-ionic-2","tag-progressive-web-apps","tag-pwas","tag-service-workers"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Navigating the World of Progressive Web Apps with Ionic 2 - Ionic Blog<\/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:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Navigating the World of Progressive Web Apps with Ionic 2\" \/>\n<meta property=\"og:description\" content=\"Building progressive web apps can be hard. Getting what is traditionally considered a \u201cnative\u201d look and feel on the web is something that many web technologies are just getting the hang of. The awesome thing about Ionic is that we specialize in providing the native look and feel PWA\u2019s strive for, with performant, native style [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-08-30T13:42:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-01-09T06:53:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"940\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Justin Willis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Justinwillis96\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Justin Willis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2\"},\"author\":{\"name\":\"Justin Willis\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/55d9972c8b3e5ba54f29b041b8766d74\"},\"headline\":\"Navigating the World of Progressive Web Apps with Ionic 2\",\"datePublished\":\"2016-08-30T13:42:57+00:00\",\"dateModified\":\"2017-01-09T06:53:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2\"},\"wordCount\":944,\"commentCount\":19,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png\",\"keywords\":[\"Ionic 2\",\"Progressive Web Apps\",\"PWAs\",\"service workers\"],\"articleSection\":[\"All\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2\",\"url\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2\",\"name\":\"Navigating the World of Progressive Web Apps with Ionic 2 - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png\",\"datePublished\":\"2016-08-30T13:42:57+00:00\",\"dateModified\":\"2017-01-09T06:53:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png\",\"width\":1400,\"height\":940,\"caption\":\"Progressive Web Apps with Ionic\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Navigating the World of Progressive Web Apps with Ionic 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/55d9972c8b3e5ba54f29b041b8766d74\",\"name\":\"Justin Willis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/08\/65499728661_017a7b09d0bed667b769_512-150x150.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/08\/65499728661_017a7b09d0bed667b769_512-150x150.jpg\",\"caption\":\"Justin Willis\"},\"sameAs\":[\"https:\/\/x.com\/@Justinwillis96\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/justinwillis\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Navigating the World of Progressive Web Apps with Ionic 2 - Ionic Blog","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:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2","og_locale":"en_US","og_type":"article","og_title":"Navigating the World of Progressive Web Apps with Ionic 2","og_description":"Building progressive web apps can be hard. Getting what is traditionally considered a \u201cnative\u201d look and feel on the web is something that many web technologies are just getting the hang of. The awesome thing about Ionic is that we specialize in providing the native look and feel PWA\u2019s strive for, with performant, native style [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2","og_site_name":"Ionic Blog","article_published_time":"2016-08-30T13:42:57+00:00","article_modified_time":"2017-01-09T06:53:24+00:00","og_image":[{"width":1400,"height":940,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png","type":"image\/png"}],"author":"Justin Willis","twitter_card":"summary_large_image","twitter_creator":"@Justinwillis96","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Justin Willis","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2"},"author":{"name":"Justin Willis","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/55d9972c8b3e5ba54f29b041b8766d74"},"headline":"Navigating the World of Progressive Web Apps with Ionic 2","datePublished":"2016-08-30T13:42:57+00:00","dateModified":"2017-01-09T06:53:24+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2"},"wordCount":944,"commentCount":19,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png","keywords":["Ionic 2","Progressive Web Apps","PWAs","service workers"],"articleSection":["All"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2","url":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2","name":"Navigating the World of Progressive Web Apps with Ionic 2 - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png","datePublished":"2016-08-30T13:42:57+00:00","dateModified":"2017-01-09T06:53:24+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png","width":1400,"height":940,"caption":"Progressive Web Apps with Ionic"},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/navigating-the-world-of-progressive-web-apps-with-ionic-2#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Navigating the World of Progressive Web Apps with Ionic 2"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/55d9972c8b3e5ba54f29b041b8766d74","name":"Justin Willis","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/08\/65499728661_017a7b09d0bed667b769_512-150x150.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/08\/65499728661_017a7b09d0bed667b769_512-150x150.jpg","caption":"Justin Willis"},"sameAs":["https:\/\/x.com\/@Justinwillis96"],"url":"https:\/\/ionic.io\/blog\/author\/justinwillis"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/05\/what-is-pwa-img.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=1349"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1349\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/1030"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=1349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=1349"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=1349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}