在我阅读的过程中,iOS 9引入了通用链接。在苹果应用程序搜索编程指南的“支持通用链接”一节中,它说这与URL方案的深度链接并不完全相同,但我对这个话题并不完全清楚:
在苹果的理想世界里,是的!
因为苹果公司为了深度链接而强迫开发者和用户建立通用链接。所以,通用链接是苹果公司的一种深度链接。但如果你看到Facebook SDK,他们实现了自己的WebView,以便在iOS 9.0中支持深度链接。所以,对于苹果来说,通用链接比深度链接更好。
通用链接是iOS向给定应用发送网络网址请求的能力,而不是在浏览器中打开它们。
URL方案是一种应用程序能够在给定状态下打开,由URL描述,并由开发人员以代码处理。
假设你有一个名为“酷应用”的应用程序,你已经注册了网址方案“酷应用”。你的应用程序有不同的区域,比如“漂亮的小工具”和“漂亮的东西”。现在你可以通过链接酷应用程序://好的小工具
打开你的应用程序。要让应用程序在漂亮的小工具部分打开,你必须实现应用程序(_: openURL:选项:)
方法,在这个方法中发现请求的网址,并让应用程序打开请求的视图控制器。
与此同时,你还有一个名为www.coolapp的网站。com
。当你使用iOS设备浏览时,你会看到一个指向你网站的链接——比如www.coolapp。com/nice gadgets
,打开链接,它将在浏览器中打开。通过启用通用链接,它将通过调用应用程序(uU2;:continueUserActivity:restorationHandler:)
方法(给定url作为参数)来打开应用程序。在这里,您可以使用url方案处理中的相同逻辑,以请求状态打开应用程序。
那么,通用链接会取代url方案吗?我对此表示怀疑,但他们会以一种很好的方式互相赞美。
通用链接是深层链接吗?没有,但他们可以启动在应用程序中使用深度链接的过程。
通用链接和URL方案之间的区别是什么?是否通用链接仅适用于网站中的超链接,以及邮件或消息应用程序?
通用链接是一个特定于苹果的、基于操作系统的URL,它将网站URL与特定于应用程序的URI方案联系起来
UL也有很多问题,我在最后概述了这些问题。请参阅下面的long read。
通用链接会取代URL方案吗?
不。它们是iOSSafari上URI方案和路由的强制替代品。您必须也应该仍然支持您应用程序的URI方案和路由,因为Android和iOSChrome仍然使用这项技术,从归属到电子邮件的每一类主要链接供应商也是如此。
通用链接是一种深度链接吗?
是也不是。通用链接本身不是通用的深度链接——例如,它们不能通过安装过程进行路由。但是当用户有了应用程序时,他们可以深度链接。最好根据它们能做什么和不能做什么来考虑所有链接,而不是把网址分为“深度链接”和“非深度链接”
许多链接表现出根据用户是否拥有应用程序和上下文(浏览器、应用程序、操作系统、操作系统版本等)进行深度链接的行为。)改变思维框架。
跟踪通用链接
在下面的文件中,我概述了通用链接的所有不同方面。需要指出的是,continueUserActivity
将从通用链接报告引用的URL,因此您可以使用此属性打开。
因为UL不是一个正常的链接,如果你有重定向,就会中断它。同样,如果你关闭重定向,那么无论你拥有什么网站,点击服务器都不会被点击。这是一个不同的讨论,但重要的是要注意。
如果你感兴趣,我在下面的通用链接上整理了很多有用的信息。
大多数人都熟悉URI方案。URI是一个通用资源指示器(链接)。URI可以分配给移动应用程序。输入一个URI,比如airbnb://将尝试在设备上定位应用程序资源airbnb。
在通用链接或应用程序链接存在之前(即在iOS 9.3/Android 6.0之前),需要使用“自定义URI方案”和airbnb://d/listing/530250
将用户深度链接到移动应用程序中的特定内容(本例中为列表)。然而,这是不安全的,也不能处理用户没有安装应用程序的情况(没有回退)。大多数归属合作伙伴(Appsflyer、Kochava、Button、Yozio、Branch等)的工作方式是,他们会提供一个链接来处理这个问题。
当用户访问这个URL的页面时,会有一些javascript设置一个计时器,然后尝试用一些简单的javascript从浏览器启动URI方案:
window.location.href(...)
如果应用程序在计时器过期之前没有打开,那么供应商可能会认为手机中没有应用程序,因此,一些javascript会触发,转而打开iTunes或Android URL。这种机制依赖于在浏览器中阻止javascript。
在iOS 9.3中,苹果删除了Safari(link)中的屏蔽javascript。最终的结果是,每当你试图在Safari中打开带有URI方案的应用程序时,你都会看到一条巨大的错误消息,上面写着“无法打开页面”这是一次糟糕的用户体验,并导致了苹果新系统Apple Universal Links的实施。
苹果通用链接
为了使链接真正通用,需要在web、iOS和Android上启用链接功能,并且所有应用程序共享相同的资源路径。
Apple Universal Links(iOS)和Android App Links(Android)本质上是同一个概念,但经常互换,或与其他路由机制混淆。当你谈论这些概念时,明确表达是很重要的,否则你可能会混淆或混淆不同的技术,而这些技术的运作方式非常不同。
具体来说,Apple Universal Links是苹果公司的一个标准,部署在iPhone操作系统(OS)上,允许用户点击一个链接,并立即发送到应用程序(如果他们有)。苹果环球链接没有重定向。这是一个具有一定技术复杂性的特殊系统设置。当用户点击链接时,会向苹果公司发出往返服务器呼叫,操作系统会立即打开应用程序,而不会打开浏览器或加载URL。下面将详细介绍这是如何工作的。
Android应用程序链接是在Android上设置的等效链接系统。
通用链接首先为每个域托管一个“苹果应用程序站点关联文件”(AASA)。
值得注意的是,几乎每家公司的AASA都托管在他们的主域名上,其次是“/苹果-应用-站点-关联”
例如:
https://www.jet.com/apple-app-site-associationhttps://www.pinterest.com/apple-app-site-association
如果单击这些URL,它将下载该公司的AASA。右边是一个AASA示例。AASA:AppID中包含了一些值得注意的内容,适用于所有可以应用通用链接的应用程序。在我们和许多其他AASA中,您将看到应用程序的生产和测试版本的设置,以便链接可以跨所有版本进行测试。AppID的结构是App前缀,后跟Bundle ID。通常每个测试版本的App都有不同的前缀,但Bundle ID保持一致。
实例{App Prefix}。{Bundle ID}
路径:如果用户拥有应用程序,这些路径将立即打开应用程序。该应用程序将收到引用的URL,并可以解析出适当的路径,以便在之后将用户深度链接到其中的内容。
大多数属性供应商,如Branch或Appsflyer,在某些情况下也可以为您托管AASA(例如:Branch针对Airbnb的AASA托管在自定义域上)https://abnb.me/apple-app-site-association).
这些文件有效地将应用程序中要映射或不映射的URL列入白名单和黑名单。就像公司拥有的AASA一样,供应商为每个域指定应用ID和URL路径,例如:
5LL7P8E8RA.com.airbnb.app
"/rooms/*"
"/wishlists/*"
"/invite"
"NOT /rooms/*/building-rules"
当用户安装或升级我们的应用程序时,iOS会获取应用程序权限中列出的所有域的AASA文件,以确保我们的网站允许我们的应用程序代表他们打开URL。
通用链接在大多数情况下工作得很好,但是这些链接很容易被禁用,而且无意中被禁用!如果发生这种情况,用户将始终被重定向到网站网址,直到他们升级他们的应用程序或重置我们称之为“权利文件”(链接)。
如果用户点击“airbnb”。com或abnb。“我”链接在我们应用程序的右上角,操作系统会将用户指向该网站,但它也会永久性地将任何未来的通用链接指向该移动网站,以获得与该域的链接!
这实际上破坏了Apple Universal Links为用户提供的功能。目前无法追踪,重置的唯一方法是长按URL并单击“Airbnb”中的“打开”(不直观),或点击本文档前面描述的Apple Universal Links横幅(幻影横幅)上的“打开”按钮。
这些AASA路径还用于确定何时显示或不显示iOS系统的“通用链接横幅”
这是一个特别热门的话题,经常出现在对话中,值得讨论。
当你在特定域上启用Apple Universal链接时,苹果会在Safari浏览器上插入一个系统应用横幅。这意味着,除了我们显示的任何横幅或网络间隙外,苹果还将强制在Safari顶部显示一个不可定制、不可追踪的通用链接横幅,供拥有该应用并正在Safari中查看URL的用户使用,其路径在AASA中。
我们无法控制这个横幅的外观。我们只能确定它是否应该在基于AASA的页面上可见。我们目前也无法识别用户是否或何时点击“打开”按钮(即没有归属)。
苹果通用链接横幅属性摘要:
众所周知,iOS深层链接已经改变了一点,称为通用链接,有了通用链接,我们需要在您的Xcode项目中启用“关联域”,并在那里添加受支持的域,还有一些变化,如在域服务器上托管苹果应用站点关联JSON。 这一点我非常理解,但我的问题是我必须支持多个社区,可能每个使用应用程序的企业都会有自己的社区,所以将所有社区(域)添加到“关联域”中不是一件好事,如果有新企业使用应用程序,然后我需要提供一个应用程序更新
我有一个与深度链接过程有关的问题。我需要创建一个通用URL,并将其发送到最终用户的电子邮件地址,该地址应满足以下条件。 如果电子邮件在android手机中打开,那么该链接应该打开我的应用程序(带有自定义数据),否则将重定向到Play Store以安装我的应用程序。 如果电子邮件在iOS手机中打开,那么该链接应该打开我的应用程序(带有自定义数据),否则将重定向到AppleiTunesStore以安装
我们在我们的应用程序中实现了iOS9通用深度链接,它在我们当前的域中运行良好。现在我们正在使用Mandrill平台向我们的订户发送电子邮件,这些订户重定向到我们的实际网址,现在山地网址在Safari打开,重定向到我们的实际网址,但我们的应用程序没有打开。 任何帮助或建议都将不胜感激。
问题内容: 我有一个启用HTML5模式的Angular.js应用程序。 我要实现的是获取一些URL或标签来执行正常的浏览行为,而不是使用HTML5历史API更改地址栏中的URL并使用Angular控制器对其进行处理。 我有这个链接: 我希望浏览器将用户重定向到,以便将用户重定向到身份验证服务。 有什么办法可以做到吗? 问题答案: 在Angular 1.0.1中添加作品: 记录了此功能(https:
我们正在尝试在一款iOS应用中实现延迟深度链接,以鼓励用户邀请好友使用该应用,并根据用户的推荐链接安装次数来奖励用户。与Tapstream的产品基本相似。 请考虑以下示例: 因此,UserA在他们想要的任何网络上共享他们的链接“ourappurl.com/refer?id=UserA”。UserB点击这个链接,这个链接会把他们带到Safari,然后弹出到应用程序商店页面,在那里UserB下载应用程
我正在实现Android深度链接的概念,它工作正常,我的问题是,如果应用程序没有安装在手机上,我想将链接重定向到我的play store应用程序页面。 请引导我找到它,谢谢。