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.absoluteStringas 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 | 做人要厚道,转载请注明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 `UIApplication.shared.open(_:options:completionHandler:)` 方法来打开链接。 示例代码: ``` if let url = URL(string: "https://www.google.com") { UIApplication.shared.open(url, options: [:]) { success in if success { print("The URL was delivered successfully.") } else { print("The URL failed to open.") } } } ``` 这将会在系统的默认浏览器打开链接。 ### 回答2: 要在Swift打开链接,你可以使用`UIApplication`类的实例来完成。`UIApplication`是一个表示应用程序对象的类,它提供了一系列方法来处理应用程序级别的任务,如打开URL。 首先,你需要导入UIKit框架,以便可以访问`UIApplication`类。在你的代码加入以下导入语句: ```swift import UIKit ``` 然后,在适当的地方创建一个`UIApplication`类的实例。通常,在您的应用程序委托(AppDelegate)类创建这个实例,以便在整个应用程序都能够访问。创建实例的代码类似如下: ```swift let app = UIApplication.shared ``` 现在,你可以使用创建的`app`实例来打开链接。首先,创建一个`URL`对象,它代表你要打开的链接。例如,要打开一个网页链接,代码如下: ```swift if let url = URL(string: "https://www.example.com") { app.open(url) } ``` 在这个例子,我们将一个URL字符串转换成URL对象,并使用`open`方法来打开链接。`open`方法将尝试打开指定的链接,如果成功则会在用户的默认浏览器或其他适当的应用程序打开链接。如果链接无效,则什么都不会发生。 这就是在Swift打开链接的基本过程。你可以根据需要,使用不同的URL和调用适当的`open`方法重复这个过程。请注意,某些链接可能需要在应用程序打开,而不是外部应用程序。这涉及到深层链接和自定义URL方案的使用,需要更详细的讨论和实现。 ### 回答3: 在Swift,我们可以使用`UIApplication`的`open`方法来打开链接。下面是一个简单示例: ```swift import UIKit // 创建一个URL对象 if let url = URL(string: "https://www.example.com") { // 检查是否可以通过UIApplication打开链接 if UIApplication.shared.canOpenURL(url) { // 使用UIApplication打开链接 UIApplication.shared.open(url) } } ``` 首先,我们使用`URL`类创建了一个表示链接的URL对象。然后,我们使用`UIApplication.shared.canOpenURL`方法来检查设备上是否有任何应用程序可以打开这个链接。如果可以,我们调用`UIApplication.shared.open`方法来打开链接。这将以默认的方式在设备上打开链接,例如,在浏览器打开网页。 请注意,为了使用`open`和`canOpenURL`方法,你需要导入`UIKit`框架。 此外,如果你想以特定的方式打开链接,你还可以通过传递额外的参数给`open`方法来实现。例如,你可以指定链接应该在Safari打开而不是在应用程序内部的Web视图打开: ```swift if let url = URL(string: "https://www.example.com") { if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } } ``` 在这个示例,我们将空字典作为`options`参数传递给`open`方法,以使用默认选项打开链接。你也可以通过传递不同的选项字典来指定不同的行为。另外,你还可以通过传递一个`completionHandler`参数来在链接完成加载后执行自定义操作。 总之,我们可以使用`UIApplication`的`open`方法来打开链接并在设备上的应用程序浏览它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值