{"id":1785,"date":"2026-07-18T17:00:00","date_gmt":"2026-07-18T22:00:00","guid":{"rendered":"https:\/\/tolinku.com\/blog\/?p=1785"},"modified":"2026-03-07T03:37:20","modified_gmt":"2026-03-07T08:37:20","slug":"device-analytics-deep-links","status":"publish","type":"post","link":"https:\/\/tolinku.com\/blog\/device-analytics-deep-links\/","title":{"rendered":"Device Analytics: Optimizing Deep Links by Platform"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Deep links behave differently on iOS and Android. Universal Links and App Links have different implementation requirements, different failure modes, and different user experiences. Device analytics reveal these differences so you can fix platform-specific issues and optimize for each device type.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide covers device-level analytics for deep links. For geographic analytics, see <a href=\"https:\/\/tolinku.com\/blog\/geographic-analytics-deep-links\/\">geographic analytics for deep link campaigns<\/a>. For targeting smart banners by device, see <a href=\"https:\/\/tolinku.com\/blog\/banner-targeting-by-device\/\">targeting smart banners by device, OS, and browser<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img decoding=\"async\" src=\"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/platform-analytics-breakdown-panels.png\" alt=\"Tolinku analytics breakdown panels showing top routes, platforms, devices, and countries\">\n<em>The analytics breakdown grid with top routes, platforms, devices, and countries.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Key Device Dimensions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Platform (OS)<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Platform<\/th>\n<th>Deep Link Technology<\/th>\n<th>Common Issues<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>iOS<\/td>\n<td><a href=\"https:\/\/developer.apple.com\/documentation\/xcode\/allowing-apps-and-websites-to-link-to-your-content\/\" rel=\"nofollow noopener\" target=\"_blank\">Universal Links<\/a><\/td>\n<td>AASA file caching, in-app browser bypass, long-press menu<\/td>\n<\/tr>\n<tr>\n<td>Android<\/td>\n<td><a href=\"https:\/\/developer.android.com\/training\/app-links\" rel=\"nofollow noopener\" target=\"_blank\">App Links<\/a><\/td>\n<td>Intent filter conflicts, assetlinks.json verification, manufacturer customizations<\/td>\n<\/tr>\n<tr>\n<td>Web (desktop)<\/td>\n<td>Standard HTTP<\/td>\n<td>Fallback page quality, app store redirect<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">OS Version<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Older OS versions may not support the latest deep linking features:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Feature<\/th>\n<th>iOS Minimum<\/th>\n<th>Android Minimum<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Universal Links<\/td>\n<td>iOS 9+<\/td>\n<td>N\/A<\/td>\n<\/tr>\n<tr>\n<td>App Links<\/td>\n<td>N\/A<\/td>\n<td>Android 6.0+<\/td>\n<\/tr>\n<tr>\n<td>App Clips<\/td>\n<td>iOS 14+<\/td>\n<td>N\/A<\/td>\n<\/tr>\n<tr>\n<td>Instant Apps<\/td>\n<td>N\/A<\/td>\n<td>Android 5.0+<\/td>\n<\/tr>\n<tr>\n<td>SKAdNetwork 4.0<\/td>\n<td>iOS 16.1+<\/td>\n<td>N\/A<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Browser<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The browser the user clicks the deep link from affects behavior:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Browser<\/th>\n<th>iOS Behavior<\/th>\n<th>Android Behavior<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Safari<\/td>\n<td>Universal Links work natively<\/td>\n<td>N\/A<\/td>\n<\/tr>\n<tr>\n<td>Chrome (iOS)<\/td>\n<td>Universal Links work<\/td>\n<td>App Links work natively<\/td>\n<\/tr>\n<tr>\n<td>Gmail (iOS)<\/td>\n<td>Opens in-app browser first<\/td>\n<td>App Links work<\/td>\n<\/tr>\n<tr>\n<td>Instagram<\/td>\n<td>In-app browser, Universal Links often blocked<\/td>\n<td>In-app browser, App Links may work<\/td>\n<\/tr>\n<tr>\n<td>Facebook<\/td>\n<td>In-app browser, Universal Links blocked<\/td>\n<td>In-app browser, App Links may work<\/td>\n<\/tr>\n<tr>\n<td>Twitter\/X<\/td>\n<td>In-app browser<\/td>\n<td>In-app browser<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Device Type<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Type<\/th>\n<th>Considerations<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Phone<\/td>\n<td>Primary target, standard deep link behavior<\/td>\n<\/tr>\n<tr>\n<td>Tablet<\/td>\n<td>Same as phone for most apps, but some apps are phone-only<\/td>\n<\/tr>\n<tr>\n<td>Desktop<\/td>\n<td>Fallback to website, no app open<\/td>\n<\/tr>\n<tr>\n<td>Smart TV<\/td>\n<td>Limited deep link support, QR code fallback<\/td>\n<\/tr>\n<tr>\n<td>Wearable<\/td>\n<td>App Clips (iOS), limited support<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Device Performance Metrics<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Platform Comparison<\/h3>\n\n\n\n<pre><code class=\"language-sql\">SELECT\n  platform,\n  COUNT(*) AS clicks,\n  ROUND(SUM(CASE WHEN outcome = &#39;app_opened&#39; THEN 1 ELSE 0 END)::DECIMAL \/ COUNT(*) * 100, 1) AS open_rate,\n  ROUND(SUM(CASE WHEN outcome = &#39;fallback&#39; THEN 1 ELSE 0 END)::DECIMAL \/ COUNT(*) * 100, 1) AS fallback_rate,\n  ROUND(SUM(CASE WHEN outcome = &#39;store_redirect&#39; THEN 1 ELSE 0 END)::DECIMAL \/ COUNT(*) * 100, 1) AS store_rate,\n  ROUND(AVG(latency_ms), 0) AS avg_latency_ms\nFROM deep_link_clicks\nWHERE timestamp &gt;= NOW() - INTERVAL &#39;30 days&#39;\nGROUP BY platform;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Platform<\/th>\n<th>Clicks<\/th>\n<th>Open Rate<\/th>\n<th>Fallback Rate<\/th>\n<th>Store Rate<\/th>\n<th>Avg Latency<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>iOS<\/td>\n<td>22,000<\/td>\n<td>74%<\/td>\n<td>18%<\/td>\n<td>8%<\/td>\n<td>320ms<\/td>\n<\/tr>\n<tr>\n<td>Android<\/td>\n<td>18,000<\/td>\n<td>68%<\/td>\n<td>22%<\/td>\n<td>10%<\/td>\n<td>450ms<\/td>\n<\/tr>\n<tr>\n<td>Desktop<\/td>\n<td>5,000<\/td>\n<td>0%<\/td>\n<td>95%<\/td>\n<td>5%<\/td>\n<td>200ms<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Android&#39;s lower open rate (68% vs 74%) suggests App Links configuration issues or manufacturer-specific problems.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Browser Comparison<\/h3>\n\n\n\n<pre><code class=\"language-sql\">SELECT\n  browser,\n  platform,\n  COUNT(*) AS clicks,\n  ROUND(SUM(CASE WHEN outcome = &#39;app_opened&#39; THEN 1 ELSE 0 END)::DECIMAL \/ COUNT(*) * 100, 1) AS open_rate\nFROM deep_link_clicks\nWHERE platform IN (&#39;ios&#39;, &#39;android&#39;)\n  AND timestamp &gt;= NOW() - INTERVAL &#39;30 days&#39;\nGROUP BY browser, platform\nORDER BY clicks DESC;\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Browser<\/th>\n<th>Platform<\/th>\n<th>Clicks<\/th>\n<th>Open Rate<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Safari<\/td>\n<td>iOS<\/td>\n<td>10,000<\/td>\n<td>82%<\/td>\n<\/tr>\n<tr>\n<td>Chrome<\/td>\n<td>iOS<\/td>\n<td>4,500<\/td>\n<td>70%<\/td>\n<\/tr>\n<tr>\n<td>Gmail<\/td>\n<td>iOS<\/td>\n<td>3,200<\/td>\n<td>45%<\/td>\n<\/tr>\n<tr>\n<td>Instagram<\/td>\n<td>iOS<\/td>\n<td>2,800<\/td>\n<td>25%<\/td>\n<\/tr>\n<tr>\n<td>Chrome<\/td>\n<td>Android<\/td>\n<td>12,000<\/td>\n<td>72%<\/td>\n<\/tr>\n<tr>\n<td>Samsung Internet<\/td>\n<td>Android<\/td>\n<td>3,500<\/td>\n<td>65%<\/td>\n<\/tr>\n<tr>\n<td>Gmail<\/td>\n<td>Android<\/td>\n<td>1,800<\/td>\n<td>55%<\/td>\n<\/tr>\n<tr>\n<td>Instagram<\/td>\n<td>Android<\/td>\n<td>700<\/td>\n<td>30%<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Instagram&#39;s in-app browser blocks Universal Links, causing a 25% open rate on iOS. This is a known limitation. Gmail&#39;s in-app browser also has reduced open rates (45% on iOS, 55% on Android).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OS Version Analysis<\/h3>\n\n\n\n<pre><code class=\"language-sql\">SELECT\n  os_version,\n  COUNT(*) AS clicks,\n  ROUND(SUM(CASE WHEN outcome = &#39;app_opened&#39; THEN 1 ELSE 0 END)::DECIMAL \/ COUNT(*) * 100, 1) AS open_rate\nFROM deep_link_clicks\nWHERE platform = &#39;ios&#39;\n  AND timestamp &gt;= NOW() - INTERVAL &#39;30 days&#39;\nGROUP BY os_version\nORDER BY os_version DESC;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Diagnosing Platform Issues<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">iOS-Specific Issues<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Symptom<\/th>\n<th>Possible Cause<\/th>\n<th>Diagnostic Query<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Open rate dropped on all iOS<\/td>\n<td>AASA file issue<\/td>\n<td>Check if AASA returns 200 with correct content-type<\/td>\n<\/tr>\n<tr>\n<td>Open rate low on iOS 17+ only<\/td>\n<td>AASA format change<\/td>\n<td>Verify AASA uses the <a href=\"https:\/\/developer.apple.com\/documentation\/bundleresources\/applinks\" rel=\"nofollow noopener\" target=\"_blank\">modern format<\/a><\/td>\n<\/tr>\n<tr>\n<td>Low open rate from Gmail\/Instagram<\/td>\n<td>In-app browser<\/td>\n<td>Filter analytics by browser<\/td>\n<\/tr>\n<tr>\n<td>Open rate 0% for specific route<\/td>\n<td>Route not in AASA<\/td>\n<td>Verify route pattern in AASA paths<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Android-Specific Issues<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Symptom<\/th>\n<th>Possible Cause<\/th>\n<th>Diagnostic Query<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Open rate dropped on all Android<\/td>\n<td>assetlinks.json issue<\/td>\n<td>Verify at <code>\/.well-known\/assetlinks.json<\/code><\/td>\n<\/tr>\n<tr>\n<td>Low open rate on Samsung devices<\/td>\n<td>Samsung Internet handling<\/td>\n<td>Filter by browser = &#39;Samsung Internet&#39;<\/td>\n<\/tr>\n<tr>\n<td>Open rate varies by manufacturer<\/td>\n<td>OEM-specific behavior<\/td>\n<td>Group by device manufacturer<\/td>\n<\/tr>\n<tr>\n<td>App opens but wrong screen<\/td>\n<td>Intent filter misconfiguration<\/td>\n<td>Check route matching logic<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Implementation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Extracting Device Info<\/h3>\n\n\n\n<pre><code class=\"language-typescript\">function parseDeviceInfo(userAgent: string, headers: Record&lt;string, string&gt;): DeviceInfo {\n  return {\n    platform: detectPlatform(userAgent),\n    osVersion: extractOSVersion(userAgent),\n    browser: detectBrowser(userAgent),\n    deviceType: detectDeviceType(userAgent),\n    manufacturer: extractManufacturer(userAgent),\n    model: extractModel(userAgent),\n    isInAppBrowser: detectInAppBrowser(userAgent)\n  };\n}\n\nfunction detectInAppBrowser(ua: string): boolean {\n  const inAppPatterns = [\n    &#39;FBAN&#39;, &#39;FBAV&#39;,           \/\/ Facebook\n    &#39;Instagram&#39;,               \/\/ Instagram\n    &#39;Twitter&#39;,                 \/\/ Twitter\/X\n    &#39;Line\/&#39;,                   \/\/ LINE\n    &#39;LinkedInApp&#39;,             \/\/ LinkedIn\n    &#39;GSA\/&#39;,                    \/\/ Google Search App\n  ];\n  return inAppPatterns.some(p =&gt; ua.includes(p));\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Device-Specific Routing<\/h3>\n\n\n\n<pre><code class=\"language-typescript\">function routeByDevice(click: ClickEvent): string {\n  const device = click.deviceInfo;\n\n  \/\/ In-app browser: redirect to a bounce page that triggers the Universal Link\n  if (device.isInAppBrowser &amp;&amp; device.platform === &#39;ios&#39;) {\n    return `https:\/\/app.com\/open?redirect=${encodeURIComponent(click.deepLink)}`;\n  }\n\n  \/\/ Old Android without App Links support\n  if (device.platform === &#39;android&#39; &amp;&amp; parseFloat(device.osVersion) &lt; 6.0) {\n    return `intent:\/\/${click.route}#Intent;scheme=myapp;package=com.myapp;end`;\n  }\n\n  \/\/ Standard deep link\n  return click.deepLink;\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Optimization Strategies<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">By Platform<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>iOS:<\/strong> Focus on AASA file correctness, handle in-app browser edge cases.<\/li>\n<li><strong>Android:<\/strong> Test across top manufacturers (Samsung, Xiaomi, Huawei, Oppo), verify assetlinks.json.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">By Browser<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>In-app browsers:<\/strong> Use a bounce page strategy to break out of the in-app browser.<\/li>\n<li><strong>Gmail:<\/strong> Consider disabling click tracking for deep links in email (tracked URLs break Universal Links).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">By Device Type<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Desktop:<\/strong> Optimize the web fallback page. Include a QR code for mobile handoff.<\/li>\n<li><strong>Tablet:<\/strong> Test your app&#39;s tablet layout since deep-linked users may arrive on an iPad or Android tablet.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Tolinku for Device Analytics<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/tolinku.com\/features\/analytics\">Tolinku&#39;s analytics<\/a> include device-level breakdowns by platform, OS version, browser, and device type. Filter analytics by device in the <a href=\"https:\/\/tolinku.com\/docs\/user-guide\/analytics\/filtering\/\">Tolinku dashboard<\/a> to identify platform-specific issues.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For geographic analytics, see <a href=\"https:\/\/tolinku.com\/blog\/geographic-analytics-deep-links\/\">geographic analytics for deep link campaigns<\/a>. For deep link analytics, see <a href=\"https:\/\/tolinku.com\/blog\/deep-link-analytics-measuring-what-matters\/\">deep link analytics: measuring what matters<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Analyze deep link performance across devices. Compare iOS vs Android, mobile vs tablet, and browser-specific data for optimization.<\/p>\n","protected":false},"author":2,"featured_media":1784,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Device Analytics: Optimizing Deep Links by Platform","rank_math_description":"Analyze deep link performance across devices. Compare iOS vs Android, mobile vs tablet, and browser-specific data.","rank_math_focus_keyword":"device analytics deep links","rank_math_canonical_url":"","rank_math_facebook_title":"","rank_math_facebook_description":"","rank_math_facebook_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-device-analytics-deep-links.png","rank_math_facebook_image_id":"","rank_math_twitter_title":"","rank_math_twitter_description":"","rank_math_twitter_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-device-analytics-deep-links.png","footnotes":""},"categories":[14],"tags":[37,25,156,20,24,69,256,33],"class_list":["post-1785","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-analytics","tag-android","tag-cross-platform","tag-deep-linking","tag-ios","tag-mobile-development","tag-optimization","tag-user-experience"],"_links":{"self":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/comments?post=1785"}],"version-history":[{"count":2,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1785\/revisions"}],"predecessor-version":[{"id":2414,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1785\/revisions\/2414"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media\/1784"}],"wp:attachment":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media?parent=1785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/categories?post=1785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/tags?post=1785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}