Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【SealDEV 倾情奉献】Referrer 和 DeepLinks 的对比分析 #20

Open
RWebRTC opened this issue Sep 21, 2017 · 0 comments
Open

【SealDEV 倾情奉献】Referrer 和 DeepLinks 的对比分析 #20

RWebRTC opened this issue Sep 21, 2017 · 0 comments
Labels

Comments

@RWebRTC
Copy link
Collaborator

RWebRTC commented Sep 21, 2017

原文在这里

需求背景

设想一下你做了一个新闻类 App,一个用户在其他应用中被你的某一个条推广广告所吸引,在安装了你的 App 的情况下,如果他点击了一下广告,直接就跳转到你的 App 广告上新闻的详情界面,用户会不会觉得这就是他想看到的呢?或者如果他没有安装你的应用,被引导安装后,第一次打开应用也同样跳转到那一条新闻的详情界面,用户会不会觉得很开心呢?

了解用户的关注点,满足用户的需求,是每一个 App 开发者都应该关注的。笔者结合具体的正在开发的项目,调研了一些技术方案,最终采用了以下两种方式相结合的方案:

  • Google Referrer
  • Deep Links

本文分别对这两种方式进行分析总结。

Google Referrer

当从外部链接跳转到 Google Play Store 时,可以使用 Google Install Referrer 来 100% 的精确归因,Google Analytics 也是使用 Install Referrer 来进行归因统计的。(引自 Google Referrer 的介绍)

既然 Google 自己的应用安装统计都是采用的 Google Referrer 的方式,并且号称 100% 精确,我们有理由认为统计从哪里跳转到 Google Play Store 的,采用 Google Referrer 的方式是可行的。那我们应该怎么去做并且他的实现原理是什么呢?

具体的做法是:

  1. 既然需要确定需要是从哪里跳转到 Google Play Store 的,则需要设置跳转到 Google Play Store 的链接格式为:

https://play.google.com/store/apps/details?id=com.android.chrome&referrer=tracking_id%3D123456789&utm_source%3Dweb_site%26utm_medium%3Dcpc%26utm_term%3Dchrome%26utm_content%3Dlogolink%26utm_campaign%3Dsafe%26anid%3Dadmob

  1. 在自己的应用中添加 Receiver,接收 Google Play Store 发送给应用的参数。

应用通过 Google Play Store 安装应用后,这个 Receiver 在应用第一次启动时,接收 Google Play Store 发过来的 referrer 参数。这些参数的具体含义是:

还有一个参数是 tracking_id 可以设置追踪 ID,如果应用正在投放广告,或者是有一些 Landing Page 统计时,这个 ID 可以将这些信息关联起来,进行横向对比分析,

根据这些信息就可以进行不同的操作了,比如获取到的 source 是 web_site,则表明其是通过网站跳转过来的。这些数据的统计,需要各方面的配合,一起保证各处设置的链接都是正确的。这里需要注意的是这个 Receiver 接收的 action 比较特别,是“com.android.vending.INSTALL_REFERRER”,而这个 Action 的发送方式被 Google Play Store 进行了特殊的处理,如果有多个 Receiver 需要处理,需要在第一个 Receiver 中去特殊调用其他的 Receiver。具体原因和做法参考这里:https://goo.gl/e5taJX 的解释,测试 INSTALL_REFERRER 可以使用这里:https://goo.gl/gzd35d 的工具。

好了,到现在为止,如果用户在跳转到 Google Play Store 时,携带了一些参数,我们可以将其解析出来并进行相应的处理,例如跳转到用户感兴趣的二级界面。但是这还不够,如果期望的是用户在安装应用后,在其他应用或网站点击某些内容时,直接应用的打开二级界面直接的去满足用户的需求,或者某些平台在某些场景下不支持 Referrer 怎么办?答案是采用 Deeplink 及其相关技术。

Deep Links

什么是 Deep Links  呢?

Users following links on devices have one goal in mind: to get to the content they want to see. (引自 Google)

究竟是什么意思,直接点来说就是用户可以在一个 App 中直接打开其它 App 的二级界面,这样的用户体验是很棒的!

实现方法也不复杂:

首先需要在清单文件中添加意图过滤器(Intent filter)


这里除了  不同外,intent-filter 是相同的,在实际情况中,他们会合并成在一起:


并且有趣的是其实他们不止可以直接打开 http://www.example.com/gizmos 和 app://open.my.app 外,还可以直接打开 http://open.my.app 和 app://www.example.com/gizmos,这也是 Google 开发人员的一点幽默吧。
你以为这就完了吗?当然不是,这样的文章网上太多了,SEAL 不会那么没有新意。接下来要说的是 App Links,App Links 是 Deep Links 的升级版。

As a developer, you can set up Android App Links to take users to a link’s specific content directly in your app, bypassing the app-selection dialog, also known as the disambiguation dialog. Because Android App Links leverage HTTP URLs and association with a website, users who don’t have your app installed go directly to content on your site.(引自 Google)

简单点来说就是同样的做法,可是采用 Deep Links 时,如果是 http://www.example.com 这种形式的链接,用户需要手动去选择用浏览器还是你的应用去打开,其他应用可能因为某些应用流行度比较高,去设置一些其他应用采用的域名或前缀,拦截一些其他应用的用户,这不太合适吧。并且如果已经安装了应用,用户点击后更多的情况是希望用户用 App 打开,否则只去浏览网页,这似乎不太符合预期,因此在 Android API 23(Android 6.0)以上的手机,用户被设置为应用打开优先级更高,用户减少了一步选择浏览器的操作,用户可以去设置中更改默认设置。同样开发者可以申请域名所有权验证,如果验证通过了,其他应用就不可使用你的域名了,一定程度上减少了侵权的可能性。同时 App Links 支持 “Instant App”,就是那种类似于小程序一样的 App,不需要安装,用完即走。虽然 “Instant App” 使用场景似乎并没有那么多,可了解这个技术不是什么坏事,说不定哪天就火起来了,这里暂时先不赘述了。

回归正题,这里介绍完了 Deep Links,那除了直接打开二级界面外,还有哪些用处呢?做推广!这里只举一个例子吧:Facebook 的推广、广告等不支持设置 Referrer,投放带来了流量,但是用户具体是被什么吸引过来的根本不知道,无法统计,也无法根据用户的喜好推广或跳转用户最感兴趣的界面,这怎么可以忍?Facebook 支持 Deep Links,投放在投放广告时,可以设置 Deep Links,并且可以提供了方法去获取,这就可以达到和 Referrer 类似的目的,了解用户喜欢的喜好,对优化产品还是很有帮助的。

由于 Facebook 在国内有一定限制,百度、豌豆荚等也开始支持这些技术了,并且搜索引擎也对 Deep Links 进行了一定的优化,在点击后也可以跳转到应用的具体界面,如果感兴趣,这些内容请自行搜索。

这里再介绍一个最佳实践:

因为 Deep Links 是直接将用户引导到二级界面,没有前因后果,而没有前因会造成一些参数数据不完整,会引起程序挂掉,大量的逻辑判断,又会一定程度上影响代码质量。因此,如果应用内 Deep Links 使用比较多的话,将所有或其中一部分 Deep Links 引导到同一个 Activity 中,将这个 Activity 作为路由,负责跳转或保证数据安全,将逻辑判断简化,局限在小范围内,对代码解耦或维护来说,都可能是一个不错的选择。

第三方解决方案

除了上面介绍的技术方案外,还可以接入第三方服务提供商,他们帮你做好 Landing Page,你只需后台去看统计,这样实现成本比较低,也是个不错的选择,不过可能需要支付一些费用,统计的准确程度需要更多的数据去验证,我调研了一些,不过由于种种原因没有采用,这里不再赘述这一部分内容了。

总结一下:

  1. Referrer 是 Google 推荐的,也是很多统计平台采用的统计方式,实现简单,但是有局限性,在应用已经安装的情况下,需要使用 Deep Links,在无法设置 Referrer 的情况(某些推广平台不支持)下不适用。
  2. Deep Links 或 App Links 是用于优化用户体验的一种方式,也同样可以用来做统计使用,但没有 Referrer 那样直接,网页跳转 Google Play Store 设置 Deep Links 也是有一定困难的。
  3. 两种方式都各有优缺点,结合起来使用,效果更佳。

注:本文部分图片来自网络。

知其然,更要知其所以然,SealDEV 倾情出品。

@RWebRTC RWebRTC added the Blog label Sep 21, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant