美文网首页iOS开发(OC)iOS技术交流收藏iOS
在iOS 10.3上使用SKStoreReviewControl

在iOS 10.3上使用SKStoreReviewControl

作者: 悟饭哪 | 来源:发表于2017-03-29 11:13 被阅读1361次

前言

从iOS 10.3开始,用户可以在APP内直接进行评分或评论,不需要再跳转到AppStore了。之前的流程是:用户点击评论按钮打开评论页面(或某个时刻自动弹出)->点击评论->跳转到AppStore->进行评论。苹果这一设计简化了评论流程,用户体验更好了一些。

实现

对于我们开发者来说,我们怎么实现这一功能呢?
苹果在最新的iOS 10.3的SDK中的StoreKit框架中新增了一个类SKStoreReviewController来专门做这件事情,它只有一个类方法requestReview。下面直接上代码。
引入框架 #import <StoreKit/StoreKit.h>
调用requestReview方法

- (void)showReviewAlert {
    [SKStoreReviewController requestReview];
}

运行之后的页面


至此就实现在App内直接评论了。

开发阶段,这个页面上的“提交”按钮是灰色的,不能点击的。在app上线之后,这个按钮就可以点击了,如下图:



选择星级之后,点击“提交”,评价就提交成功了,并弹出下面窗口。你可以选择写评论或点OK关闭窗口。如图:



如果是通过点击按钮弹出的评价页面,在评价成功之后,再次点击这个按钮就没有反应了。

还可以在你的app链接地址后面加上“action=write-review”来直接打开评论页面,代码如下:

NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@?action=write-review", appID];    
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

运行之后的效果如下:

提示:iOS 10.3之后苹果不建议用户通过点击按钮或其它方式来打开评论页面,我们需要做的就是确定在什么时候和什么位置加入弹出评论页的代码,剩下的事情就是iOS系统要做的了,评论页是否弹出是由苹果决定的,每年不超过3次,跟App的版本无关。

这是苹果对类方法requestReview的注释:

/** Request StoreKit to ask the user for an app review. This may or may not show any UI.
 *
 *  Given this may not succussfully present an alert to the user, it is not appropriate for use
 *  from a button or any other user action. For presenting a write review form, a deep link is 
 *  available to the App Store by appending the query params "action=write-review" to a product URL.
 */

兼容

因为SKStoreReviewController这个类是10.3新增加的,这个方法在10.3之前的系统上运行时没有任何反应(亲测),所以我们的App还需要兼容之前的系统,下面是10.3之前跳转到AppStore评论页面的代码:

NSString *str = [NSStringstringWithFormat:@"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%@", appID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

也可以使用以下代码:

NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@?action=write-review", appID];    
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

参考博客

下面是几个国外开发者针对10.3在App内直接评论这一技术发表的博客,大家可以参考一下。

希望对大家有所帮助。

相关文章

网友评论

  • PPPan:NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@?action=write-review", appID];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

    上面的代码是无法跳转到指定评分页面的。因为这是 App Scheme, 而不是 Deep Link。

    下面的代码才能正确跳转。
    let urlString = "https://itunes.apple.com/cn/app/%E5%A1%9E%E5%B0%94%E8%BE%BE%E9%A3%9F%E8%B0%B1/id1367118219?mt=8&action=write-review";
    let url = URL(string: urlString)!
    UIApplication.shared.openURL(url)
    悟饭哪:我刚试了下,我的链接和你的链接地址是都可以直接打开“撰写评论”页面的。你可以再试下。
  • 许仔仔:这里的AppID指的是哪个?
    悟饭哪:@PPPan 可能吧,我是在iOS11.4上试的。等我更新到iOS12了,再试下。
    PPPan:@悟饭哪 还是不行,也许是因为我的是 iOS 12?
    悟饭哪:就是用开发者账号创建一个app后得到的id,在AppStore上是唯一的。通过App在商店上的URL可以查看到。
  • aaa000:好像是 一个用户只能评论一次 然后再次点击就没有用了! 那么问题来了 ,怎么判断用户点击了界面上提交还是取消呢? 因为提交过一次之后 再次点击就不响应了 我希望吧那个按钮隐藏起来!
    悟饭哪:这个我也不清楚,还在研究。
  • 清风自来_a7c1:你好,你用应用内评论的方案有上线的app吗,我程序内就是按照你这上边写的,在debug模式是可以正常在应用内调用评分的,但是当app上线之后,这个功能就点击没有任何反映了,也不弹出窗口,你知道是怎么回事吗
    悟饭哪:是不是你已经通过点击出来的窗口成功评论一次了?
  • 子达如何:然并卵
    悟饭哪:亲测可用。

本文标题:在iOS 10.3上使用SKStoreReviewControl

本文链接:https://www.haomeiwen.com/subject/jtreottx.html