iOS9-by-Tutorials-学习笔记三:Your-App-on-the-Web
本文版权归作者所有,如需转载请联系孟祥月
CSDN博客:http://blog.csdn.net/mengxiangyue
独立博客:http://mengxiangyue.com这里首先说明一下:这篇文章由于一些限制,我也没有能够进行实验测试,只是尽可能的解释书中的一些知识,可能会有错误,等以后有条件了,我会实验这篇文章中的内容。但是作为了解内容还是不错的。
在iOS 9之前在iPhone上native和web之间,基本上算是独立的的两部分内容。但是Apple正在努力缩小两者之间的距离,使其越来越近。在iOS 9退出了universal links和web markup,使你能够提供deep links直接进入你的app和在Spotlight和Safari中能够搜索出来你的内容。
Getting started
这一章书中提供了两个工程,一个是APP端的,一个是Server端的,因为这个需要Server端修改一些东西。APP可以通过地址:https://itunes.apple.com/us/app/rwdevcon-tutorial-conference/id958625272?mt=8进行下载。APP截图如下:
Linking to your app
在真正开始前,先回顾一下universal link的前辈:deep links。通过这个回顾,了解一下deep links存在的一些问题。
Deep links
在iOS 9之前我们可以给APP设置URL scheme,在Info.plist里面添加CFBundleURLTypes key。一般格式类似://。 另外应该也看到过Apple自己的URL scheme,类似tel://、sms://等。
一旦设置了URL scheme,就能够通过openURL(_:)方法调用起来该APP,调用的时候后面可以带着一些参数。然后在我们自己的程序里面可以再AppDelegate的application(_:handleOpenURL:)中进行对应的处理。这套系统已经存在很久了,但是现在暴露出来一些问题:
* 安全 UIApplication有一个方法canOpenURL(_:),可以用来检测用户是否能够打开某个URL secheme,本来苹果的设计是好的,但是不幸的是现在好多开发商使用这个来检测用户手机安排了什么APP,这样就收集了用户的APP列表,涉及到了用户的隐私。
canOpenURL(_:)这个方法在iOS9中有了限制,如果想使用这个方法必须首先把所有的地址添加到info.plist中,不能按照原来由服务器下发来检测APP安装了。
- 冲突 由于URL scheme是每个APP开发商自己定义的,很有可能两个APP开发商定义相同,这时候如果使用openURL(_:),iPhone将不会知道应该怎么处理。
- No fallback:如果 iOS 试图打开没有注册的 URL scheme,会静默失败,然后用户并不知道发生了什么。
iOS使用universal links来解决这些问题。使用universal links来代替URL scheme。universal links使用标准的HTTP和HTTPS链接。
Universal links
这里举了一个例子:你有一个域名clownapp.com,你可以注册http://clownapp.com作为你的universal link。如果用户安装了你的clownapp。当他在Safari或者web view中点击链接http://clownapp.com/clowns/fizbo的时候,将会直接进入到你的APP的fizbo的profile页面。如果你没有安装这个将会直接跳转到你的网站上的fizbo的profile页面。如果你使用openURL(_:)打开,也会与这个动作一样。
PS: 这里我运行书中的例子,在模拟器的Safari中打不开。可能是我的原因
Universal links与deep links有如下的有点:
* 唯一 由于使用的是域名,能够保证唯一性
* 安全 将你的app与你的域名绑定,上传一个安全签名到你的网站服务器。同样其他的APP也不会轻易的知道手机上是否安装了你的APP。
这里原文如下There’s also no way for other apps to tell whether your app is installed.这里不是没有方式,只是说没有原来那么容易。使用URL scheme白名单的方式还是能够检测。
- 简单 由于跳转到APP和服务器的链接统一了,所以不用考虑在APP和手机上需要使用两套不同的链接了。
注册你的App,使其能够处理universal links
为了使App能够处理对应的链接,首先需要让App知道应该处理什么链接。这里使用的链接是rwdecon.com。按照下图添加对应的链接:
这里可能会出现选择账户,这时候就选择你对应的就好了,如果没有账户可以进入到Account添加。
注册你的服务器能够处理unilateral links
你需要在服务器的根目录下面