IOS 應(yīng)用內(nèi)顯示 AppStore 某個(gè)應(yīng)用的詳情
前言
應(yīng)用內(nèi)跳轉(zhuǎn)到 AppStore 的文章很多,一般都是用 SKStoreProductViewController 來實(shí)現(xiàn)的,不知道有沒有在意一個(gè)問題:打開很慢!!怎么忍?!
正文
一般網(wǎng)上的文章的代碼:
func openAppStore(url: String){ if let number = url.rangeOfString("[0-9]{9}", options: NSStringCompareOptions.RegularExpressionSearch) { let appId = url.substringWithRange(number) let productView = SKStoreProductViewController() productView.delegate = self productView.loadProductWithParameters([SKStoreProductParameterITunesItemIdentifier : appId], completionBlock: { [weak self](result: Bool, error: NSError?) -> Void in if result { self?.presentViewController(productView, animated: true, completion: nil) } else { self?.openAppUrl(url) } }) } else { openAppUrl(url) } } private func openAppUrl(url: String) { let nativeURL = url.stringByReplacingOccurrencesOfString("https:", withString: "itms-apps:") if UIApplication.sharedApplication().canOpenURL(NSURL(string:nativeURL)!) { UIApplication.sharedApplication().openURL(NSURL(string:url)!) } } func productViewControllerDidFinish(viewController: SKStoreProductViewController) { viewController.dismissViewControllerAnimated(true, completion: nil) }
實(shí)現(xiàn)的效果很好,就是很慢,點(diǎn)擊按鈕調(diào)用 openAppStore 要很久才能顯示出界面,就算加一個(gè)轉(zhuǎn)圈效果也很差。原因是因?yàn)橐?nbsp; linkmaker.itunes.apple.com 根據(jù) identifier 查找鏈接,仔細(xì)看代碼我們會(huì)發(fā)現(xiàn) presentViewController 是在查找到結(jié)果才被調(diào)用,其實(shí)我們可以不用讓界面現(xiàn)出來,雖然時(shí)間是一樣的,但是用戶體驗(yàn)會(huì)很好,修改后代碼如下:
func openAppStore(url: String){ if let number = url.rangeOfString("[0-9]{9}", options: NSStringCompareOptions.RegularExpressionSearch) { let appId = url.substringWithRange(number) let productView = SKStoreProductViewController() productView.delegate = self productView.loadProductWithParameters([SKStoreProductParameterITunesItemIdentifier : appId], completionBlock: { [weak self](result: Bool, error: NSError?) -> Void in if !result { productView.dismissViewControllerAnimated(true, completion: nil) self?.openAppUrl(url) } }) self.presentViewController(productView, animated: true, completion: nil) } else { openAppUrl(url) } } private func openAppUrl(url: String) { let nativeURL = url.stringByReplacingOccurrencesOfString("https:", withString: "itms-apps:") if UIApplication.sharedApplication().canOpenURL(NSURL(string:nativeURL)!) { UIApplication.sharedApplication().openURL(NSURL(string:url)!) } } func productViewControllerDidFinish(viewController: SKStoreProductViewController) { viewController.dismissViewControllerAnimated(true, completion: nil) }
代碼說明:
不等 loadProductWithParameters 返回直接 presentViewController ,解析失敗再嘗試用 openURL 的方式打開。
參考:
http://stackoverflow.com/questions/17871920/odd-behavior-with-skstoreproductviewcontroller
結(jié)束: 以上就是對(duì)ISO 應(yīng)用內(nèi)打開AppStorn顯示某個(gè)應(yīng)用詳情,有需要的朋友可以參考下。
相關(guān)文章
iOS畢業(yè)設(shè)計(jì)之天氣預(yù)報(bào)App
這篇文章主要為大家詳細(xì)介紹了iOS畢業(yè)設(shè)計(jì)之天氣預(yù)報(bào)App,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10iOS三級(jí)聯(lián)動(dòng)選擇器的實(shí)現(xiàn)代碼示例
本篇文章主要介紹了iOS三級(jí)聯(lián)動(dòng)選擇器的實(shí)現(xiàn)代碼示例,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下2017-09-09IOS中(assign,retain,copy,weak,strong)的區(qū)別以及nonatomic的含義
這篇文章主要介紹了我們?cè)诼暶鰼property 屬性時(shí),總是要在括號(hào)中寫上assign、retain、copy、weak、strong中的一個(gè),他們的區(qū)別,需要的朋友可以參考下2017-03-03iOS制作framework靜態(tài)庫(kù)圖文教程
這篇文章主要為大家詳細(xì)介紹了iOS制作framework靜態(tài)庫(kù)圖文教程,感興趣的小伙伴們可以參考一下2016-08-08