Swift:在Safari中打开App
打開(kāi)之前會(huì)發(fā)生什么呢,先看看這個(gè)圖:
我這里只是簡(jiǎn)單模擬了一下。當(dāng)你輸入一個(gè)特殊的“url”之后,Safari彈出一個(gè)提示,問(wèn)你是否繼續(xù)打開(kāi)這個(gè)App。如果你這個(gè)時(shí)候confirm的話。那么這個(gè)App就會(huì)打開(kāi)。
我們打開(kāi)看看這個(gè)app是什么樣的App。看圖:
是一個(gè)灰常簡(jiǎn)答的TableView。然后點(diǎn)擊某一行的時(shí)候會(huì)跳轉(zhuǎn)到一個(gè)號(hào)稱是詳細(xì)也的地方。其實(shí)什么都沒(méi)有。只有一個(gè)地方可以看的,那就是這個(gè)頁(yè)面的title。記住這個(gè)title,后面的功能展示就全靠他了。
當(dāng)你跳轉(zhuǎn)到詳細(xì)頁(yè)的時(shí)候就是這個(gè)樣子的:
是的就一個(gè)title,然后沒(méi)別的了。
我們接著上文繼續(xù)。上文說(shuō)到在Safari中輸入一個(gè)特殊的“URL”,confirm了Safari的彈出框以后就會(huì)打開(kāi)這個(gè)應(yīng)用。到這里來(lái)說(shuō)只是初級(jí)的功能。因?yàn)檫@樣顯然還是不夠的。我們需要的是用戶完成confirm彈出框以后可以打開(kāi)詳細(xì)頁(yè)。一步一步來(lái)。
1. 在Xcode6+版本中選擇你的項(xiàng)目,之后選擇infotab。看圖:
從左到右一共三步就到了設(shè)置url scheme的地方了。圖:
在info頁(yè)面里的最下面有個(gè)URL Types,點(diǎn)開(kāi)以后在里面設(shè)置URL Scheme為deeplink,當(dāng)然了,這里可以按照你需要的方式設(shè)置任意的URL Scheme。
到這里,保存一下然后運(yùn)行你的App。App運(yùn)行起來(lái)以后按下cmd+shift+H,調(diào)到app界面。之后打開(kāi)Safari,在地址欄中輸入deeplink://,然后點(diǎn)Go按鈕。接下來(lái)就會(huì)彈出一個(gè)comfirm的彈框。點(diǎn)擊open,你的app就會(huì)打開(kāi)。圖:
1. 在地址欄中輸入你定義的url scheme。
2. 點(diǎn)Go按鈕后彈出confirm框
點(diǎn)open按鈕后,你的app就會(huì)打開(kāi)。
但是。。我們要得不只是這樣而已。url scheme能提供給我們的也不只是這樣而已。我們要打開(kāi)的是詳細(xì)頁(yè)。
url 有了scheme,那么就可以有后面的一堆東西。比如:http://baidu.com。有了http://后面就可以有baidu.com。我們也可以這樣用。在deeplink://后面加入一串?dāng)?shù)字,用這串?dāng)?shù)字可以代表很多。在這里我們就用這串?dāng)?shù)字來(lái)代表一個(gè)詳細(xì)頁(yè)需要展示的產(chǎn)品的產(chǎn)品編號(hào)。這些都很簡(jiǎn)單,但是怎么實(shí)現(xiàn)呢???
其實(shí),很多的App的第三方登錄用的就是這個(gè)東西。比如微博或者微信的登錄或者分享之類的。在選擇了登錄之后就會(huì)跳到微信或者微博里,等登錄了以后就可以跳轉(zhuǎn)回去。這些都是用的自定義url scheme。在配置SDK的時(shí)候你都會(huì)看到這樣的要求。使用這樣的方法打開(kāi)的方法是:func?application(application:?UIApplication, openURL url:?NSURL, sourceApplication:String?, annotation:?AnyObject?) ->?Bool,這個(gè)方法是在AppDelegate類中得。默認(rèn)沒(méi)有提供實(shí)現(xiàn),需要我們自己添加。
?
在這個(gè)方法執(zhí)行的時(shí)候,添加一段代碼:println(url.absoluteString),可以打印出來(lái)開(kāi)啟App的url是什么。我們這里當(dāng)然是,比如,我要包括產(chǎn)品的詳細(xì)編號(hào)的話就是:"deeplink://1234567890"。那么在這里打印出來(lái)的就是整個(gè)的這個(gè)字符串:"deeplink://1234567890"。因?yàn)?#xff0c;我們的url scheme是固定不變的。那么我們可以截取產(chǎn)品的具體編號(hào)。
var?itemCode = (url.absoluteString!?as?NSString).substringFromIndex(11)
這樣就可以獲得產(chǎn)品的編號(hào)。然后調(diào)用window的rootViewController(需要說(shuō)明的是,我們的rootViewController是UINavigationController)。只需要把產(chǎn)品編號(hào)賦值給產(chǎn)品詳細(xì)頁(yè)的Controller,讓這個(gè)Controller使用這個(gè)產(chǎn)品編號(hào)從服務(wù)器后端獲取產(chǎn)品的詳細(xì)信息就可以了。當(dāng)然在后面的實(shí)現(xiàn)中是不包括從后端獲取信息的內(nèi)容的。這些功能也很容易添加。
我們?cè)贒etailViewController中添加一個(gè)產(chǎn)品編號(hào)的屬性:var?productDetail:?String!。之后,將這個(gè)屬性賦值給Controller的title,在頁(yè)面中展示出來(lái)。
| 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> } |
了解了具體的展示以后,看看如何在上面說(shuō)到的方法:func?application(application:?UIApplication, openURL url:NSURL, sourceApplication:?String?, annotation:?AnyObject?) ->?Bool中如何處理頁(yè)面的跳轉(zhuǎn),不處理的話只是打開(kāi)了UINavigationController的rootViewController。
這樣的處理其實(shí)也很簡(jiǎn)單。UINavigationController本來(lái)已經(jīng)是rootViewController了,只要push一下初始化好的DetailViewController就完事大吉了。非常簡(jiǎn)單。代碼:
| 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> ????????} |
這樣就處理完畢了。打開(kāi)safari,輸入“deeplink://1234567890”,看看運(yùn)行效果吧:
so far so good!但是,還有一個(gè)bug。重復(fù)多次試驗(yàn)就會(huì)看到。想想怎么解決吧,就當(dāng)是課后作業(yè)。
?
歡迎加群互相學(xué)習(xí),共同進(jìn)步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,轉(zhuǎn)載請(qǐng)注明出處!http://www.cnblogs.com/sunshine-anycall/p/4527831.html總結(jié)
以上是生活随笔為你收集整理的Swift:在Safari中打开App的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: dom解析和生成XML文件
- 下一篇: Nginx安装与配置文件解析