Swift:在Safari中打开App
打开之前会发生什么呢,先看看这个图:
我这里只是简单模拟了一下。当你输入一个特殊的“url”之后,Safari弹出一个提示,问你是否继续打开这个App。如果你这个时候confirm的话。那么这个App就会打开。
我们打开看看这个app是什么样的App。看图:
是一个灰常简答的TableView。然后点击某一行的时候会跳转到一个号称是详细也的地方。其实什么都没有。只有一个地方可以看的,那就是这个页面的title。记住这个title,后面的功能展示就全靠他了。
当你跳转到详细页的时候就是这个样子的:
是的就一个title,然后没别的了。
我们接着上文继续。上文说到在Safari中输入一个特殊的“URL”,confirm了Safari的弹出框以后就会打开这个应用。到这里来说只是初级的功能。因为这样显然还是不够的。我们需要的是用户完成confirm弹出框以后可以打开详细页。一步一步来。
1. 在Xcode6+版本中选择你的项目,之后选择infotab。看图:
从左到右一共三步就到了设置url scheme的地方了。图:
在info页面里的最下面有个URL Types,点开以后在里面设置URL Scheme为deeplink,当然了,这里可以按照你需要的方式设置任意的URL Scheme。
到这里,保存一下然后运行你的App。App运行起来以后按下cmd+shift+H,调到app界面。之后打开Safari,在地址栏中输入deeplink://,然后点Go按钮。接下来就会弹出一个comfirm的弹框。点击open,你的app就会打开。图:
1. 在地址栏中输入你定义的url scheme。
2. 点Go按钮后弹出confirm框
点open按钮后,你的app就会打开。
但是。。我们要得不只是这样而已。url scheme能提供给我们的也不只是这样而已。我们要打开的是详细页。
url 有了scheme,那么就可以有后面的一堆东西。比如:http://baidu.com。有了http://后面就可以有baidu.com。我们也可以这样用。在deeplink://后面加入一串数字,用这串数字可以代表很多。在这里我们就用这串数字来代表一个详细页需要展示的产品的产品编号。这些都很简单,但是怎么实现呢???
其实,很多的App的第三方登录用的就是这个东西。比如微博或者微信的登录或者分享之类的。在选择了登录之后就会跳到微信或者微博里,等登录了以后就可以跳转回去。这些都是用的自定义url scheme。在配置SDK的时候你都会看到这样的要求。使用这样的方法打开的方法是:func application(application: UIApplication, openURL url: NSURL, sourceApplication:String?, annotation: AnyObject?) -> Bool,这个方法是在AppDelegate类中得。默认没有提供实现,需要我们自己添加。
在这个方法执行的时候,添加一段代码:println(url.absoluteString),可以打印出来开启App的url是什么。我们这里当然是,比如,我要包括产品的详细编号的话就是:"deeplink://1234567890"。那么在这里打印出来的就是整个的这个字符串:"deeplink://1234567890"。因为,我们的url scheme是固定不变的。那么我们可以截取产品的具体编号。
var itemCode = (url.absoluteString! as NSString).substringFromIndex(11)
这样就可以获得产品的编号。然后调用window的rootViewController(需要说明的是,我们的rootViewController是UINavigationController)。只需要把产品编号赋值给产品详细页的Controller,让这个Controller使用这个产品编号从服务器后端获取产品的详细信息就可以了。当然在后面的实现中是不包括从后端获取信息的内容的。这些功能也很容易添加。
我们在DetailViewController中添加一个产品编号的属性:var productDetail: String!。之后,将这个属性赋值给Controller的title,在页面中展示出来。
1
2
3
4
5
6
7
|
override func viewDidLoad() {
super .viewDidLoad()
self .view.backgroundColor = UIColor.whiteColor()
<em><strong> self .title = self .productDetail</strong></em>
}
|
了解了具体的展示以后,看看如何在上面说到的方法:func application(application: UIApplication, openURL url:NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool中如何处理页面的跳转,不处理的话只是打开了UINavigationController的rootViewController。
这样的处理其实也很简单。UINavigationController本来已经是rootViewController了,只要push一下初始化好的DetailViewController就完事大吉了。非常简单。代码:
1
2
3
4
5
6
7
8
|
if let window = self .window, let rootController = window.rootViewController {
// self.window?.rootViewController
println( "window is cool" )
var navController = rootController as! UINavigationController
<em><strong>var detailController = DetailViewController()
detailController.productDetail = itemCode
navController.pushViewController(detailController, animated: true )</strong></em>
}
|
这样就处理完毕了。打开safari,输入“deeplink://1234567890”,看看运行效果吧:
so far so good!但是,还有一个bug。重复多次试验就会看到。想想怎么解决吧,就当是课后作业。
Swift:在Safari中打开App相关推荐
- 如何在微信中打开app及Schema VS Universal Link
如何在微信中打开app 方法一:微下载链接 微下载能力不仅能够帮助开发者在微信等场景进行一键下载安装,目前已支持直接拉起应用的指定内容页,帮助开发者缩短内容触达路径,提升产品活跃和用户体验 实际的情况 ...
- safari中判断app是否安装
转载自http://m.blog.csdn.net/blog/wangyx810328/9345817 最近遇到一个需求,需要在safari中判断用户在设备上是否安装了某App,如果安装了则自动启动此 ...
- firefoxos中打开app
由于navigator.mozApps.mgmt.launch方法已不再使用.故用了如下笨方法实现了打开app的方法,要在manifest.webapp中添加permission:"weba ...
- 网页打开android app,android 网页中打开 app指定页面
一.网页打开app简介 1. 用户自定义的URI (Custom URI scheme) 形式如下: scheme://host/path?parameters 2. "intent:&q ...
- 微信中打开app store连接
微信浏览器是不支持打开App Store 页面的.比如你页面写 <a href="http://itunes.apple.com/us/app/ id867985717″>下载取 ...
- 苹果手机微信中打开app下载链接跳转不到app store怎么办
使用微信推广的用户经常都会遇到推广链接被拦截导致无法下载app的情况,通常这种情况微信会给个提示 "已停止访问该网址" ,那么导致这个情况的因素有哪些呢,主要有以下三点: 1.网页 ...
- html文件用safari打开方式,如何使用openURL()读取在safari中打开的html文件 - c#代码 - 源码查...
问题 I am trying to open a page using UIApplication.sharedApplication.openURL(url) I do few clicks and ...
- 如何隐藏 Safari 中 input 标签的 autofill 图标
Safari 浏览器会为 <input type="passport"> 标签自动添加一个小锁的图标(如下图),本意上是让用户可以从这里选择相应的 用户名/密码 进行自 ...
- chrome和safari_私人浏览器-如何在Chrome和Safari中使用隐身模式
chrome和safari Private browsing, or "incognito mode" has become a popular way to surf the w ...
最新文章
- 计划任务执行php文件,linux系统下添加计划任务执行php文件方法
- 【Smobiler企业APP开发之一】开发环境部署
- MPB:南农成艳芬组-​瘤胃厌氧真菌代谢产物的检测方法
- scp 是我小看了你-基于密钥传输!
- android对skia的封装,Skia引擎API整理介绍(skia in Android 2.3 trunk)
- 如何将Webpack与React结合使用:深入的教程
- Could not resolve XML resource [null] with public ID [null], system ID [classes/ajax/dwr_web.xml]
- 百度网盘海外版上传下载不限速;一季度北京平均月薪达11187元;苹果 CEO 增加新候选人|极客头条...
- 如何让路由器摆脱安全困扰
- 28篇论文、6 大主题带你一览 CVPR 2020 研究趋势
- 南京南站新建的,地铁换乘这么麻烦?
- linux引导界面含义,Linux引导时输入特殊信息的含义的方法
- java 8 jre_jre1.8 64位官方下载
- 编译原理课程设计c语言,编译原理课程设计心得体会
- 安装Windows系统时进行磁盘格式化及分区等操作
- 让传感器数据在三维地图上显示,更直观,更震撼!
- java eclipse改名_Java EE更名Jakarta EE,但Oracle还给Eclipse基金会提了很多要求 - IT之家...
- Windows7使用inter7代cpu更新补丁问题
- 回炉重造七---磁盘存储和文件系统
- 三年黑盒测试工程师对嵌入式软件测试的理解