应用场景
a、app推广时,通过推广人的推广来记录推广数量下载量等信息。
b、例如在电商类中,在h5中已经加入购物车,在app端结算等功能。
分析:
场景a:
用户通过扫描推荐的二维码打开一个h5页面,然后通过点击调到App Store 下载链接。跳到App Store后开发者没有办法来获得推广人员的信息等。
因为在微信浏览器中,是屏蔽了深度链接所以在通常的对于唤醒app的或者引导用户下载的引导页,都是会检测是不是Safari浏览器,如果不是就引导用户用Safari打开链接。
场景b、
现在通常的做法是:在微信等浏览器中一般的选择是加入购物车之后是发送到了服务器端,这样在你在app端的时候,是从服务器端获取的数据。
在早期刚出现Cookie的时候,有很多是将信息存到了cookie中,然后客户端再取。
什么是Cookie?
一个cookie就是存储在用户主机浏览器中的一小段文本文件。Cookies是纯文本形式,它们不包含任何可执行代码。
cookie只是包含了数据,就其本身而言并不有害。
Cookie相当于数据持久化~(我是这么理解的不知道对不对)可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。
Cookie属性:
般cookie所具有的属性,包括:
Domain:域,表示当前cookie所属于哪个域或子域下面。
此处需要额外注意的是,在C#中,如果一个cookie不设置对应的Domain,那么在CookieContainer.Add(cookies)的时候,会死掉。对于服务器返回的Set-Cookie中,如果没有指定Domain的值,那么其Domain的值是默认为当前所提交的http的请求所对应的主域名的。比如访问 http://www.example.com,返回一个cookie,没有指名domain值,那么其为值为默认的www.example.com。
Path:表示cookie的所属路径。
Expire time/Max-age:表示了cookie的有效期。expire的值,是一个时间,过了这个时间,该cookie就失效了。或者是用max-age指定当前cookie是在多长时间之后而失效。如果服务器返回的一个cookie,没有指定其expire time,那么表明此cookie有效期只是当前的session,即是session cookie,当前session会话结束后,就过期了。对应的,当关闭(浏览器中)该页面的时候,此cookie就应该被浏览器所删除了。
secure:表示该cookie只能用https传输。一般用于包含认证信息的cookie,要求传输此cookie的时候,必须用https传输。
httponly:表示此cookie必须用于http或https传输。这意味着,浏览器脚本,比如javascript中,是不允许访问操作此cookie的。
思路设计:
每个应用都是独立的,不能共享的,并且Safari和app的cookie也是独立的。有没有什么办法可以在app内用外部的Safari来打开H5,并且和外部的Safari共享缓存。
实现原理:
上面是细节流程图,实现上首先在野生打开引导页时写入一段饼干,然后在应用程序下载完成后,打开应用程序时通过SFSafariViewController加载引导页,然后通过window.location.href唤起已经打开的应用程序(注意:如果在已经打开的应用程序再通过这种方式唤起,用户将无感知,而开发者能感知到),这样就能在AppDelegate的中拿到传进来的网址了。
上代码:
主要是没有做过前端对于js还是了解的不是很多,这两天在这里躺坑了。本代码只是一个测试代码,通过下载按钮演示,大家可以后续自己更改。
完整的GitHub地址JS代码地址
app代码:
通过openURL 方法来获取传过来的信息:
加载Safari
查看的资料有的是有webView也可以实现,有时间的童鞋们可以看看。