Deep Link & URL Scheme & Universal Link

Deep Link

在移动前端,deepLink一般指app内部的逻辑处理,可以根据这个deeplink直接跳转到对应的页面或者触发特定的逻辑,deeplink的目的是通过deep link打开app,并且跳转带app内某个页面,前提是该APP在该手机上已安装,且该APP需要编程支持该Deep Link的“schema”语法定义。

URL Scheme(Deep Link第一代实现方式)

URL Schemes其实就是实现deep linking的第一代解决方案。利用它就可以在移动开发中实现从web页面或者别的app中唤起自己的app的功能,然而开发者们很快就发现,这样也还有很多限制:

  • Custom URL scheme 是自定义的协议,所以在没有安装 app 的情况下是无法直接打开的。

    在app内开启其他app的scheme之前,通过canOpenURL判断是否安装app,来决定是否可以跳转,但是需要先检查这个scheme是否注册了,即在info.plist文件的LSApplication

    QueriesScheme中记录要询问的scheme,否则通过canOpenURL得到的结果是false。

  • 因为这个scheme是自己定义的,容易冲突。

    例如,自己的名为A的app定义的url scheme为a://,但如果用户手机没有装名为A的app,而装了名为B的app,但是B也定义了a://,那么通过a://打开的app就是B,而不是A,也就是冲突了

因此为了解决以上问题,苹果推出了Universal Link方案,但是,iOS在很长的一段时间内用来实现deep linking以及app间通信的方法就是上面提到的,被叫做custom URL scheme。处理的方法就是:

  1. 注册一个URL type,注册的方法就是在app的info.plist文件里添加 CFBundleURLTypes 键,它包含了一个由多个字典组成的数组,每一个字典定义了这个app支持的一个URL scheme,其他app即可通过这个URL scheme打开自己的app。

  2. application:willFinishLaunchingWithOptions:方法或者application:didFinishLaunchingWithOptions:方法中获取URL的相关信息,并决定是否要打开它,一般客户端会根据自己的业务需求建立白名单,不再白名单内的链接不允许打开。

  3. 如果在白名单内,实现app delegate方法:application:openURL:sourceApplication:annotation:(ios 9之前)或者application:openURL:options:(ios9之后) ,获取需要的信息,处理url链接,打开相应页面)。

Universal Link(Deep Link第二代实现方式)

一、概述

Universal Link可以让网站或者web view中的内容在用户点击跳转或安装了app之后仍然能够直接在这个app中被找到。比如,用户在官网上点击了“在app中浏览该商品”的链接,这个时候就可以通过Universal Link去唤起这个app,同时直接定位到该商品页面。

二、使用

  • 在支持HTTPS的服务器根目录下上传apple-app-site-association文件。

  • 在xcode的工程内Capabilities栏中找到Associated Domains,在里面添加以applinks:为前缀的域

  • 实现delegate方法application:continueUserActivity:restorationHandler:处理universal link的链接,通过该方法可以获取NSUserActivity对象,从该对象获取NSUserActivityTypeBrowsingWeb的activityType,这个对象的webpageURL属性中的URL就是用户正在访问的URL地址

    注意:当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。

三、优缺点

(1)优点

1、Universal Links本身也就是一个能够指向一个web页面或者app中的内容页的标准的web link(形如https://example.com) ,当已经安装了这个app的时候,不需要加载任何web页面,app就会立即启动;当这个app没有安装的时候,就会默认地从当前浏览器中重定向到App Store中引导用户去下载安装这个app。而且,Universal links支持从其他app中的UIWebView中跳转到目标app

2、Universal links是从服务器上查询是哪个app需要被打开,因此不存在Custom URL scheme那样名字被抢占、冲突的情况。

3、安全性,用universl link去打开的时候,只有你(开发这个app的人)可以通过创建和上传一个允许这个网页去通过这个URL去打开你的app的文件。

4、隐私性,提供Universal link给别的app进行app间的交流,然而对方并不能够用这个方法去检测你的app是否被安装。(之前的custom scheme URL的canOpenURL方法可以)

(2)缺点

如果用户手机上没有安裝 APP,那么使用ULink只能打开网页,而不能引导用户前往 App Store 下载。所以有些网页处理方案是在载入的時候,會运行一段 javascript ,然后通过timer 计时,如果在特定时间內无法开启 App,就前往 App Store 下载。

deferred Deep Linking

deferred deep linking 是指用户打开一个 web page 的时候并没有安装对应的 app,希望用户在安装 app 以后可以 deep link 到对应内容

https://juejin.im/post/59e2cdbef265da43200245a0

Deep Link URL Scheme Universal Link相关推荐

  1. iOS 唤起APP之Universal Link(通用链接)

    iOS 9之前,一直使用的是URL Schemes技术来从外部对App进行跳转,但是iOS系统中进行URL Schemes跳转的时候如果没有安装App,会提示Cannot open Page的提示,而 ...

  2. H5通过Universal Link(通用链接)唤起app

    问题:之前使用的通过网页打开app都是通过URL scheme打开app,但是我们在开发的过程中遇到过一个奇怪问题,本地的debug的时候都是可以正常打开的,但是打成安装包之后URL scheme没有 ...

  3. iOS Universal Link 简介

    一.什么是Universal Link Universal Link(通用链接)是什么,相信iOS开发的同学一定对这个东西非常熟悉.这是Apple在iOS9推出的一种能通过HTTPS链接直接启动手机A ...

  4. wap ios android,wap 唤起App 的两种方式Schema Universal Link

    1.schema 现在线上大多数 App 使用的就是 schema 跳转,都对应一套路由法则,基本都能做到跳转到 App 内任一界面. location.href?=?'schema://xxxx' ...

  5. ios Universal Link 配置教程 + 踩坑记录

    Univeral Link的配置有3方面:Apple Developer网站配置.XCode配置.服务器资源配置(apple-app-site-association文件创建和存放) 首先说下我们的需 ...

  6. 生成微信小程序码、URL Scheme和URL Link

    通用第一步,获取access_token,需要服务端去获取并缓存 (APPID和APPSECRET在微信小程序后台查看获取) https://api.weixin.qq.com/cgi-bin/tok ...

  7. 趣谈 iOS Universal Link

    作者:iHTCboy 本文对 iOS Universal Link(通用链接)的浅入浅出介绍,从产品的角度来了解其发展历程. 1.了解 Universal Link 背后的故事 2.学习 Univer ...

  8. 项目添加universal link跳转,升级微信SDK

    转载地址:https://www.jianshu.com/p/ceafb907db40 苹果对还未从UIWebView更新到WKWebView的应用做出了明确规定:新应用最晚于2020年4月份,更新的 ...

  9. Universal Link|iOS开发者不得不知的技术

    1.Universal Link的使用场景 Universal Link是苹果在WWDC 2015上提出的iOS9的新特性之一.此特性类似于深层链接,并能够方便地通过打开一个Https链接来直接启动您 ...

最新文章

  1. 你真的理解CAP理论吗?
  2. 今日头条再次宣战腾讯!
  3. Angular环境配置及创建新的项目
  4. Codeforces Gym 100187E E. Two Labyrinths bfs
  5. MariaDB修改端口号
  6. python爬虫淘宝评论_记录一次爬取淘宝/天猫评论数据的过程
  7. 前端面试必考的「 Webpack详解 」都在这了
  8. erraddsave.php,DedeCms教程:挑错管理
  9. Win10电脑下载软件有绑定软件怎么删除
  10. 跨端融合!探索前沿科技无限可能,深圳腾讯2018TLC大会再度来袭,早鸟票半价最后4天!
  11. ZStack--级联框架
  12. 单点登录(SSO)服务
  13. 初中三年级计算机表格考试模拟,初中三年要做这些事情,三张表格说透初中三年,收藏必看...
  14. 错误 1 error MSB4062: 未能从程序集 C:\caffe\NugetPackages\OpenCV.2.4.10\buil
  15. oracle 8i 启动,如何快速启动oracle 8i SQL-Plus?
  16. Xilinx FPGA DDR3设计(一)DDR3基础扫盲
  17. 小本生意,请各位博友多多支持
  18. 【谈谈】动态规划——求最长公共子序列
  19. Excel阅读模式/单元格行列指示/聚光灯开发 技术要点再分享
  20. 深圳大数据培训:好程序员大数据学习路线之hive 存储格式

热门文章

  1. 笔记_Maya绑定基础_骨骼连接工具,以及修改和删除多余骨骼工具
  2. JavaScript实现图片预览功能
  3. 深度学习,自然语言处理和表征方法
  4. mysql主键约束自动增长_MySQL教程45-MySQL主键自增长
  5. Android圆形imageview布局,Android实现圆角矩形和圆形ImageView的方式
  6. UML学习入门就这一篇文章
  7. 皇家骑士300自走棋怎么用电脑玩 皇家骑士300自走棋模拟器教程
  8. java接收meta name=_java_java实现获取网站的keywords,description,获取网站的meta name=keywords - phpStudy...
  9. 在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。 -- Shirley对比编程珠玑 inShirley
  10. 人工智能的发展趋势之一是必须给其加入情感纽带这个属性