Universal Link & Deep Link【基
什么是Deep Link
“Deep Link”从字面上理解是“深度链接”,因为移动端的媒体内容页面都是在APP中打开的,最早推出“Deep Link”的主要意图是,为了能让搜索引擎能检索APP中的内文页内容,并在用户检索到内容时,可通过简单点击一个“链接”直接打开该APP的内文页。简单讲就是,可以通过一个简单的“链接”,打开APP并直接进入该APP中的内文页,前提是该APP在该手机上已安装,且该APP需要编程支持该Deep Link的“schema”语法定义。例如:大家可复制如下的淘宝商品及淘宝店铺页的Deep Link链接,在手机浏览器中打开,便可直接进入淘宝APP中的商品页及店铺页:
taobao://item.taobao.com/item.htm?id=44014690052
taobao://shop.m.taobao.com/shop/shop_index.htm?user_id=2565488819
可见在移动端广告投放中采用Deep Link技术,省去了用户打开APP、再搜索商品页的中间环节,让用户只需便捷地点击广告,一键就能到达商品购买页面。省去中间多次跳转的环节,减少用户流失,有效提升转化。(当然该APP需要开发改造,编程支持Deep Link。)
APP没安装怎么办?
当然大家会问,若当时手机上没有安装这个APP会发生什么情况呢?在移动端广告投放中,可以采用加一个Mobile Web中间页的方式。在该中间页上安置JS代码来判断(通过Deep Link尝试调用手机APP),若手机上APP没有安装,则跳转到APP下载页面引导用户安装。若APP已安装则打开APP进入内容页。这样通过Deep Link也能有效地唤醒沉睡用户(那些已安装APP但还未持续产生转化的用户。)。
现在也有很多APP服务提供方,不论用户是否已安装APP,为了让用户能更容易的通过各种方式(Mobile Web、APP)触达到产品服务,会对应APP做一套简化版的Mobile Web的服务。由于URL使用的是普通的网站URL,相比Deep Link更容易传播,及被各种网站内容中引用,及被搜索引擎收录。例如,大家可复制如下的淘宝商品页的普通URL,在手机浏览器中打开,便可直接进入淘宝中的商品页(该页面中也有一些JS代码,会判断手机上是否已安装APP,若已安装,会提示用户是否打开淘宝APP):https://item.taobao.com/item.htm?id=44014690052
Universal Link
上面已讲到:很多APP服务提供方已经在提供普通网站URL方式作为中间也载体,便于传播和使用。这也就引出了一个新的规范:Universal Link(通用链接)。在iOS9以前,我们从外部启动App都是通过(Deep Link)一个特殊的URL Scheme实现跳转的。这种方式弊端很明显:我们只能通过scheme://example这种格式的链接来实现跳转,而且现在苹果还对这种方式的跳转加了一个提示框:“是否打开XXX”。对于Web和原生App交互的场景需求量很大的产品来说,这样的跳转方式显然是步骤繁杂的,用户体验并不好。
当然需要强调一下为了保证用户网络安全,该“通用链接”必须是HTTPS协议的。
在APP中添加这个功能很简单,相关参考文档可参考官方文档(点击文末“阅读原文”可直接打开):
大体的步骤是:
1) 在苹果开发者网站中,打开需要使用Universal Link功能的App中的Associated Domains
首先,我们要在苹果开发者网站中开启App的Associated Domains功能:在Account -> Certificates, Identifiers & Profiles -> App IDs -> YourApp -> Edit中把Associated Domains设置为Enable
然后需要配置一下工程文件,找到Capabilities -> Associated Domains
打开此功能并把“通用链接”的domain加进去,格式为applinks:http://www.example.com/
2) 将 “apple-app-site-association”(一个json文件)上传到服务器中根目录下(因为是HTTPS,所以服务器必须支持SSL;文件名“apple-app-site-association”不可添加任何后缀。),如:https://www.example.com/apple-app-association ,json内容示例如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TeamID.com.domain.App",
"paths":[ "*" ]
}
]
}
}
注意:当APP在设备上第一次运行时,若已开启Associated Domains功能,那么iOS会自动去获取Domain下的apple-app-site-association文件,iOS会先请求https://domain.com/.well-known/apple-app-site-association 。若此文件请求不到,再去请求https://domain.com/apple-app-site-association 。所以若想要避免服务器接收过多GET请求,可直接把apple-app-site-association放在./well-known/目录下。服务器上apple-app-site-association的更新不会让iOS本地的apple-app-site-association同步更新,即iOS只会在APP第一次启动时请求一次,以后除非APP更新或重新安装否则不会在每次打开时请求apple-app-site-association。
3) 在AppDelegate中实现相应的方法,
示例代码如下:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
return YES;
}
//读取url地址
NSURL *webUrl = userActivity.webpageURL;
if (![webUrl.path isEqualToString:@"/show"]) {
//path错误,直接从safari打开
[[UIApplication sharedApplication] openURL:webUrl];
return YES;
}
//跳转并显示内容
[[NSNotificationCenter defaultCenter] postNotificationName:@"notify" object:@"hello world"];
return YES;
}
(转载请注明出处:微信订阅号:ad_automation)
文字表现力有限,欢迎参加《3.25线下大课堂》面对面为您答疑解惑讲透您关心的问题。