转载

iOS app与浏览器 跨域互通

 

本文主要介绍,app跨域访问app外部的浏览器的数据的方案,包括外部safari,或者QQ,微信,手百等外部app内的浏览器。

主要使用场景就是:

用户在别的wap网页上,产生了用户行为,用户数据,但是还没下载app,当用户下载app后,打算直接在app内延续之前在wap上的行为和数据的时候,就需要运用到跨越浏览器与app鸿沟的,互通方案。

简单举个例子就是:

用户在微信浏览器里,访问某个页面,感兴趣并且登陆了,然后引导下载了app,等用户下载完app后第一次打开,希望能自动就完成登陆,甚至同步下来一些刚才用户在wap页面上操作的数据

如果能发生跨浏览器与app的互通,除了这个case之外,还可以有更多地自由发挥,设计出更加舒畅的用户体验

想要实现这样目前看有2个方案,各自都有弊端,都不是完美的,本文会详细说明这两个方案

  • 设备指纹唯一识别方案
  • iOSSafariCookie互通方案

本文相关link

iOS9下SafariCookie与app互通

VKSafariDomainBridge Github

设备指纹唯一识别方案

如果用户在wap页面,能通过某种方式识别到唯一的设备标识,当用户离开去下载app,下载完成第一次打开app的时候,app能识别到一样的设备标识,那么就可以判断第一次打开app的用户,就是刚才浏览wap网页的用户,这样服务就可以把刚才wap上操作的数据结果,通过网络下发给app,从而让app实现,还原刚才wap的操作场景

这个过程大致如下

  • 用户在wap网页上产生了行为,产生了用户个人数据
  • wap网页收集了一种能够 唯一标识 设备的信息,并且发送给了服务器
  • app安装完毕后第一次运行,也去通过app尝试收集 唯一标识 设备的信息,并且发给服务器
  • 服务器经过对比,发现app的 唯一标识 与wap网页发上来的 唯一标识 能够匹配
  • 服务器判断,是同一个人操作,于是下发用户个人数据

纵观整个流程发现,一切的核心,一切的关键,就是那个 唯一标示

这个 唯一标识 要具备太多太多的条件,想找到其实很不容易

  • 选择当做 唯一标识 的内容,必须能让app获取的到
  • 选择当做 唯一标识 的内容,必须也能让wap获取的到
  • 选择当做 唯一标识 的内容,还必须有能力区分出不同的设备,如果选的 唯一标识 好几个设备取出来的都一样,那么就乱套了

那么我们看看遵循这几个条件,我们能选择啥?

  • UDID,MAC地址啥的,别说wap了,app都不可能取到了
  • JS有好几套,通过网页渲染canvas的方案获取屏幕”指纹”,但这玩意app不可能拿到完全一致的东西,二者对不上,就没任何意义
  • IDFA,IDFV,这玩意app是能取到了,但是wap拿不到啊

上面说的几个都是相对来说,如果能双方都拿到,是可以比较精准的进行设备 唯一标识 的,但问题是,我们拿不到。。怎么办?

看看下面几个数据

  • 设备屏幕尺寸(iOS设备如此的统一,一共就那么几个屏幕尺寸,重复的还不一堆一堆的)
  • 设备操作系统(iOS系统碎片化如此的低,大部分几乎都升到较高级的系统版本,重复的依然一堆一堆)
  • 设备IP(IP这玩意会变啊,离开WIFI进入3G,经常变,并且IP这玩意在同一WIFI下也重复的一堆一堆的啊)
  • 访问时间(时间这玩意更没谱了,你们的用户量越大,某一个确定的时间段内,发生第一次安装,重复的就越多)
  • 还有更多类似的数据

发现没有,上面的数据最大的特点就是,有一定的描述设备体征的信息,但是如果只靠这一个描述信息,那结果就是重复的太多太多,根本没法确定一个唯一性。

但是,如果我们把这么些描述信息做成一个合集,同一时间内满足所有的条件,那么这个设备重复的概率一下就缩减了太多太多。

举个例子,到app安装完毕第一次打开的时候,所有访问过wap的设备信息,把他们的信息全都收集起来,找到同样的屏幕尺寸,同样的操作系统版本,同样的IP地址,访问时间相差不超过10min(暂定)的设备,在如此多得限定条件下,我们近乎可以认定为,是具有唯一性的设备,是同一个人

可以看到这里面众多的信息一起去过滤,比较强的过滤条件就是IP,但因为IP存在频繁变化,所以追加了时间条件,IP也可能因为WIFI路由器的原因导致,IP也存在重复和误伤,这时候,又辅助了简单的设备信息进行二次过滤。

这样我们就找到了一个并不完美的 唯一标识 ,有了这个唯一标识,就可以实现我们的跨浏览器和app的互通。

其实友盟的SDK就是这么做的

友盟 SDK文档

友盟通过这个方法,知道了用户是从哪个网页看到的app下载的广告,然后发生的去appstore下载并运行的行为,从而有效的能核算广告的收益

a.通过对应用appstore URL进行封装,获取分渠道点击用户的相关信息,包括:时间、IP、设备类型、操作系统版本;

b.通过在应用中集成代码,获取初次打开应用的用户信息,包括:时间、IP、设备类型、操作系统版本;

c.实时对比不同渠道点击用户和应用激活用户信息,区分不同渠道带来的激活用户;

d.此统计方式不用媒介提供统计数据,实时自动对比,会存在一定误差,但可以基本衡量各渠道间及不同时期的渠道激活转化数据。

他有什么弊端吗?弊端还是挺明显的,因为他是不完美的 唯一标识 ,所以就存在着误伤。

什么是误伤?用户A浏览了WAP界面,用户B恰巧用同一屏幕,同一操作系统版本,同一网段出口IP,在既定时间内,B用户下载并运行了APP,这样我们这套方案,会把B识别成A,等到A真的下载完APP后再来运行,数据可能已经失效了

这种误伤是概率存在的,在现有的限定条件下,随着app的用户体量越来越大,这种误伤将会越来越明显。

来自: http://awhisper.github.io/2016/05/11/iOSBrowserDomainBridge/

正文到此结束
Loading...