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。重復多次試驗就會看到。想想怎么解決吧,就當是課后作業。
?
歡迎加群互相學習,共同進步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,轉載請注明出處!http://www.cnblogs.com/sunshine-anycall/p/4527831.html總結
以上是生活随笔為你收集整理的Swift:在Safari中打开App的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dom解析和生成XML文件
- 下一篇: Nginx安装与配置文件解析