在SKStoreReviewController出来以前我们都是通过跳转App Store实现评价app功能。实现方式如调用方式三。那是否意味着在10.3之后我们就一定要用SKStoreReviewController来取代之前实现吗?为了解答这个问题,我们先分析各自利弊。
SKStoreReviewController的优势:
1,用户体验好(人性化)
.2,调用简单(如调用方式一)
.3,支持deep link(比较赞)。
SKStoreReviewController的劣势:
1,调用方式一苹果有限制。
/** 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. */
+ (void)requestReview;
有些细节大家需要注意在测试的时候发现“提交”按钮不能用。这里有
官方文档说明:
“当你的应用程序仍处于开发模式时调用此方法时,会始终显示评级/评论请求视图,以便您可以测试用户界面和体验。但是,当您在使用TestFlight分发的应用程序中调用此方法时,此方法无效。“
就是说测试的时候需要用TestFlight测试。
2,调用方式一下载苹果限制开发者在一年最多只能向用户调用三次评分UI。但是苹果文档没找到链接。
参考
3,调用方式一虽然简单,但需要有网络,如果没有网络调用不起作用(不会弹出UI)。
4,调用方式一,虽然可以给应用打分,但是不能给应用程序写评价语。
程序内评价UI的一些特性
1,程序内评价UI呈现出来的UI显示的优先级比较高。
评论UI会遮挡住他下面的用户界面的交互
评论UI唤起的时候,有一个蒙层盖在它下面的视图上。如上上中红色的按钮就不能点。只能点击“Not Now”或者“星星”来消失这个UI。
2,程序内评价UI是一个窗体级的用户界面中,有点类似UIAlertView中。
为了验证,请看下面测试代码。当弹出评论UI的时候,我再模态出一个控制器(背景灰色)
-(void)test{
NSLog(@"touch");
if (self.presentingViewController) {
[self dismissViewControllerAnimated:YES completion:NULL];
}else{
[SKStoreReviewController requestReview];
[self performSelector:@selector(present) withObject:nil afterDelay:10];
}
}
- (void)present{
ViewController *vc =[[ViewController alloc] init];
vc.view.backgroundColor = [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:0.5];
[self presentViewController:vc animated:NO completion:NULL];
}
具体效果(评论UI显示后,后面模态出来一个灰色的视图(控制器))如下:
根据效果可以推测,评论UI不是简单模态出来,如果是模态,我们后面模态出来的视图应该能够盖住评论UI。评论UI是一个窗体级的UI(和UIAlertView有点相似,但是UIAlertView是盖在评论UI上面的)。