IOS 应用内显示 AppStore 某个应用的详情
前言
应用内跳转到AppStore的文章很多,一般都是用SKStoreProductViewController来实现的,不知道有没有在意一个问题:打开很慢!!怎么忍?!
正文
一般网上的文章的代码:
funcopenAppStore(url:String){ ifletnumber=url.rangeOfString("[0-9]{9}",options:NSStringCompareOptions.RegularExpressionSearch){ letappId=url.substringWithRange(number) letproductView=SKStoreProductViewController() productView.delegate=self productView.loadProductWithParameters([SKStoreProductParameterITunesItemIdentifier:appId],completionBlock:{[weakself](result:Bool,error:NSError?)->Voidin ifresult{ self?.presentViewController(productView,animated:true,completion:nil) }else{ self?.openAppUrl(url) } }) }else{ openAppUrl(url) } } privatefuncopenAppUrl(url:String){ letnativeURL=url.stringByReplacingOccurrencesOfString("https:",withString:"itms-apps:") ifUIApplication.sharedApplication().canOpenURL(NSURL(string:nativeURL)!){ UIApplication.sharedApplication().openURL(NSURL(string:url)!) } } funcproductViewControllerDidFinish(viewController:SKStoreProductViewController){ viewController.dismissViewControllerAnimated(true,completion:nil) }
实现的效果很好,就是很慢,点击按钮调用openAppStore要很久才能显示出界面,就算加一个转圈效果也很差。原因是因为要去 linkmaker.itunes.apple.com根据identifier查找链接,仔细看代码我们会发现presentViewController是在查找到结果才被调用,其实我们可以不用让界面现出来,虽然时间是一样的,但是用户体验会很好,修改后代码如下:
funcopenAppStore(url:String){ ifletnumber=url.rangeOfString("[0-9]{9}",options:NSStringCompareOptions.RegularExpressionSearch){ letappId=url.substringWithRange(number) letproductView=SKStoreProductViewController() productView.delegate=self productView.loadProductWithParameters([SKStoreProductParameterITunesItemIdentifier:appId],completionBlock:{[weakself](result:Bool,error:NSError?)->Voidin if!result{ productView.dismissViewControllerAnimated(true,completion:nil) self?.openAppUrl(url) } }) self.presentViewController(productView,animated:true,completion:nil) }else{ openAppUrl(url) } } privatefuncopenAppUrl(url:String){ letnativeURL=url.stringByReplacingOccurrencesOfString("https:",withString:"itms-apps:") ifUIApplication.sharedApplication().canOpenURL(NSURL(string:nativeURL)!){ UIApplication.sharedApplication().openURL(NSURL(string:url)!) } } funcproductViewControllerDidFinish(viewController:SKStoreProductViewController){ viewController.dismissViewControllerAnimated(true,completion:nil) }
代码说明:
不等loadProductWithParameters返回直接presentViewController,解析失败再尝试用openURL的方式打开。
参考:
http://stackoverflow.com/questions/17871920/odd-behavior-with-skstoreproductviewcontroller
结束: 以上就是对ISO 应用内打开AppStorn显示某个应用详情,有需要的朋友可以参考下。