DeepLink

DeepLink 深度链接

什么是DeepLink

DeepLink,又称深度链接、调起链接,是一套链接服务,用户点击链接可以跳转至 App 的特定深度页面。一般分为 DeepLink 和 Deferred DeepLink。

DeepLink

深度链接,指移动设备在已安装目标 App 的情况下,把特定的参数通过 url 的形式传递给 App,从而直接打开 App 的特定深度页面,实现从链接直达 App 内部页面的跳转。

Deferred DeepLink

延迟深度链接,指移动设备在没有安装目标 App 的情况下,用户点击链接时,引导用户前往下载安装 App,在其完成后,首次打开该 App 时自动跳转至 App 的特定深度页面。

应用场景

DeepLink 的应用场景众多,可用于 App 社交分享、App 沉默唤醒、App 广告引流、Web to App、应用商店 ASO 等场景。

同时,DeepLink 也适用于外部 H5 与原生 App 的交互场景中,例如:

  • 视频类 App:点击 H5 链接直达指定视频播放页

  • 直播类 App:点击 H5 链接直达指定直播间

  • 电商类 App:点击 H5 链接直达指定商品购物页

  • 新闻类 App:点击 H5 链接直达指定资讯详情页

  • 游戏类 App:点击 H5 链接直达指定关卡、房间等

常用调起方式

DeepLink 常用调起方式主要有以下四种:

常用调起方式 适用平台 调起方法及特点
Universal Link iOS 9 及更高版本 通过 http 协议的链接直接打开 App,用户体验顺滑
AppLinks Android 6 及更高版本 通过 http 协议的链接直接打开 App,用户体验顺滑
scheme iOS 和 Android 所有版本 iOS 和 Android 通用的调起方式,打开前操作系统会询问是否打开目标 APP
剪切板 可操作设备剪切板的系统版本 通过剪切板的写入及读取,实现[延迟深度链接]功能

Scheme

什么是 URL Scheme?

android中的scheme是一种页面内跳转协议。

通过定义自己的scheme协议,可以非常方便跳转app中的各个页面。

通过scheme协议,其他应用可以定制化跳转到我们APP内部页面。

Scheme协议在Android中使用场景

  • H5跳转到native页面

  • 客户端获取push消息中后,点击消息跳转到APP内部页面

  • APP根据URL跳转到另外一个APP指定页面

如何使用scheme协议

  • 在Mainefest配置文件中配置需要用scheme协议跳转的Activity
<!-- scheme协议 -->
<activity
    android:name=".SchemeActivity"
    android:label="@string/app_name">
    <!-- 要想在别的App上能成功调起App,必须添加intent过滤器 -->
    <!-- 协议部分,随便设置 -->
    <intent-filter>
        <!--协议部分,随便设置-->
        <data android:scheme="scheme" android:host="mtime" android:path="/goodsDetail" />
        <!--下面这几行也必须得设置-->
        <category android:name="android.intent.category.DEFAULT"/>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
    </intent-filter>
</activity>

  • data部分都有哪些属性
<data android:host="string"
    android:mimeType="string"
    android:path="string"
    android:pathPattern="string"
    android:pathPrefix="string"
    android:port="string"
    android:scheme="string" />

  • 在java中使用通过协议跳转
/**
 * (1)在manifest配置文件中配置了scheme参数
 * (2)网络端获取url
 * (3)跳转
 * (4)由于系统的activity栈有bug,外部相同的scheme吊起详情页后,点返回首页;再从外部用          
 *一样的scheme吊起会无法跳转详情页。因为系统认为root activity是相同的,不给启动详情  
 *页,所以只能用这个方法,修改下intent data里的数据,加个时间戳进去
 */
String url = "scheme://mtime/goodsDetail?goodsId=10011002";
Uri.Builder openUri = Uri.parse(url).buildUpon();
openUri.appendQueryParameter("push_click_times",String.valueOf(System.currentTimeMillis()));
Intent intent = new Intent(Intent.ACTION_VIEW,openUri.build());
startActivity(intent);

  • H5跳转到native页面
<!DOCTYPE html>
<html>
<body>
<h1>Test Scheme</h1>
<!--手动点击跳转-->
<a href="scheme://mtime/goodsDetail?goodsId=10011002">Click</a>
</body>
</html> 

  • 获取scheme协议参数
public class xxxActivity extends Activity {
    private static final String TAG = "xxxActivity";
    private TextView tvParam;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tvParam = (TextView) findViewById(R.id.tv_param);
        Uri data = getIntent().getData();
        Log.i(TAG, "host = " + data.getHost() + " path = " + data.getPath() + " query = " + data.getQuery());
        String param = data.getQueryParameter("goodsId");
        schemeTv.setText("获取的参数为:" + param);
    }
}

AppLinks

App Links是谷歌在2015年的I/O大会上宣布了一个新特性:Android M以上版本可以通过AppLinks允许开发者将app和他们的web域名关联。这一举措是为了最小化用户遇到“打开方式”对话框的概率。

Android App Links有以下几点好处:

  • 安全性/特殊性:由于Android App Links使用了HTTP/HTTPS URL的方式向开发者的服务器进行连接认证,所以其他应用无法使用我们的链接

  • 无缝的用户体验:当用户未安装我们的应用时,由于使用的是HTTP/HTTPS URL,会直接打开一个网页,我们可以在这个网页中展示应用介绍等,而不是显示404或者是其他错误页面

  • 支持Instant Apps:可以使用App Links直接打开一个未安装的Instant App

  • 支持Google Search或其他浏览器:用户可以直接在Google Search/Google Assistant/手机浏览器/屏幕搜索中直接通过点击一个URL来打开我们的指定页面

Android AppLink集成

  1. 创建intent filter

Android Studio 2.3以后提供了App Links Assistant来帮助开发者快速在AndroidManifest.xml中创建需要配置的intent filter,使用App Links Assistant有以下几个步骤:

  • 点击Android Studio的菜单栏中的Tools > App Links Assistant

  • 点击Open URL Mapping Editor,然后在对话框底部点击+去添加一个新的URL mapping

  • 在弹出的Add URL Mapping对话框中输入对应的内容,包括Host、Path、Activity, 输入完成后点击OK

image

注:App Link 支持多个域名

使用App Links Assistant在manifest文件中自动生成的内容如下:

image
  1. <u>检查URL Mapping是否配置正确</u>

App Links Assistant提供了检查URL Mapping是否配置正确的快捷方式,操作如下:

  • 点击Open URL Mapping Editor,然后在Check URL Mapping对话框中输入URL,当输入一个能够成功匹配到Acitivty的URL后,输入框下方会显示This URL maps to xxxxx(app)
image
  1. 处理App Links进入应用的场景

通过App Links Assistant -> Select Activity选择之前配置的URL对应的Activity, 点击Insert Code即可在onCreate方法中插入获取从App Links跳转而来的URL的代码,生成代码如下

// ATTENTION: This was auto-generated to handle app links.
Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();

  1. 检查assetlinks.json是否上传成功

  • 为了在应用安装成功后,系统能自动验证该应用是否有权使用对应的域名,系统会向http://resource.zhoulei.com/.well-known/assetlinks.json请求数据,根据获取到的文件内容,验证应用域名的合法性。

  • 通过App Links Assistant -> Open Digital Asset Links File Generator -> Generate Digital Asset Links file的方式生成assetlinks.json文件,然后将该文件放置到正确的域名地址中。

  • 通过App Links Assistant -> Open Digital Asset Links File Generator -> Generate Digital Asset Links file -> Link and Verify可以检测是否正确的在服务器中放置配置文件,检测成功的话,显示如下图:(此处我没有上传,用的网图)

image

剪切板

H5页面在点击下载时自动调用剪切板复制当前用户渠道ID例如:#8283923023#,APP每次启动时调用剪切板内容格式符合则认定该用户和H5用户为同一用户,主要是通过剪切板的写入及读取,获取用户id或者详情页链接

Universal Link

Universal Link是iOS 9以后苹果推出的通用链接技术,能够方便的通过一个https链接来打开App指定页面,不需要额外的判断;如果没有安装App,则跳转到自定义地址。

相对Scheme的优势在于,Universal Link是一个Web Link,因此少了很多麻烦:

  • 当用户已安装该App时,不需要加载任何页面以及判断提示,能够立即唤醒App,用户未安装App,则跳去对应的web link(自定义页面)。

  • Universal Links支持从其他App中的UIWebView中跳转到目标App。

  • 绝大多数平台都支持Universal Link,能被搜索引擎索引,iOS微信7.0.5版本也解除了对Universal Link的限制,目前微信7.0.5以上版本已经能流畅运行****Universal Link

在Deeplink的实现方案中,Universal Link相比Scheme无疑具有更优的用户体验,iOS9.2及以上的版本更推荐使用Universal Link唤醒App。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  •   移动互联时代,手机作为我们日常交流的主要媒介,搭载了许许多多的移动应用程序,这些五花八门的应用程序极大的丰富了...
    Haraway阅读 22,156评论 0 15
  • 简书上所有的文章都是给自己看的,不是给你们看的,文章可能有误导。 移动搜索现状: 整个搜索这件事情本身从逻辑来讲分...
    徐薇薇阅读 603评论 0 0
  • 背景: 做产品和运营的小伙伴,对裂变营销情有独钟,主要原因无非裂变营销有一些独有的优势: 成本低,低预算就可以达到...
    子鱼文业阅读 627评论 0 0
  • 1.技术产生的背景? 明确的需求就是:手机打开我们的网站,点击打开按钮或者收藏按钮,用户如果已经安装app,跳转到...
    路飞_Luck阅读 14,498评论 0 17
  • 前段时间公司让调研一下DeepLink,说以后会用到,之前看了很久,并做了个demo,现整理一下,方便以后查阅,如...
    Jinbeen阅读 14,804评论 11 44