iOS未安装APP获取Safari浏览器数据(可用来记录下载渠道及推广源)

原文链接:http://www.hudongdong.com/ios/373.html

本篇文章的目的就是要达成未安装的app在安装app之后,去获取安装app之前Safari所浏览的数据,比如说用户在未安装手机百度时,已经在Safari浏览器中登录了百度帐号,当安装手机百度之后,打开该APP可以自动登录这个Safari浏览器中所登录的百度帐号。

当然也可以达成那种效果,比如打开某个带有邀请码的网页推荐用户去下载app,当通过appstore下载完app之后,打开该app,可以知道该邀请码是多少,网页和下载app之间隔了一层appstore,不能从网页直接传值到app,所以如果未安装该app的话,就需要网页和app去读取一个相同的值去标记,但是对于ios系统来说,idfa等唯一标识符只能app获取,网页获取不到,所以一般无法通信

比如上面这个图,A用户从web网页跳转到appstore,再从appstore下载app,但是这个过程中,也许用户A、B、C都在下载该软件,web网页是无法直接像app传送任何数据的,所以就需要确认到底哪个是从web网页推荐过来下载的,哪些是自己去appstore下载的。

一、判断唯一用户

1、通过idfa等标识判断

idfa等唯一标识只有oc能获取,但是网页一般获取不到ios的idfa,uuid等硬件的唯一标识符(除非使用苹果配置文件,这个用户需要安装,无法做到无痕,而且使用起来比较麻烦,有兴趣的可以去看看)

2、通过多重可获取的信息综合判断

由于无法准确的获得idfa等信息,所以可以多记录几个网页和app都能获取的数据,比如网络模式、IP、时间、机型、位置等,通过多重判断来看是不是同一个人,但是这种方式是存在误差的,比如一个公司用的同一个网络同一个机型的两个人就会判断有错误。

3、通过cookies判断

之前是不可以的,因为ios应用是沙盒运行,app之间创建的webview之间的cookies都是沙盒状态的,但是ios9之后,终于增加了一个全新的类SFSafariViewController,这个相当于在app内部创建了一个safari浏览器,用的和safari浏览器共同的cookies,所以可以用SFSafariViewController来获取cookies

二、使用SFSafariViewController

这个SFSafariViewController很简单,导入头文件#import <SafariServices/SafariServices.h>就可以像其他普通的viewcontroller一样创建

SFSafariViewController一般使用这两个代理函数

使用之后就可以打开指定的url,并且使用的是safari的cookies,打开的页面样子像下面这样

下面的工具栏在代理中也可以设置,但是一般不自己再设置了

三、网页和app共用cookies

使用SFSafariViewController访问域名之后,用的就是用safari打开的页面的cookies,比如我在手机的safari页面打开的网址是:www.hudongdong.com/uid/20,产生了一个cookies:20,然后我在app中打开网址www.hudongdong.com的时候,就可以用到同一个cookies:20,,而别人如果没有用safari页面事先打开这个网址的话,cookies:20是不会有的,这样就知道是我打开的,然后我在app中给服务器单独传值即可。

现在cookies虽然知道了,但是还有一点就是在SFSafariViewController中是获取不到cookies的,因为这个cookies存在safari系统中,那么怎么得到对应的值呢,那就需要服务端做一个对于你软件的scheme跳转了。

因为当你访问网页的时候,网页可以获取到你的cookies,你无需手动获得cookies,需要做的就是使用这个cookies去登录app中需要打开的那个网站,而在网页返回数据中调用你软件的scheme,同时在调用的时候把定义的cookies或者其他值传进来,比如我软件的scheme是comjdnetkuaifa,那么可以通过js调用:location.href = "comjdnetkuaifa://uid/" + uid;,这样就可以把用户的uid标识直接传过来了,然后在app中的代理方法

获取scheme传过来的值,比如像我们做的一样把uid传过来。

cookies的作用仅仅是登录同一个网站让网页端去判断之前是哪个用户登录的,然后网页返回对应的需要的值即可。

四、细节优化

因为要做到无痕,就是在用户不知不觉间登录,所以需要调整SFSafariViewController的样式,因为如果使用presentViewController的方案,在viewcontroller之间跳转的话,肯定会影响用户的体验,而网上流传的方案

设置透明度为透明和隐藏的话,苹果现在官方是不允许的

SafariViewContoller must be used to visibly present information to users; the controller may not be hidden or obscured by other views or layers. Additionally, an app may not use SafariViewController to track users without their knowledge and consent.

并且现在透明度最低设置为0.05,所以这个方案是会被拒的。

网上提供了一种思路,可以考虑吧safariView加到现在的Viewcontroller中,

当使用完毕之后,再移除即可

但在实际运行中,发现如果这样处理的话的确隐藏了,但是却并没有调用访问。

所以就用了一种解决方案是使用presentViewController切换界面

在初始化完成的时候,切换过来即可

五、其他获取cookies的方法

如果使用webview的话,可以在webview的代理函数中,去获取cookies。

但是这个cookies是沙盒中的cookies,就是软件自己的cookies,不是safari的cookies

六、demo下载

Github下载地址:https://github.com/DamonHu/cookiessssss

GitOSC下载地址:http://git.oschina.net/DamonHoo/cookiessssss

当然还有另外一个别人写好可以测试网页的demo

github下载地址:https://github.com/mackuba/SafariAutoLoginTest

七、参考文章

iOS app与浏览器 跨域互通

iOS10 SFSafariViewController not working when alpha is set to 0

如何获取一个uiwebview中的请求的cookie

iOS9-WKWebView+SFSafariViewController

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

推荐阅读更多精彩内容

  • 文章已在 2017年04月26日14:00 更新 例如: 分享一个页面,然后用户通过这个页面去下载app,完成...
    雨声不吃鱼阅读 5,581评论 4 13
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,969评论 3 119
  • 未来大方向:服务业 制造业陆续从一线城市撤出,方向:高端制造业-理工科 城市:16个人口超过500w的大城市(消费...
    城艾子阅读 280评论 0 0
  • 通过练习 培训 以及最重要的——方法 来设法增加自己的注意力 提高记忆力自己判断力 让自己切实比以前更聪明
    lubiaook阅读 607评论 0 0
  • 我把时间安放在角落 听它陈述过往的曲折 有甜蜜也有苦涩 你只是一个普通过客 从我的世界轻轻路过 我把记忆幻化成烟火...
    思念potato阅读 162评论 1 0