为移动应用创建深层链接

Posted

技术标签:

【中文标题】为移动应用创建深层链接【英文标题】:Create Deep Link for Mobile App 【发布时间】:2015-02-23 23:21:07 【问题描述】:

我想为我的应用创建一个促销链接 - 我可以通过电子邮件分发。当用户点击电子邮件中的链接时,网页会执行以下操作:

    确定哪个操作系统(iosandroid) 如果设备上安装了应用 - 打开应用 Else - 将用户带到 AppStore(或)PlayStore(或)自定义 URL。

我尝试使用 AppLinks (applinks.org) - 但我无法让它工作。浏览器如何理解“al:xx:xxx..”标签?它只适用于脸书/推特吗?

<html>
    <head>
       <meta property="al:ios:url" content="applinks://docs" />
       <meta property="al:ios:app_store_id" content="12345" />
       <meta property="al:ios:app_name" content="App Links" />
       <meta property="al:android:url" content="applinks://docs" />
       <meta property="al:android:app_name" content="App Links" />
       <meta property="al:android:package" content="org.applinks" />
       <meta property="al:web:url" content="http://applinks.org/documentation" />
   </head>

我还尝试了另一篇文章中的一些 javascript - 但如果未安装该应用程序,浏览器会显示错误:

<script>
    window.onload = function() 
        window.location = 'http://www.launchMyApp';

        setTimeout("window.location = 'http://play.google.com/someApp';", 1000);
    
</script>

请帮忙。 谢谢。

【问题讨论】:

App Links 不能为您解决问题,因为 Safari 和 Chrome 不支持它。此外,虽然有一些 JS 解决方案,但没有一个是理想的,因为它们都有一些怪癖。 我也有同样的问题,是否有任何可能的解决方案可以在没有脚本的情况下执行此操作,任何示例将不胜感激 Javascript 重定向肯定有潜在的怪癖!我在一家公司 (hokolinks.com) 工作,我们编写了一个更复杂的脚本,但对于一些疯狂的 Android 手机来说仍然失败。谷歌和苹果都为此宣布了一个无缝的解决方案(不需要 JS),使用服务器上的文件以便于集成。检查 iOS 的通用链接和 Android 的 App Link(是的,同名)。 我这里有一个详细的解决方案文档作为答案:***.com/questions/46266797/… 我在这个问题下写了详细的解决文档:***.com/questions/46266797/… 【参考方案1】:
al:xx:xx:xx

他们给你的是一个 URI(参见 This SO post for the differences between URIs, URNs, and URLs。安装你的应用后,它可以注册自己以响应特定的 URL 方案。这是一个链接到歌曲的示例 Spotify URI。

spotify:track:0FutrWIUM5Mg3434asiwkp

如果您的设备(包括桌面)上安装了 Spotify,您可以点击this link,它应该会自动打开 Spotify 应用。该应用程序响应,因为它已将自己注册为该类型 URL 的响应者。应用程序使用 URI 的其余部分来执行某些特定操作。在这种情况下,Spotify 将 URI 识别为具有特定曲目标识符的歌曲的链接,并打开相应的屏幕。

您的应用可以注册自己以响应特定的 URL 方案,如果用户在安装了该应用的情况下点击该链接,它将直接打开您的应用。缺点是如果未安装应用程序,操作系统将无法理解 URL-scheme,并引发错误。

我认为您正在寻找的解决方案是指向您网站上托管的页面(脚本)的简单 HTTP 链接。你可以像普通链接一样传入参数

http://www.myapp.org/?user=123&source=email. 

您的页面将使用一些服务器端 Javascript 来尝试打开您的应用指定的 URL 方案——类似于您在上面发布的内容。如果失败,它将根据 HTTP User-Agent 标头中的浏览器信息将用户重定向到适当的应用商店。您可能需要一些其他 Javascript 来抑制警报。

【讨论】:

感谢您的回复。我正在寻找更完整的解决方案,因为 App Links 文档一直在引用您提供的相同实现。 当你说完整的解决方案时,你的意思是你想要所有必要的代码来工作吗?我想你不会在这里找到。 不是真的.. 我不是在寻找完整的代码,我相信没有人会在这里得到这样的。我的意思是你建议的已经实施了。即 IOS 方案已经创建并在您直接在浏览器中输入 URI 时打开应用程序。但我无法从网页中执行相同操作。我想说的是您的解决方案已发布并不能完全解决难题。 没有解决哪一部分?将用户发送到常规 HTTP 页面,然后使用 javascript 来确定平台,并将用户重定向到适当的商店,或打开应用程序(以可用者为准)是我的回答所描述的。这篇文章:***.com/questions/10237031/… 正在描述 javascript 部分,这正是您使用相同策略尝试做的事情。 我正在检查是否可以完全避免添加 javascript 并使用 Meta 标签,这将在应用程序中打开链接,因为我相信 Meta 标签内容会在主机名后跟 url 映射到它。【参考方案2】:

这现在可以在 iOS 9 中实现。Apple 今年在 WWDC 2015 上宣布了通用深度链接。您可能想观看视频 - Seamless Linking to Your App。

现在可以了:

    检查是否已安装应用并在 iOS 应用中打开内容 Else 正常失败,可以在 safari 中打开内容。

继 Search API 之后 iOS 9 的最佳功能之一。

【讨论】:

感谢您发布有关通用链接方法的链接。但现在我想继续采用@IntrepidPat 建议的方法。【参考方案3】:

我正在为 Facebook 做这个工作,发现当你 have them host the app links page for you 时,他们的系统会生成以下内容。

<html>
<head><title>App Link</title>
    <meta property="fb:app_id" content="XXXXXXXXXXXXXXX"/>
    <meta property="al:ios:url" content="example://test"/>
    <meta property="al:ios:app_name" content="Example App"/>
    <meta property="al:ios:app_store_id" content="XXXXXXXXX"/>
    <meta property="al:android:package" content="com.example.client"/>
    <meta property="al:android:app_name" content="Example App"/>
    <meta property="al:android:url" content="example://test"/>
    <meta property="al:web:should_fallback" content="false"/>
    <meta http-equiv="refresh" content="0;url=http://play.google.com/store/apps/details?id=com.example.client"/>
</head>
<body>Redirecting...</body>
</html>

您可以在底部看到 http-equiv 元标记,该标记无需任何 javascript 即可进行重定向,并且在所有主要浏览器上均受支持。

【讨论】:

以上是关于为移动应用创建深层链接的主要内容,如果未能解决你的问题,请参考以下文章

如何从移动浏览器打开深层链接?

在创建 branch.io 深层链接时添加应用程序版本检查

PHP:正则表达式,如何验证 android 和 ios 深层链接 URI

将移动浏览器深度链接到本机应用程序 - 未安装应用程序时的 Chrome 问题

使用意图不打开应用程序的 Android 深层链接

到 Facebook 页面的深层链接