IOS 应用内显示 AppStore 某个应用的详情

前言

  应用内跳转到 AppStore 的文章很多,一般都是用 SKStoreProductViewController 来实现的,不知道有没有在意一个问题:打开很慢!!怎么忍?!

 正文

  一般网上的文章的代码:

 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)
 }

实现的效果很好,就是很慢,点击按钮调用 openAppStore 要很久才能显示出界面,就算加一个转圈效果也很差。原因是因为要去  linkmaker.itunes.apple.com 根据 identifier 查找链接,仔细看代码我们会发现 presentViewController 是在查找到结果才被调用,其实我们可以不用让界面现出来,虽然时间是一样的,但是用户体验会很好,修改后代码如下:

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

结束:        以上就是对ISO 应用内打开AppStorn显示某个应用详情,有需要的朋友可以参考下。

(0)

相关推荐

  • iOS实现APP程序内部打开APP的AppStore页面

    前言 最近在做内购用到了StoreKit.framework库,偶然间发现中SKStoreProductViewController这个类,查看文档后发现一个妙用,解决了我一个痛点:APP每次更新或者跳转至某个APP的App Store页面时,都要跳转至App Store,然后再跳转回应用,用户体验很不好,以前都是直接给产品说不能解决,现在呵呵呵

  • IOS 应用内显示 AppStore 某个应用的详情

    前言 应用内跳转到 AppStore 的文章很多,一般都是用 SKStoreProductViewController 来实现的,不知道有没有在意一个问题:打开很慢!!怎么忍?!  正文 一般网上的文章的代码: func openAppStore(url: String){ if let number = url.rangeOfString("[0-9]{9}", options: NSStringCompareOptions.RegularExpressionSearch) { le

  • iOS中在APP内加入AppStore评分功能的实现方法

    iOS应用内部实现App Store评分功能,笔着整理总结有三种方式,各位可根据自己需求自己选择.先介绍下评分功能实现的三种方式. 1,通用方式通过App内部打开网页形式,跳转到AppStore编辑评论,可评分,可评论. 优点:方便,快捷,不受系统版本限制,目前最常用的方式. 缺点:内部网页形式加载缓慢,等待时间长,加载失败概率大. 2,iOS 6.0以后 在app内部加载AppStore 展示app信息 优点:展示速度比方法三块快 缺点:不能直接跳转到评论编辑页面,需要手动点击评论+编辑评论

  • IOS应用内跳转系统设置相关界面的方法

    在iOS开发中,有时会有跳转系统设置界面的需求,例如提示用户打开蓝牙或者WIFI,提醒用户打开推送或者位置权限等.在iOS6之后,第三方应用需要跳转系统设置界面,需要在URL type中添加一个prefs值,如下图: 跳转系统设置根目录中的项目使用如下的方法: _array = @[ @{@"系统设置":@"prefs:root=INTERNET_TETHERING"}, @{@"WIFI设置":@"prefs:root=WIFI&qu

  • 移动端页面在ios中不显示图片的解决方法

    在移动端开发中,有的时候可能遇到这样的问题,我从别人网站上下载下来的图片,然后做出H5页面,但是在浏览器中和android中都显示正常,可是一到ios中图片就不显示了,这个时候就需要注意了,可能是图片的格式问题导致ios中不认识,比如我从网上下载的图片保存到电脑中不能预览的图片就是这种. 在计算机中打开预览图片显示如下: 这样的图片在ios中就不显示,解决办法很简单,就是在下载的时候去掉后面的类型就可以了, 以上这篇移动端页面在ios中不显示图片的解决方法就是小编分享给大家的全部内容了,希望能给

  • iOS状态栏的显示与隐藏的示例代码

    今天设计师跑来问iOS状态栏的问题,由于之前没有整理,只能"我确认下给你回复",确认得有点久,略尴尬...好记性不如烂笔头,希望能养成整理做笔记的好习惯.那么,闲话少说, 让我们进入正题. 我们使用xcode新建一个 iOS工程 ,默认情况下状态栏是显示的. 隐藏某个控制器的状态栏 最简单地隐藏方法就是使用下面这段代码: - (BOOL)prefersStatusBarHidden { returnYES; } 全局隐藏状态栏 上面代码确实隐藏了对应控制器的状态栏,但是多数情况下我们的

  • iOS应用内实现跳转到手机淘宝天猫的方法

    前言 平常我们做iOS开发,会经常遇到打开其他的APP的功能.本文主要介绍了关于iOS实现应用内跳转到手机淘宝天猫的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. info.plist 中需要添加(实测没填写的话不会去判断是否安装了此APP) 代码如下: 需要跳转的按钮点击事件: func copyStrKey(_ sender: UIButton) { let pboard = UIPasteboard.general pboard.string = self.pr

  • iOS实现时间显示几分钟前,几小时前以及刚刚的方法示例

    前言 本文实现的效果类似于QQ空间里的好友发表的动态,会显示好友发表的时间,这里是处理显示几小时前,几分钟前,刚刚,昨天,前天这样的格式,下面来一起看看吧. 一:刚刚,几分钟前,几小时前 //时间 NSString *createdTimeStr = @"2017-01-01 21:05:10"; //把字符串转为NSdate NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter

  • js下在password表单内显示提示信息的解决办法

    经典有人要这个代码,考虑到password中输入的内容会显示为*号,所以要想办法解决*的问题.当初想用setAttribute动态修改type属性达到效果,再ff下测试成功,但没想到setAttribute对type属性的修改在ie中无效.最终采用背景图片的方式解决了这个.即为password设定一个背景图片,图片文字为提示信息 如:<img src="http://files.jb51.net/upload/20070819124037566.gif" />, 当鼠标放上

  • IOS应用内支付返回新旧Receipt适配的方法

    ios7.0后ios支付成功返回的票据Receipt的获取方式有了新的方式, 原来的SKPaymentTransaction中的transactionReceipt属性获取票据的方式已经过期,虽然还能使用,但是苹果官方建议使用新的 新版的获取Receipt的方式是通过新接口如下 NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; NSData *receipt = [NSData dataWithContentsOfUR

  • 浏览器执行history.go(-1) FCKeditor编辑框内显示html源代码的解决方法

    解决方法:FCK.LinkedField.value=FCKTools.HTMLEncode(FCK.LinkedField.value);改为 FCK.LinkedField.value=FCKTools.HTMLDecode(FCK.LinkedField.value); 如果问题不能解决,请注意是否清空浏览器缓存.

随机推荐