欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS平台DeepLink相关介绍

程序员文章站 2024-03-24 10:42:40
...

1、介绍DeepLink

1.1、什么是DeepLink

  • 在web开发领域,DeepLink是指向具体内容页的链接,区别于指向首页的链接。
  • 在app开发领域,DeepLink是指能够调起app内某个特定界面的链接。

1.2、为什么使用DeepLink

1.2.1、现状(app孤岛、2个原因)

真实的用户需求,打通各个app之间的连接。
现状:目前这些应用孤岛之间都是通过Web进行连接的,通过浏览器的WebView,进行内容跳转,缺少原生App体验。

为什么各个应用之间,为啥不能支持方便的*穿梭呢? 这里有2个原因,一个是经济原因(每个app都希望用户沉溺在自己的app中,所以大部分app总是越做越大);
另外一个是技术原因(移动操作系统有多家,各家处理应用间跳转的底层技术都不一样,调用方式、代码都不同,支持的力度也不同)。

1.2.2、DeepLink能带来什么?

1、从任何地方访问一个url,自动跳转到app的对应内容页面。
2、app安装之前打开某个M版,app安装之后,首次进入,自动跳转到之前M版页面对应的内容(Deferred DeepLink)。
3、在app A中调用app B中的服务,app B中得到的结果还能传回app A进行下一步处理。App 间带上下文切换(用于实现 app 间参数的传递,如授权协议,分享 API 等)
4、搜索


2、DeepLink的实现原理

2.1、Custom URL Scheme

iOS 9之前,通过URL Scheme打开app(需要safari浏览器做中转)
基础DeepLink调用方式:
iOS系统:使用openURL(“twitter://userid/1234”), canOpenURL

2.1.1、使用Custom URL Scheme时的JS处理

window.location = 'lexie://';  
setTimeout(function() {  
    window.location = 'itms-apps://itunes.apple.com/us/app/eve-by-glow-period-tracker/id1002275138'
}, 250);

2.1.2、在不同iOS版本下的表现(是否有确认弹层、是否阻断JS执行)

  • iOS 9之前

    • app已安装
    • app未安装
  • iOS 9到iOS 9.2之前

    • app已安装
      safari是否打开app,会有提示弹窗。如果用户取消进入app,会跳转到app store。不管用户行为还是非用户行为触发的跳转到app store都会被提示弹窗拦截。
    • app未安装
      app未安装,无法打开custom url scheme,会直接跳转到app store。
  • iOS 9.2开始(是否用户行为触发表现不同)

    • app已安装

    • app未安装

用户行为(用户点击)引起的跳转到app store不会被提示弹窗拦截,而是直接跳转到app store。
非用户行为(onload)触发的跳转会有提示弹窗拦截,

2.2、Universal Link

2.2.1、何为Universal Link

2.2.2、Universal Link在iOS中的接入

2.2.3、Universal Link的简单原理

iOS 9之后,通过universal link打开app(不需要safari浏览器做中转)
增强的DeepLink调用篇(App Links/Universal Links, Since 2015)
基本想法就是把打开应用的地址,统一为使用HTTP(S)方式,系统通过拦截和解析HOST地址,与系统注册的HOST进行匹配,如果发现就可以直接打开APP。

这里复习一下,如何实现universal link,安卓和ios的原理都是差不多的。


3、Deferred DeepLink的实现原理

Deferred DeepLink 是 DeepLink 的进阶版。
顾名思义,Deferred DeepLink 是指用户打开一个 web 页面的时候并没有安装对应的 App,希望用户在安装 App以后可以 DeepLink 到安装前 web 页面对应的内容。
这里有三个需要解决的问题:

  • 判断是否已经安装了 App,如果已经安装了直接 DeepLink 到 App,否则跳转 App Store。
  • 用户匹配,如何把一个 install 对应到某一次 web page view 或者某一次 click。
  • DeepLink,基础的DeepLink问题。

这曾经是个老大难的问题,受系统所限,在 iOS 上很难追踪到一个安装的来源,但是这样的需求又很多,主要的场景有:

  • 追踪广告效果
  • 追踪用户推荐/邀请链接
  • 在 app 内保持网页浏览的上下文,如登录信息,购物车等

3.1、iOS 9之前设备指纹识别

在访问特定页面或点击特定链接的时候记录用户特征,如 IP,系统版本,手机型号,语言等等。然后在打开 app 的时候发送这些特征到服务器,查询一段时间内(如 1 小时内)有可以匹配的用户点击过的链接,然后处理这个链接。

这样做的缺点很明显,因为是通过特征模糊匹配的,所以很容易匹配不到或匹配到错误的上下文。
但是其实大部分第三方服务会从不同来源收集更多信息,所以这个准确率其实比想象中高很多,尤其是在打开了 IDFA 的情况下。

3.2、iOS 9开始共享SafariViewController的会话

  • 以前在顾问里自己实现的方式
  • 如果不是从safari中打开的,而是从第三方app的浏览器跳转到目标app
  • deferred deeplink 的原理 学习branch deeplink

SFSafariViewController 和 Safari 的 cookies 是互通的!所以理论上可以做到 100% 的 match。解决方案也很简单,本地生成一个 UUID 并通过一个隐藏的 SFSafariViewController 传回给 server,server 就可以把这个 UUID 跟之前的 session 对应起来,然后通过一般的 API call 查询更多跟这个 session 有关的信息。

4、App间保留上下文的跳转

5、从巨无霸的DeepLink情节到web与app的映射

在app时代,搜索公司无法索引到app内部的数据,因此搜索公司希望能通过建立web和app之间的关系索引,来索引app内的数据。

谷歌、苹果、百度都提供技术和接口,让app开发者提交web和app直接的映射关系,通过从web抓取数据,打开与web映射的app页面,提高app曝光率。对于搜索广告商而言,除了Web形式的落地页之外,他们也可以提交对应的APP地址,例如谷歌App Indexing, 百度APP Link, 必应 App Linking。提升广告主的转化。

搜索app内容,改进用户体验。

如何建立web与app的映射?

谷歌/Facebook提供了2种方式:
方法一:App开发者提供这种映射关系 ,手工上载这种关系
方法二:App在Web站内描述好打开App的方式,机器爬虫可收集。


  1. 移动DeepLink的前生今世
  2. Deferred Deep Linking in iOS