{"id":1102,"date":"2016-06-13T19:20:04","date_gmt":"2016-06-13T19:20:04","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=1102"},"modified":"2020-10-16T19:25:11","modified_gmt":"2020-10-16T19:25:11","slug":"deeplinking-in-ionic-apps","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps","title":{"rendered":"Deeplinking in Ionic Apps"},"content":{"rendered":"<blockquote><p>\n  The following is a guide from 2016. We\u2019ve since released a Capacitor guide covering how to implement Universal Links (iOS) and App Links (Android) &#8211; available <a href=\"https:\/\/capacitorjs.com\/docs\/guides\/deep-links\">here<\/a>. No native plugin required! \ud83c\udf89\n<\/p><\/blockquote>\n<p>I was doing some research on common challenges developers face while building their Ionic apps, and one of the things that kept coming up was Deeplinking.<\/p>\n<p>For those not familiar, Deeplinking makes it possible to direct a user to content hidden deep in a native app, whether that&#8217;s from another app or a web browser. As web developers we live and breathe deep-linking because that was the major innovation of the web. Native apps are only just catching up, and so it hasn&#8217;t always been obvious how to link into an app the way we link into a webpage.<\/p>\n<p><!--more--><\/p>\n<p>Deeplinking as a concept has evolved heavily over the last few years, with mobile devices going from supporting custom URL schemes (like <code>instagram:\/\/<\/code>) to now opening native apps in response to navigation to URLs (like <code>amazon.com<\/code>). Additionally, OS&#8217;s now support powerful ways to index and search data inside of native apps. Each evolution in the deeplinking feature set has caused churn in both what mobile devices support and what they no longer support, making it a tall order to keep up.<\/p>\n<p>To help Ionic developers deeplink more easily, we are excited to announce a new, official way to deeplink into both Ionic 1 and Ionic 2 apps (and non-ionic Cordova apps): the <a href=\"https:\/\/github.com\/driftyco\/ionic-plugin-deeplinks\">Ionic Deeplinks Plugin<\/a> along with <a href=\"https:\/\/github.com\/driftyco\/ionic-native\">Ionic Native<\/a> 1.3.0. Let&#8217;s take a look at how it works:<\/p>\n<h3>Choosing a Deeplink<\/h3>\n<p>The first thing we need to do is figure out what kind of deeplink we want our app to respond to. Let&#8217;s say we run a Hat Shop and we have a website version of our store where we display our many fancy Hats. A URL to one of those Hats might look like <code>https:\/\/ionic-hats.com\/hats\/very-nice-hat<\/code>.<\/p>\n<p>We can actually launch our app when someone navigates to this URL on Android or iOS and display the app version of the Hat product page. Additionally, let&#8217;s say we want to enable a custom URL scheme of the form <code>ionichats:\/\/app\/hats\/very-nice-hat<\/code>.<\/p>\n<p>Now that we have our URL scheme, website, and deeplinking path decided, let&#8217;s install the Deeplinks Plugin:<\/p>\n<h3>Installing Ionic Deeplinks<\/h3>\n<p>The Ionic Deeplinks plugin requires some variables in order to get set up properly:<\/p>\n<pre><code class=\"language-bash\">cordova plugin add ionic-plugin-deeplinks --variable URL_SCHEME=ionichats --variable DEEPLINK_SCHEME=https --variable DEEPLINK_HOST=ionic-hats.com\n<\/code><\/pre>\n<p>In the install command, we provide the custom URL scheme we want to handle (<code>ionichats<\/code>), the host domain we will respond to (<code>ionic-hats.com<\/code>) and the host protocol we will listen for, which 99% of the time will be <code>https<\/code> as it&#8217;s required on iOS and Android.<\/p>\n<p>We&#8217;re almost ready to handle deeplinks, we just need to configure Universal Links on iOS and App Links on Android 6.0 so our app can open when navigating to <code>ionic-hats.com<\/code>.<\/p>\n<h3>Configuring Universal Links (iOS) and App Links (Android)<\/h3>\n<p>To configure iOS and Android, we need to enable <a href=\"https:\/\/developer.apple.com\/library\/ios\/documentation\/General\/Conceptual\/AppSearch\/UniversalLinks.html\">Universal Links<\/a> for iOS, and <a href=\"https:\/\/developer.android.com\/training\/app-links\/index.html\">App Links<\/a> for Android (6.0+). This process is primarily done on the server side of your website. You&#8217;ll publish a specific json file for iOS and one for Android, ensure your site is using HTTPS, and then configure your app to open in response to links to that domain.<\/p>\n<p>For Android, it pretty much Just Works from the plugin install above. However, for iOS, you&#8217;ll then enable the domain in the Associated Domains section of your entitlements, with the form <code>applinks:yourdomain.com<\/code>:<\/p>\n<p><a href=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-11.38.33.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"760\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-11.38.33-1024x760.png\" alt=\"Screenshot 2016-06-10 11.38.33\" class=\"aligncenter size-large wp-image-1103 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-11.38.33-1024x760.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-11.38.33-300x223.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-11.38.33-768x570.png 768w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/760;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"760\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-11.38.33-1024x760.png\" alt=\"Screenshot 2016-06-10 11.38.33\" class=\"aligncenter size-large wp-image-1103\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-11.38.33-1024x760.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-11.38.33-300x223.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-11.38.33-768x570.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/a><\/p>\n<p>You may also need to enable the entitlement from the Developer center for your app.<\/p>\n<h3>Testing Deeplinks<\/h3>\n<p>Assuming we have everything set up correctly (or at least we <em>think<\/em> we do), it&#8217;s time to start testing Deeplinks.<\/p>\n<p>On Android, this process is a snap. We can boot up our emulator or device, and send a deeplink intent directly to the app from the command line:<\/p>\n<pre><code class=\"language-bash\">adb shell am start -a android.intent.action.VIEW -d &quot;ionichats:\/\/app\/hats\/very-nice-hat&quot; io.ionic.hats\n<\/code><\/pre>\n<p>Replacing the custom URL scheme and package name with your respective values. If everything was configured properly, our app will open, regardless of whether it was running or not!<\/p>\n<p>On iOS, I find it&#8217;s easier to test on the simulator. Start your app from X Code, go into the Contacts app and add a URL for one of the fake contacts so it looks like this:<\/p>\n<p><a href=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-12.02.20-e1465580432428.png\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"822\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-12.02.20-e1465580432428.png\" alt=\"Screenshot 2016-06-10 12.02.20\" class=\"aligncenter size-full wp-image-1104 lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 500px; --smush-placeholder-aspect-ratio: 500\/822;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"822\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/Screenshot-2016-06-10-12.02.20-e1465580432428.png\" alt=\"Screenshot 2016-06-10 12.02.20\" class=\"aligncenter size-full wp-image-1104\" \/><\/noscript><\/a><\/p>\n<p>Tap on the link and our app should open!<\/p>\n<p>To test Universal Links on iOS, we can&#8217;t use the simulator (as far as I know, I couldn&#8217;t get it to work). Instead, we run our app on our iOS device, open safari and navigate to our URL. In Safari, when open on a page that has Universal Links enabled, we can swipe down to expose this bar:<\/p>\n<p><a href=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/IMG_8549.png\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/IMG_8549-576x1024.png\" alt=\"IMG_8549\" class=\"aligncenter size-large wp-image-1105 lazyload\" style=\"--smush-placeholder-width: 576px; --smush-placeholder-aspect-ratio: 576\/1024;width: 500px\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/IMG_8549-576x1024.png 576w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/IMG_8549-169x300.png 169w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/IMG_8549.png 750w\" data-sizes=\"auto, (max-width: 576px) 100vw, 576px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/IMG_8549-576x1024.png\" alt=\"IMG_8549\" class=\"aligncenter size-large wp-image-1105\" style=\"width: 500px\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/IMG_8549-576x1024.png 576w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/IMG_8549-169x300.png 169w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/IMG_8549.png 750w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/noscript><\/a><\/p>\n<p>Universal Links on iOS are finicky. If you adjust the manifest, you&#8217;ll need to uninstall and reinstall the app in order for iOS to fetch it again, otherwise it&#8217;ll cache for 24 hours.<\/p>\n<p>If you are sure you&#8217;ve got everything configured properly but it&#8217;s still not working, double check your bundle identifer matches up with the manifest, you have the proper entitlements, you&#8217;re using HTTPS, you are sending <code>application\/pkcs7-mime<\/code> as the content type for the manifest file, and try removing\/installing the app again. (Here&#8217;s <a href=\"https:\/\/gist.github.com\/mlynch\/c7e7da1767340d11922505bc14d6281b\">an example express.js<\/a> route for serving the manifest for iOS)<\/p>\n<h3>Responding to Deeplinks<\/h3>\n<p>Getting the app configured is by far hardest part, and Universal Links is particularly finicky.<\/p>\n<p>Now that we (hopefully) have everything configured, it&#8217;s time to actually respond to our deeplinks!<\/p>\n<p>I&#8217;m going to assume you&#8217;re using Ionic 2 with <a href=\"https:\/\/github.com\/driftyco\/ionic-native\">Ionic Native<\/a> which comes with convenient wrappers around many Cordova plugins to add Observable, Promise, and TypeScript support. Ionic Native works in any Cordova project regardless of whether it&#8217;s using Ionic 1\/2, Angular 1\/2, or TypeScript. See the <a href=\"https:\/\/github.com\/driftyco\/ionic-plugin-deeplinks\">Deeplinks README<\/a> for examples for Ionic 1 and non-Ionic projects.<\/p>\n<p>To start, we define a set of deeplink routes we want to listen for. If one matches against an incoming deeplink, we can automatically navigate in our app to display the appropriate content.<\/p>\n<p>In Ionic 2, we can conveniently navigate with a specific instance of a <a href=\"http:\/\/ionicframework.com\/docs\/v2\/components\/#navigation\">Nav Controller<\/a>, though we can also use the plain <code>route<\/code> method to handle the navigation ourselves (for example, if we want to do a very custom deeplink navigation).<\/p>\n<pre><code class=\"language-javascript\">import {Component, ViewChild} from &#039;@angular\/core&#039;;\nimport {Platform, Nav, ionicBootstrap} from &#039;ionic-angular&#039;;\nimport {Deeplinks} from &#039;ionic-native&#039;;\n\nimport {AboutPage} from &#039;.\/pages\/about\/about&#039;;\nimport {HatDetailPage} from &#039;.\/pages\/hat\/hat&#039;;\n\n@Component({\n  template: &#039;&lt;ion-nav [root]=&quot;rootPage&quot;&gt;&lt;\/ion-nav&gt;&#039;,\n})\nclass MyApp {\n  @ViewChild(Nav) nav:Nav;\n\n  constructor(private _platform: Platform) {}\n\n  ngAfterViewInit() {\n    this._platform.ready().then(() =&gt; {\n      Deeplinks.routeWithNavController(this.nav, {\n        &#039;\/about-us&#039;: AboutPage,\n        &#039;\/hats\/:hatId&#039;: HatDetailPage\n      });\n    });\n  }\n});\n\nionicBootstrap(MyApp);\n<\/code><\/pre>\n<p>Inside of our <code>HatDetailPage<\/code>, we can grab the <code>hatId<\/code> from the route:<\/p>\n<pre><code class=\"language-javascript\">export class HatDetailPage {\n  hatId: string;\n\n  constructor(public nav: NavController, private _params: NavParams) {\n    this.hatId = _params.get(&#039;hatId&#039;);\n  }\n}\n<\/code><\/pre>\n<p>Take a look at a simple <a href=\"https:\/\/github.com\/driftyco\/ionic2-deeplinks-demo\">demo<\/a> for Ionic 2 and <a href=\"https:\/\/github.com\/driftyco\/ionic1-deeplinks-demo\">one for<\/a> Ionic 1 to see how the two differ.<\/p>\n<h3>Conclusion<\/h3>\n<p>That&#8217;s pretty much it! A lot of the work happens behind the scenes to make sure our app opens from both custom URL schemes and Universal Links, and that it functions from a cold boot (a deeplink received while the app is not running) as well as while running.<\/p>\n<p>Many people often confuse deeplinking with routing. The two are similar but subtly different. Routing helps an app navigate within itself while it&#8217;s running, as well as possibly from external links (especially in a traditional web app). Deeplinking, by contrast, is not used within the app for its own navigation, it&#8217;s only used to display a specific piece of content triggered from an external request. In that sense, you would not use the <code>Deeplinks<\/code> class for your own routing, only to enable the app to be launched from elsewhere on a user&#8217;s device.<\/p>\n<p>If you give the new plugin a try, let us know what you think. We are looking for feedback on how to make this easier, and plan to make Deeplinking a major feature in Ionic apps going forward.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The following is a guide from 2016. We\u2019ve since released a Capacitor guide covering how to implement Universal Links (iOS) and App Links (Android) &#8211; available here. No native plugin required! \ud83c\udf89 I was doing some research on common challenges developers face while building their Ionic apps, and one of the things that kept coming [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":1113,"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":[124],"tags":[186,23,3,13],"class_list":["post-1102","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-deeplinks","tag-framework","tag-ionic","tag-ionic-2"],"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>Deeplinking in Ionic Apps - 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\/deeplinking-in-ionic-apps\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deeplinking in Ionic Apps\" \/>\n<meta property=\"og:description\" content=\"The following is a guide from 2016. We\u2019ve since released a Capacitor guide covering how to implement Universal Links (iOS) and App Links (Android) &#8211; available here. No native plugin required! \ud83c\udf89 I was doing some research on common challenges developers face while building their Ionic apps, and one of the things that kept coming [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-13T19:20:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-16T19:25:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Max Lynch\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@maxlynch\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Max Lynch\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps\"},\"author\":{\"name\":\"Max Lynch\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e\"},\"headline\":\"Deeplinking in Ionic Apps\",\"datePublished\":\"2016-06-13T19:20:04+00:00\",\"dateModified\":\"2020-10-16T19:25:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps\"},\"wordCount\":1247,\"commentCount\":55,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg\",\"keywords\":[\"deeplinks\",\"Framework\",\"Ionic\",\"Ionic 2\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps\",\"url\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps\",\"name\":\"Deeplinking in Ionic Apps - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg\",\"datePublished\":\"2016-06-13T19:20:04+00:00\",\"dateModified\":\"2020-10-16T19:25:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg\",\"width\":1400,\"height\":600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deeplinking in Ionic Apps\"}]},{\"@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\/91f360cffbd804a464b0c4a87b5c5f1e\",\"name\":\"Max Lynch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg\",\"caption\":\"Max Lynch\"},\"description\":\"CEO\",\"sameAs\":[\"http:\/\/twitter.com\/maxlynch\",\"https:\/\/x.com\/maxlynch\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/max\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Deeplinking in Ionic Apps - 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\/deeplinking-in-ionic-apps","og_locale":"en_US","og_type":"article","og_title":"Deeplinking in Ionic Apps","og_description":"The following is a guide from 2016. We\u2019ve since released a Capacitor guide covering how to implement Universal Links (iOS) and App Links (Android) &#8211; available here. No native plugin required! \ud83c\udf89 I was doing some research on common challenges developers face while building their Ionic apps, and one of the things that kept coming [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps","og_site_name":"Ionic Blog","article_published_time":"2016-06-13T19:20:04+00:00","article_modified_time":"2020-10-16T19:25:11+00:00","og_image":[{"width":1400,"height":600,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg","type":"image\/jpeg"}],"author":"Max Lynch","twitter_card":"summary_large_image","twitter_creator":"@maxlynch","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Max Lynch","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps"},"author":{"name":"Max Lynch","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e"},"headline":"Deeplinking in Ionic Apps","datePublished":"2016-06-13T19:20:04+00:00","dateModified":"2020-10-16T19:25:11+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps"},"wordCount":1247,"commentCount":55,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg","keywords":["deeplinks","Framework","Ionic","Ionic 2"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps","url":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps","name":"Deeplinking in Ionic Apps - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg","datePublished":"2016-06-13T19:20:04+00:00","dateModified":"2020-10-16T19:25:11+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg","width":1400,"height":600},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/deeplinking-in-ionic-apps#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Deeplinking in Ionic Apps"}]},{"@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\/91f360cffbd804a464b0c4a87b5c5f1e","name":"Max Lynch","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg","caption":"Max Lynch"},"description":"CEO","sameAs":["http:\/\/twitter.com\/maxlynch","https:\/\/x.com\/maxlynch"],"url":"https:\/\/ionic.io\/blog\/author\/max"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/06\/deeplinks-header.jpg","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1102","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\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=1102"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1102\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/1113"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=1102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=1102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=1102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}