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(需要说明的是,我们的rootViewControllerUINavigationController)。只需要把产品编号赋值给产品详细页的Controller,让这个Controller使用这个产品编号从服务器后端获取产品的详细信息就可以了。当然在后面的实现中是不包括从后端获取信息的内容的。这些功能也很容易添加。

我们在DetailViewController中添加一个产品编号的属性:var productDetail: String!。之后,将这个属性赋值给Controller的title,在页面中展示出来。

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.whiteColor()

        self.title = self.productDetail
    }

了解了具体的展示以后,看看如何在上面说到的方法:func application(application: UIApplication, openURL url: NSURL,
sourceApplication: 
String?, annotation: AnyObject?) -> Bool中如何处理页面的跳转,不处理的话只是打开了UINavigationController的rootViewController。

这样的处理其实也很简单。UINavigationController本来已经是rootViewController了,只要push一下初始化好的DetailViewController就完事大吉了。非常简单。代码:

        if let window = self.window, let rootController = window.rootViewController {
//            self.window?.rootViewController
            println("window is cool")
            var navController = rootController as! UINavigationController
            var detailController = DetailViewController()
            detailController.productDetail = itemCode
            navController.pushViewController(detailController, animated: true)
        }

这样就处理完毕了。打开safari,输入“deeplink://1234567890”,看看运行效果吧:

so far so good!但是,还有一个bug。重复多次试验就会看到。想想怎么解决吧,就当是课后作业。

欢迎加群互相学习,共同进步。QQ群:58099570 | 做人要厚道,转载请注明出处!

时间: 2024-11-13 03:38:15

Swift:在Safari中打开App的相关文章

微信中打开app store连接

微信浏览器是不支持打开App Store 页面的.比如你页面写 <a href="http://itunes.apple.com/us/app/id867985717″>下载取号啦</a> ,在微信浏览器点击链接是没有反应的,但是如果是其他的链接地址,比如百度那就没有问题. function viewSource() { var redirectUrl = sourceurl.indexOf('://') < 0 ? 'http://' + sourceurl :

iOS中使用schema协议调用APP和使用iframe打开APP的例子

在iOS中,需要调起一个app可以使用schema协议,这是iOS原生支持的,并且因为iOS系统中都不能使用自己的浏览器内核,所以所有的浏览器都支持,这跟android生态不一样,android是可以自己搞内核的,但是iOS不行. 在iOS中提供了两种在浏览器中打开APP的方法:Smart App Banner和schema协议. Smart App Banner 即通过一个meta 标签,在标签上带上app的信息,和打开后的行为,例如:app-id之类的,代码形如: <meta name=&quo

iOS微信里打开app,Universal Links

这两天在弄分享,从第三方应用或者浏览器打开自己app的东西 传统的方式是通过URL Scheme的方式,但是iOS9以后又出了新的更完美的方式Universal Links. 传统的URL Scheme方式微信内置的浏览器都是封锁了所有它投资的公司之外的,只有白名单的才可以(比如京东,B站,等).Universal Links也不能算是完美的实现,但是已经是目前为止最好的了. 就说一下这个东西的介绍,就像在windows里面为某一类型的文件添加了默认的打开方式.只不过这个文件类型变成了某一个“域

如何隐藏 Safari 中 input 标签的 autofill 图标

Safari 浏览器会为 <input type="passport"> 标签自动添加一个小锁的图标(如下图),本意上是让用户可以从这里选择相应的 用户名/密码 进行自动填充,但是在某些场景下需要将其隐藏,可能是出于安全性考虑,当然也有可能出于 UI 样式方面考虑. 从网上可以搜到很多种有效的解决方法,例如下面的代码就是其中之一,但是很少会告诉你为什么要这样做,以致于下次再遇到这样类似的问题时,还是要借助于 Google.Baidu. input::-webkit-cred

iOS开发中打开本地应用、打开appStore应用、给app评分功能实现

app开发中,通常会有邀请用户给app打分的功能.而在iOS中,正式应用都是通过appStore 下载的,因此给app 打分也只能在 appStore中.因此,需要从应用跳转到appStore.方法是打开响应的url 即可.代码如下: NSString *appid = @"1234567"; NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/cn/app/id%@?mt=8&q

在app中打开appStore中其他app

1 var str = "https://itunes.apple.com/cn/app/zhang-jiange-hao-tou-zi-ke/id402382976?mt=8"//这个链接是app在itunes中的地址 2 if UIApplication.sharedApplication().canOpenURL(NSURL(string: str)!){ 3 UIApplication.sharedApplication().openURL(NSURL(string: str

js判断浏览器在PC中打开还是移动设备中打开

var browser = {                            versions: function () {                                var u = navigator.userAgent, app = navigator.appVersion;                                return {         //移动终端浏览器版本信息                                  

用Swift实现一款天气预报APP(一)

Swift作为现在苹果极力推广的语言,发展的非常快.这个语言就和她的名字一样,比OC减少了很多的文件和代码量.头文件,bye bye啦,再不用查个代码上下的头文件源文件切换了.而且语言本身也增加了很多的安全性的考虑,比如类的初始化个阶段的检查等.不按照规定的写就不能编译通过!本文假定你有一定的编程基础,和一定的Swift基础.如果木有的话,请看这里迅速补起. 本文就用Swif写一个APP,让各位一起来体会一下Swift到底是好在了哪里.为了简单,教程会使用Storyboard,而不是手动的添加C

URL schemes, 通过超链接打开App应用

URL schemes, 通过超链接打开App应用 更多3 url iPhone safari scheme URL schemes 这个我就不解释了,大家可以看这里:http://en.wikipedia.org/wiki/URI_scheme 通俗点说,就是url地址栏:输入 http:…. 打开的是网页:输入 qqdl:…… 如果你安装了腾讯的旋风下载工具,系统会自动启动旋风下载:输入 thunder:…… 对应的就是打开迅雷下载了:最常用的还有 ftp:…… : udp:…… :  ma