转载请注明来源 http://www.cnblogs.com/hucn/p/5917924.html

活跃人数是衡量app一项关键指标, dau, mau, 有了流量才能给业务发展提供养分和空间.

app的流量一方面来自自身的留存, 一方面来自外部的供给, 而deeplink是外部引流的重要手段.

1 什么是deeplink

当有人分享一个商品给你, 发送一个链接到你的手机上, 你点击链接后直接跳转到app内对应的页面.

当你从浏览器中使用百度搜索, 点击一个搜索结果, 直接跳转到你的app的指定页面.

这些都是deeplink的使用场景, deeplink是从拦截外部请求到app内并定位到具体页面的技术.

2 为什么做deeplink

上面提到了流量的重要性, 而deeplink能够将外部流量引导到app内, 并提供连贯的浏览体验, 实在是引流的大杀器.

除此之外, deeplink还做高效的流量分发. 通过外部url的投放和内部拦截, 可以针对不同场景直接分发流量到具体页面, 将用户直接引导到各个垂直频道.

ios的appsearch和消息都在努力做, 培养用户, 虽然目前使用量不大, 但的确是比入口堆叠更有效的流量分发方式.

3 如何做deeplink

deeplink分两种, 一种是用户已经安装了你的应用, 直接做链接拦截和跳转. 另一种是用户没有安装, 需要下载安装, 安装完成后再跳转到具体页面(reserved deeplink). 这两种都有不同的方案和对应的难点.

已经安装app的应用, ios8以下可以使用URLSchema做url拦截. Android上applink可以解决跳转的问题. 而iOS9以上提供的universal link方案把体验做到了极致, 无需弹窗提示, 直接拦截跳转. 下面重点看看universal link如何做.

3.1 实现universal link

建议先看下官方文档

apple为了体验和安全, universal link流程略复杂. 如官方文档提到, 需要在要拦截的http链接根路径下(或者.well-known下)提供一个apple-app-site-association文件, 文件描述了对域名的拦截规则, 格式可以参照google的https://google.com/apple-app-site-association. 这里有几点需要特别注意!

  • aasa文件是精确到域名的, 也就是说www.google.com和map.google.com是两个aasa文件.
  • aasa不能有302, response header必须是200.
  • 必须是https.

接着需要在app的com.apple.developer.associated-domains文件中添加拦截的域名, 例如.

applinks:map.google.com

最后在UIApplicationDelegate中实现 application:continueUserActivity:restorationHandler: 方法, 完成跳转并且 return YES .参照API文档

3.2 调试universal link

如果你照着上面做universal link就生效了, 那么恭喜你, 可以略过这段.

universal link的缺点是—-链路太长, 不好调试. 笔者本着业界良心, 分享下之前解决universal link不生效的小技巧.

  • 1 使用真机调试. 官方说模拟器可以调试, 可有时事实却不是这样, 保险起见使用真机调试.
  • 2 使用抓包软件分析app安装. 每次删除重装app, 分析请求. app会在安装阶段请求aasa文件做校验. 因此如果没有发请求, 就是app entitlement写的有问题, 否则就是aasa文件问题.
  • 3 调试aasa请求. 注意几个点, 路径, 域名, https, 200. 官方说的mime-type和content-type, 亲测不需要. 还有一小技巧, 可以把请求代理到本地服务直接测试, 不需要发布到线上.
  • 4 使用iMessage测试. 用iMessage发送url做测试最靠谱, 其他app由于有可能定制了Safari, 会有各种诡异问题. 长按url, 看看是否有使用xxx打开选项, 因为有可能误关了universal link.

4 总结

相信完成了applink, 能够大幅提升app流量和产品体验. 下回看看如何用户没下载app时如何在安装完再跳转到具体页面.(reserved deeplink). 以及如何把这些技术串起来, 做到完美的体验.

User Growth Using Deeplink. (part1)的更多相关文章

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  2. Linux平台 Oracle 11gR2 RAC安装Part1:准备工作

    一.实施前期准备工作 1.1 服务器安装操作系统 1.2 Oracle安装介质 1.3 共享存储规划 1.4 网络规范分配 二.安装前期准备工作 2.1 各节点系统时间校对 2.2 各节点关闭防火墙和 ...

  3. 表空间统计报告 Tablespace growth Report

    SQL> select TS# from v$tablespace where name='ABC' ; TS# ---------- 6 set serverout on set verify ...

  4. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

  5. FP - growth 发现频繁项集

    FP - growth是一种比Apriori更高效的发现频繁项集的方法.FP是frequent pattern的简称,即常在一块儿出现的元素项的集合的模型.通过将数据集存储在一个特定的FP树上,然后发 ...

  6. Deeplink做不出效果,那是你不会玩!

    最近魔Sir听一些有些同学说之前用过Deeplink,但效果并没有想象中的那么好,在了解了小伙伴的使用场景后,魔Sir觉得有必要出这么篇东西告诉大家,Deeplink效果差,那是因为你不会玩! 对于已 ...

  7. 薛非《品悟C-抛弃C程序设计中的谬误与恶习》读后感part1【转】

    薛非<品悟C-抛弃C程序设计中的谬误与恶习>读后感part1 作者:宝贝孙秀楠﹣大连程序员 发表于2012年10月5日由admin 出处:http://sunxiunan.com/?p=2 ...

  8. How to control PrincipalObjectAccess table growth in Microsoft Dynamics CRM 2011

    https://support.microsoft.com/en-us/kb/2664150 How to control PrincipalObjectAccess table growth in ...

  9. 小课堂Week12 Clean Code Part1

    小课堂Week12 Clean Code Part1 今天的主题是函数,让我们看一个函数,找一找其中的"不整洁". 我们也根据这段代码,讨论下对于整洁代码的两个重要原则. publ ...

随机推荐

  1. node中的cmd规范

    你应该熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例如:(假设这是rocker.js文件) exports.name = function() { console.log('M ...

  2. 关于 CSS 反射倒影的研究思考

    原文地址:https://css-tricks.com/state-css-reflections 译者:nzbin 友情提示:由于演示 demo 的兼容性,推荐火狐浏览.该文章篇幅较长,内容庞杂,有 ...

  3. 如何快速优化手游性能问题?从UGUI优化说起

    WeTest 导读   本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法.   在之前的文 ...

  4. MAC下 mysql不能插入中文和中文乱码的问题总结

    MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...

  5. 来吧,HTML5之一些注意事项

    1.说什么是HTML HTML是一种超文本标记语言(Hyper Text Markup Language), 标记语言是一套标记标签(markup tag),用来描述网页的非编程语言. 2.标签特性: ...

  6. JavaScript基础知识总结(四)

    JavaScript语法 八.函数 函数就是完成某个功能的一组语句,函数由关键字function + 函数名 + 加一组参数定义: 函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可 ...

  7. ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知

    一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...

  8. Python 基础之一变量和赋值

    变量:程序在运行的时候会用到很多临时存储数据,这个时候就用到了变量,临时数据的名字. Python中变量不需要声明,直接可以使用,变量的数据类型由赋值确定. >>> name=&qu ...

  9. Consul-template的简单应用:配置中心,服务发现与健康监测

    简介 Consul-template是Consul的一个方扩展工具,通过监听Consul中的数据可以动态修改一些配置文件,大家比较热衷于应用在Nginx,HAProxy上动态配置健康状态下的客户端反向 ...

  10. H3 BPM让天下没有难用的流程之功能介绍

    H3 BPM10.0功能地图如下:  图:H3 BPM 功能地图 一.流程引擎 H3  BPM 流程引擎遵循WFMC 标准的工作流引擎技术,设计可运行的流程和表单,实现工作任务在人与人.人与系统.系统 ...