{"id":4432,"date":"2022-10-26T10:00:14","date_gmt":"2022-10-26T14:00:14","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=4432"},"modified":"2023-05-17T14:57:23","modified_gmt":"2023-05-17T18:57:23","slug":"self-hosted-live-updates-are-here","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here","title":{"rendered":"Self-hosted Live Updates are here!"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Long gone are the days of waiting for the app store to approve updates to your applications. With <a href=\"https:\/\/ionic.io\/appflow\/live-updates\">Live Updates from Appflow<\/a>, <\/span><span style=\"font-weight: 400;\">Ionic\u2019s mobile DevOps platform, developers can push live app updates directly to users and testers instantly. Live Updates lets companies seamlessly integrate their codebase, generate web build artifacts, and push real-time app changes to their users&#8217; devices. Appflow\u2019s secure pipeline has <\/span><span style=\"font-weight: 400;\">facilitated<\/span><span style=\"font-weight: 400;\"> hundreds of millions of Live Updates, saving organizations time, money, and countless headaches.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We\u2019ve also heard time and time again &#8211; large enterprises want to use Live Updates, but strict compliance standards get in the way. Until now.<\/span><\/p>\n<p><span style=\"color: #176bff;\"><a style=\"color: #176bff;\" href=\"https:\/\/ionic.io\/docs\/appflow\/deploy\/setup\/self-hosted\"><b>\u2192 We\u2019re excited to announce Self-hosted Live Updates, the next iteration of Appflow\u2019s Live Updates!<\/b><\/a><\/span><\/p>\n<p><span style=\"font-weight: 400;\">While many enterprises leverage the Live Updates SDK to pull down the latest JavaScript, HTML, and CSS changes into their applications, others are hampered by corporate policy, industry regulations, or other geographical restrictions. With Self-hosted Live Updates, you are now able to distribute web build artifacts through your own infrastructure. That means no more app store delays, quicker bug fixes and content changes, and ensuring your users are always on the app\u2019s latest version.<\/span><\/p>\n<p><!--more--><\/p>\n<h2>How do self-hosted live updates work?<\/h2>\n<p><span style=\"font-weight: 400;\">Appflow-hosted Live Updates can be configured and deployed easily <\/span><a href=\"https:\/\/dashboard.ionicframework.com\/\"><span style=\"font-weight: 400;\">in Appflow<\/span><\/a>\u00a0<span style=\"font-weight: 400;\">with the Appflow SDK<\/span><span style=\"font-weight: 400;\">. For Self-hosted Live Updates, we&#8217;ve added functionality to the Ionic Cloud CLI and built a new Capacitor-based Live Updates plugin for configuration on your own infrastructure.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In order for Appflow to ensure a securely coordinated delivery of the newly updated web build artifacts to end-users, the Capacitor Live Updates plugin now utilizes a public\/private key pairing. The additional handshake when using Self-hosted Live Updates adds peace of mind that the artifacts delivered by the enterprise\u2019s infrastructure and pulled down via the plugin have remained unmodified.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The following walks through the steps to set up the key pairing as well as the workflow that ultimately brings the updated experience to end users.<\/span><\/p>\n<h3>One-time key pair setup<\/h3>\n<p><span style=\"font-weight: 400;\">To generate a public\/private key pair, enterprises can utilize the following Ionic Cloud CLI command:<\/span><\/p>\n<pre><code>ionic-cloud live-update generate-signing-key<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">The resulting private key is stored within the organization\u2019s CI\/CD platform. On the app side, the Live Updates plugin must be installed:<\/span><\/p>\n<pre><code class=\"language-shell\">npm install @capacitor\/live-updates\nnpx cap sync<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">Once installed, the public key file path can be added to the Capacitor configuration file (<code>capacitor.config.ts<\/code> or <code>capacitor.config.json<\/code>) inside a \u201cLiveUpdates\u201d section under plugins. It should look as follows:<\/span><\/p>\n<pre><code class=\"language-typescript\">import { CapacitorConfig } from &#039;@capacitor\/cli&#039;;\nconst config: CapacitorConfig = {\n  appId: &#039;com.company.appname&#039;,\n  appName: &#039;My Capacitor App&#039;,\n  webDir: &#039;www&#039;,\n  plugins: {\n    LiveUpdates: {\n      appId: &#039;042a1261&#039;,\n      channel: &#039;production&#039;,\n      autoUpdateMethod: &#039;background&#039;,\n      maxVersions: 2,\n      key: &#039;public_key.pem&#039;,\n    },\n  },\n};\nexport default config;\n<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">With the remaining \u201cLiveUpdates\u201d properties set to your preferences and the ability to handshake the public and private keys, Appflow can safely exchange live updates.<\/span><\/p>\n<h3>Self-hosted live updates workflow<\/h3>\n<p><span style=\"font-weight: 400;\">Implementing Self-hosted Live Updates begins with an enterprise performing a web build of their bug fix, content updates, or other web-based code changes. They then sign the build artifact with the private key obtained from the one-time setup and upload the bundle to the storage location of their choice.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Appflow must then be informed of a new Live Update that is ready for consumption. This is done via another Ionic Cloud CLI command:<\/span><\/p>\n<pre><code>ionic-cloud live-update register-artifact --location=&quot;https:\/\/abc.com\/app\/updates\/abc123.zip&quot;<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">Once the command is run, Appflow is aware of a new update ready to be distributed to the app\u2019s users. Now, when the app is started, the Live Updates plugin checks with Appflow to see if any changes need to be brought down.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Appflow responds back to the plugin with \u201cYes, an update is available\u201d and the Live Updates plugin downloads the new live update using the URL location provided from the <code>register<\/code> CLI command:<\/span><\/p>\n<pre><code>https:\/\/abc.com\/app\/updates\/abc123.zip<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">The organization\u2019s API returns the Live Update bundle from the location, and the app applies the live update. Voil\u00e0!<\/span><\/p>\n<h2>Ionic Portals Support<\/h2>\n<p><span style=\"font-weight: 400;\">In addition to leveraging <strong>self-hosted live updates<\/strong> in their Capacitor apps, enterprises can use them in native iOS and Android apps using Ionic Portals. <\/span><a href=\"https:\/\/ionic.io\/portals\"><span style=\"font-weight: 400;\">Portals<\/span><\/a><span style=\"font-weight: 400;\"> is a supercharged native WebView component that lets you add web-based experiences to native mobile apps. It enables native and web teams to better collaborate and bring new and existing web experiences to mobile in a safe, controlled way.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Using <strong>self-hosted live updates<\/strong> with Ionic Portals is similar to the Capacitor instructions above. Each Portal can be updated independent of the rest of the code in the application. This allows teams to iterate quickly and fix critical issues by pushing updates directly to your users, when you&#8217;re ready, for immediate impact.<\/span><\/p>\n<h2>Get started<\/h2>\n<p><span style=\"font-weight: 400;\">We\u2019re excited to bring the power of Live Updates to more enterprises than ever. Organizations and app users alike will quickly realize the benefits of Appflow\u2019s secure distribution of over-the-air app updates.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For more information on Self-hosted Live Updates by Appflow, you can <a href=\"https:\/\/ionic.io\/docs\/appflow\/deploy\/setup\/self-hosted\">check out the docs<\/a>. Ready to deploy instant app updates directly to your users? <\/span><a href=\"https:\/\/ionic.io\/contact\/sales\"><span style=\"font-weight: 400;\">Contact sales today!<\/span><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Long gone are the days of waiting for the app store to approve updates to your applications. With Live Updates from Appflow, Ionic\u2019s mobile DevOps platform, developers can push live app updates directly to users and testers instantly. Live Updates lets companies seamlessly integrate their codebase, generate web build artifacts, and push real-time app changes [&hellip;]<\/p>\n","protected":false},"author":94,"featured_media":4456,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"0","publish_post_category":"20","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"554633","discourse_permalink":"https:\/\/forum.ionicframework.com\/t\/self-hosted-live-updates-are-here\/228024","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,120,122],"tags":[128,259,258],"class_list":["post-4432","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-announcements","category-product","tag-appflow","tag-live-updates","tag-mobile-ci-cd"],"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>Self-hosted Live Updates are here! - Ionic Blog<\/title>\n<meta name=\"description\" content=\"Self-hosted live updates enable organizations with strict security policies to leverage the benefits of Appflow\u2019s live updates feature.\" \/>\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\/self-hosted-live-updates-are-here\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Self-hosted Live Updates are here!\" \/>\n<meta property=\"og:description\" content=\"Self-hosted live updates enable organizations with strict security policies to leverage the benefits of Appflow\u2019s live updates feature.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-26T14:00:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-17T18:57:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"880\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Conner Simmons\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@connerwsimmons\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Conner Simmons\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here\"},\"author\":{\"name\":\"Conner Simmons\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/b663dd102585af4f59055f5f8ff9defd\"},\"headline\":\"Self-hosted Live Updates are here!\",\"datePublished\":\"2022-10-26T14:00:14+00:00\",\"dateModified\":\"2023-05-17T18:57:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here\"},\"wordCount\":788,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png\",\"keywords\":[\"Appflow\",\"Live Updates\",\"Mobile CI\/CD\"],\"articleSection\":[\"All\",\"Announcements\",\"Product\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here\",\"url\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here\",\"name\":\"Self-hosted Live Updates are here! - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png\",\"datePublished\":\"2022-10-26T14:00:14+00:00\",\"dateModified\":\"2023-05-17T18:57:23+00:00\",\"description\":\"Self-hosted live updates enable organizations with strict security policies to leverage the benefits of Appflow\u2019s live updates feature.\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png\",\"width\":1600,\"height\":880},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Self-hosted Live Updates are here!\"}]},{\"@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\/b663dd102585af4f59055f5f8ff9defd\",\"name\":\"Conner Simmons\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/03\/112-234-1-copy-150x150.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/03\/112-234-1-copy-150x150.jpg\",\"caption\":\"Conner Simmons\"},\"description\":\"Product Team\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/connersimmons\/\",\"https:\/\/x.com\/connerwsimmons\"],\"jobTitle\":\"Product Evangelist\",\"worksFor\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/author\/conner\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Self-hosted Live Updates are here! - Ionic Blog","description":"Self-hosted live updates enable organizations with strict security policies to leverage the benefits of Appflow\u2019s live updates feature.","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\/self-hosted-live-updates-are-here","og_locale":"en_US","og_type":"article","og_title":"Self-hosted Live Updates are here!","og_description":"Self-hosted live updates enable organizations with strict security policies to leverage the benefits of Appflow\u2019s live updates feature.","og_url":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here","og_site_name":"Ionic Blog","article_published_time":"2022-10-26T14:00:14+00:00","article_modified_time":"2023-05-17T18:57:23+00:00","og_image":[{"width":1600,"height":880,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png","type":"image\/png"}],"author":"Conner Simmons","twitter_card":"summary_large_image","twitter_creator":"@connerwsimmons","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Conner Simmons","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here"},"author":{"name":"Conner Simmons","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/b663dd102585af4f59055f5f8ff9defd"},"headline":"Self-hosted Live Updates are here!","datePublished":"2022-10-26T14:00:14+00:00","dateModified":"2023-05-17T18:57:23+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here"},"wordCount":788,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png","keywords":["Appflow","Live Updates","Mobile CI\/CD"],"articleSection":["All","Announcements","Product"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here","url":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here","name":"Self-hosted Live Updates are here! - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png","datePublished":"2022-10-26T14:00:14+00:00","dateModified":"2023-05-17T18:57:23+00:00","description":"Self-hosted live updates enable organizations with strict security policies to leverage the benefits of Appflow\u2019s live updates feature.","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png","width":1600,"height":880},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/self-hosted-live-updates-are-here#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Self-hosted Live Updates are here!"}]},{"@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\/b663dd102585af4f59055f5f8ff9defd","name":"Conner Simmons","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/03\/112-234-1-copy-150x150.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/03\/112-234-1-copy-150x150.jpg","caption":"Conner Simmons"},"description":"Product Team","sameAs":["https:\/\/www.linkedin.com\/in\/connersimmons\/","https:\/\/x.com\/connerwsimmons"],"jobTitle":"Product Evangelist","worksFor":"Ionic","url":"https:\/\/ionic.io\/blog\/author\/conner"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/10\/appflowliveupdates-feature-image-1.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/4432","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\/94"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=4432"}],"version-history":[{"count":2,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/4432\/revisions"}],"predecessor-version":[{"id":5278,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/4432\/revisions\/5278"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/4456"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=4432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=4432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=4432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}