iOS Deep Links

Deep Link背景知识

Web链接不知道app的存在,当在手机上打开一个Jet.com这样一个网页链接,你会进入到浏览器中打开Jet.com网站,尽管你的手机上已经安装了Jet app。Deep Link解决的问题就点击一个网页链接,能够跳转到对应的app中。

传统的deep link

传统的deep link当你在点击链接的时候,能够跳转到相应的app中,只要你已经安装了app。也就是如果手机上没有安装app,跳转至下载页。在iOS中,可以通过URL Scheme和Universe Link来实现。

deferred deep Link

deferred deep link是指用户打开一个web page的时候并没有安装对应的app,在用户安装app以后打开直接跳转到链接对应的内容。

deferred deep link

实现思路:H5需要上报设备的一些信息到服务器端进行保存,用户下载后,第一次启动也上报设备信息,去服务器端查找是否有匹配的H5页点击行为,如果匹配则进行app内部跳转。

应该上报哪些信息更获得比较高的匹配准确率?
  • Device Info
    1> 前端获取尽可能多的信息上报后台进行存储
    2> app启动时,同样提供尽可能多的设备信息,向后台查询
    3> 后台根据相关设备信息以及前端和app端访问时间进行模糊匹配,匹配成功后向app返回数据
    支持设备无限制,无侵入性,理论成功率低,实践成功率较高

  • Paste Board
    1> 前端生成唯一标识符identifier,通过js脚本保存在剪贴板
    2> 前端将identifier和其他数据上报后台,后台进行存储
    3> app启动时读取剪贴板中的identifier,向后台查询数据
    支持设备iOS10+,有侵入性,成功率高

  • 网页和app共用Cookies
    Github上的例子[2]
    app内SFSafariViewController和系统的safari是同一个,共享同一个沙盒,可以操作同一个cookie。
    1> 启动本地服务器,safari访问指定页面设置cookie,对应于为XXXHost
    2> 前端将相关数据上报后台,后台解析cookie并与数据进行绑定保存
    3> app启动时,先开启SFSafariViewController,访问特定url,并携带设备id
    4> 后台解析上述访问url的设备id,并解析访问的cookie,将cookie与设备id绑定
    5> app请求api接口,携带设备id,通过后台查询相关信息
    app启动时SFSafariViewController设置为透明,用户无法感知这一流程:苹果审核指南:5.1.1
    支持设备iOS9,iOS10,无侵入性
    流程如下图所示:

    通过Cookie进行匹配[1]

整体流程示意图
deferred link整体流程示意图[1]

现有的Deep Link成熟产品Branch links

翻译自How Branch links work
Branch Links是一个成熟的Deep Link产品,查看其官方文档有助于理解Deep Link在前端和后台的多方面应用及在前端和后台的API设计。

1. 创建Links

  • Mobile SDK
    当你集成了Mobile SDK,在你的app内分享或者邀请另一个用户的时候,利用SDK发出请求,然后SDK返回一个Branch link。
  • Web SDK
    当你集成了Web SDK,在的网页内一个用户点击分享或者邀请另一个用户的时候,利用SDK发出请求,然后SDK返回一个Branch link。
  • API
    使用API批量生成Branch Link,比如需要为邮件联系人每一个人发一个唯一的link。
  • Dynamic Long Links
    不想通过SDK的API来创建links,只是在自己的link后边加上一些查询参数。
  • Quick Links
    具体定制links的外观等等,通过Dashboard平台订制

2. links中携带数据

通过Dashboard的Quick Link Creator,可以为link添加任一额外的key-value数据。建议添加如下字段:

说明 例子
channel 分发link的渠道 Facebook, email, SMS
feature link的动作 share, invite, deal, gift
campaign link对应的运营活动 "Fall Sale"秋季促销, "Launch Event"发布活动
tags link相关的标签 boots, recipes, paid
link中携带数据

3. 点击links

Branch link实际上是web上的一个网页,当用户点击Branch link时,打开了这个webpage,我们使用matching去检测你的用户设备,操作系统,浏览器,和浏览器相关的cookie,检查用户是否安装了app,然后进行下一步操作。

点击链接之后的行为

4.使用数据

deep linking的难点在于,与link相关的数据,比如用户从哪来,要到哪去,都会在app store丢失。一旦你打开app,app就通过Mobile SDK请求Branch,我们使用device fingerprints去将app打开与最初的link点击匹配起来,即使中间被app store下载步骤所分割。

当匹配完成后,将发送与该link相关的数据(步骤2)到你app中,然后,app就可以使用这些数据。可以使用与链接关联的数据进行个性化显示(比如link中配置了一张图片),当然也可以链接到app的具体内容页面。

app获取link携带的数据

5. 匹配准确率

见第二节Branch Matching

6. 统计图表

所有的link携带的数据,link的点击,app的使用情况都可以通过图表展示出来。通过图表获得的信息包括:

  • 获取最多下载的渠道
  • 推荐贡献最多的用户
  • 对某一块内容的查阅,点击和安装

如下图所示:


Link点击统计

内容统计

Branch Matching

100%匹配的方法

直接deeplinking

当app已经安装,可以直接通过Branch links的配置得到app的URL scheme(myapp://)或者Universal Links,我们可以直接打开app并传递一个click identifier;click identifier然后被发送到Branch servers去获取与link相关联的数据。

非100%匹配的方法

浏览器到app的fingerprint匹配

Branch搜集了用户在浏览器中点击Branch Link获取的设备信息,和用户在打开app时搜集到的设备信息。这些信息包括IP地址,操作系统,操作系统版本,设备类型以及其他参数。这就是用户的digital fingerprint,能够从浏览器和app中获取到。

但是由于浏览器中获取的digital fingerprint数据比从app中获取的digital fingerprint数据量要少,所以从app中获取到的digital fingerprint是无法100%匹配到从浏览器中获取到的digital fingerprint。当打开app时,发现有多个浏览器digital fingerprint与之匹配,可以选择一个最小时间范围内的digital fingerprint作为匹配,但是这个匹配可能不准确。

Configuring Your iOS App for 100% Match ( > iOS 10 only)

Include SafariServices.framework

First off, you'll need to include the SafariServices.framework into your app to leverage this. Currently, as soon as you add the Framework, Branch will start triggering the Safari-based 100% match technique. To add the framework, simply go to your Xcode project:

  • Select the right build target
  • Select the General tab
  • Scroll down to Linked Frameworks and Libraries
  • Click the + button
  • Add SafariServices.framework
Set the matching domain to app.link

Because our Safari View Controller matching method works based on comparing the cookie Branch set on a click to the cookie set with the View Controller, the domains must be consistent. iOS assumes that you're on the bnc.lt domain, so if you're using app.link domain as your default (most apps), you must specify this domain in your PLIST file.

Please set the branch_app_domain to app.link in your PLIST as shown below:

Need to disable SafariViewController?

Note that this mechanism can be disabled using the following method, which should be called before initSession.

Objective-C|Swift
[[Branch getInstance] disableCookieBasedMatching];

参考文献

[1] LDLink方案设计. 老周
[2] App自动登录

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

推荐阅读更多精彩内容

  • 20180914 修心日记第十九天 坏掉的雨伞 今天,孩子放学路上打电话说,不小心把雨伞掉在地上摔坏了。以往,我会...
    湘笨儿阅读 484评论 8 5
  • 忽悠与被忽悠 儿时记计九 忽悠与被忽悠 春节己接近尾声,元宵佳节即将来临。舞狮子...
    雪若晨曦阅读 753评论 1 7
  • 九寨沟的色彩、缤纷、奇特、变幻无穷;九寨沟的水景形态极美,湖,瀑,潭,泉,异彩纷呈,收尽天下水景之美态。九寨沟,一...
    旅途印记阅读 416评论 0 0
  • 我还记得以前有个学长告诉我们,人际交往中有一条很重要的法则,就是要给对方他需要的,而不是你认为他需要的。对一个人好...
    我的蜂蜜呢阅读 239评论 0 1