需求描述
市场部要求收集区分来自不同安装渠道的注册量,包括官网跳转,宣传页,和直接App Store 下载等多个渠道。
需求分析
要实现这个需求,就要知道用户是从哪个渠道跳转到 App Store 并且下载安装完成并注册成功。这样我们需要在下载前对当前用户做一个标记,用户经过一系列操作后在注册的时候再对比这个标记来确定这个注册的来源。
需求实现
接下来主要从以下几个不同思路来尝试实现:
1. 苹果对开发者提供的 App Store Connect 来源分析
登陆开发者 Connect 中心 --- App 分析 --- 来源分析,即可获取下载来源,主要统计包含:
- “App Store 浏览”,“App Store 搜索”,“App 引荐来源”,“网页引荐来源”四大块的概览,数量,比例以及趋势。点击可单独查看具体来源以及更详细数据,比如“App 引荐来源”有微信,钉钉以及由其他 app 直接跳转来的数据,可以说很具体和殷实了。
-
“营销活动”: 通过设置营销活动的链接,当用户点击带有该链接的广告时,他们将被带到该 App 的 App Store 页面。会被针对性收集和统计,相当于自定义的来源统计。
以上都无需额外操作,开发者中心为你提供了这些统计和数据。但是,此数据只可用来做下载统计,至于之后打开 app 以及 app 内部的操作则完全统计不到了。
connect.png
2.SFSafariViewController 共享 safari cookie
我们一般是通过 Safari 来跳转到 App Store 下载应用,那么我们可以让营销链接设置cookie 并强制通过 Safari 来跳转到 App Store,然后在打开 app 后通过共享 cookie 来获取营销链接配置的参数。
关于获取 safari cookie 的方案, 因为沙盒缘故第三方 app 无法直接获取 safari cookie, 所以需要通过 SFSafariViewController 这个内置类来联通我们的 app 与 safari 间接关系获取 cookie。
实现思路:(因为一些方法的作废与新增,现测试并筛选后说明最新方案)
在用户打开 app 时调用 SFAuthenticationSession
方法访问 指定 url 会话,当前会话获取 cookie 并存储在 location.href 中,以 url 形式在 completionHandler 回调中返回。
On completion, the service will send a callback URL with > an authentication token, and this URL will be passed to the app by SFAuthenticationCompletionHandler.
The callback URL usually has a custom URL scheme. For the app to receive the callback URL, it needs to either register the custom URL scheme in its Info.plist, or set the scheme to callbackURLScheme argument in the initializer.
public init(url URL: URL, callbackURLScheme: String?, completionHandler: @escaping SFAuthenticationSession.CompletionHandler)
方法限制:
-
SFAuthenticationSession
方法 iOS 11 + -
alert.pngSFAuthenticationSession
方法需要用户授权提醒框允许获取 cookie 用作登陆
-
需要present SFSafariViewController(解决方案:弹出获取cookie后立即dismiss退出并销毁)
auth.png
方案2总结:
由于苹果对于数据的谨慎(弹框授权)以及审核问题,pass 掉了很多取巧优化的方案(比如弹出 controller 是 alpha 设置为0 等等),故无法很好做到用户无感获取 cookie 的流程。
但是,如果你要实现的是用户授权自动登录功能,则这不失为一个好的方案。方案没有好坏,取决于你要实现的功能。
3. 配合服务器数据对比获取参数
经过前面两个方案启发,想必大家也有个很多的注意,那么这里再说一个稍微麻烦点,但是更适配我们要实现注册统计需求的方案,也是我最终采取的方案。
既然苹果可以统计下载的数据,那么让我们在其上再做进一步尝试。
我们可以在点击营销链接跳转 App Store 的时候做一些事情,比如,获取当前用户 IP,设备信息,联网信息以及可以用来唯一标识当前用户的信息存储在服务端等待匹配使用。等待用户下载成功并在打开 app 的时候,首次获取必要信息与服务端的存储做对比,对比成功则标记为同一个用户,删除存储,并返回所需参数(或者无需返回参数,直接在服务端绑定渠道)
如果觉得麻烦,以上思路已经有一些成熟的第三方工具:
open install (同类型 share install)
大致实现为: 配置好带参数的 url, 用户点击 url 时, 跳转到中间页(js app页)获取用户设备信息并跳转到 app 或者 appstore, 下载后再根据设备从服务端对比获取之前的参数。(需要和服务端核对)
优点:
- 集成简单易用
- 和我的需求很匹配
缺点:一个字钱,这个功能属于收费功能, 8000 每年,更多见 open install
神策
神策也实现了类似的称为渠道追踪的功能,并且有简单的说明:
track installation.png对于 iOS 来说,由于 iOS10 的限制,App 通用渠道推广目前只能是模糊匹配,主要是基于 IP、Date、User Agent 构建的模糊匹配,匹配成功率在75%左右。
优缺点和上面类似,因为本来我们应用本来就用到神策统计,所以无需再次导入库,最终选择了神策。
方案3总结:
- 较好的匹配了注册传参的需求
- 有较多实现好的第三方库提供参考或直接使用
- 匹配率并不能达到 100% 完全匹配
- 一些复杂操作可能导致中间环节出错
- 不依赖第三方自己实现的话需要服务端做技术支持(能不求人尽量不求人🤦♂️)
以上,因为一些限制,没有完美无缺的方案,但是,只要针对不同的需求,采取合适的方案,就能收获你想要的结果
谢谢阅读(╹▽╹)
参考
SafariAutoLoginTest https://github.com/mackuba/SafariAutoLoginTest
open install https://www.openinstall.io/track.html
神策 https://manual.sensorsdata.cn/sa/latest/guide_channel_app-1573516.html
iOS 渠道下载统计方案 https://www.jianshu.com/p/cbd6b5ad5655
网友评论