# App 评分

> 经常有这样的需求-引导用户在合适的时机对 App 做出好评。本文就尝试谈一谈这一块的一些知识

1. 评分的方式
可以跳出应用对 App 进行评分，也可以在应用内进行评分（>= iOS 10.3）。

2. 跳出 App 评分
利用系统方法打开 URL（跳到 App store 后跳转到自己 App 的评价页面）
```
NSString *urlString = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@?action=write-review", @"你的App ID"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
 ```
 
3. 应用内评分
iOS 10.3 之后系统为我们评分这个需求引入 **StoreKit**。利用它，我们可以很方便地在应用内对 App 进行快速评分，而不用跳出去。
 + 在 App 内部打开 App store并跳转到App 评价页面
 ```
 #import <StoreKit/StoreKit.h>
 SKStoreProductViewController *storeVC = [[SKStoreProductViewController alloc] init];
storeVC.delegate = self;
[storeVC loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier:@"1401834682"} completionBlock:^(BOOL result, NSError * _Nullable error) {
    if (error) {
      
    }else{
        [self presentViewController:storeVC animated:YES completion:nil];
    }
}];
 ```
 + 在 App 内弹出评分对话框，用户星级评分后可以继续输入文字
 ```
 if (@available(iOS 10.3, *)) {
     if([SKStoreReviewController respondsToSelector:@selector(requestReview)]){
         [SKStoreReviewController requestReview];
     else{
          NSString *urlString = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@?action=write-review", @"你的App ID"];
         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
    }
}else {
     // Fallback on earlier versions
     NSString *urlString = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@?action=write-review", @"你的App ID"];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];             
}
 ```
 
4. 注意时机哦
  我们的目的是能得到用户的正反馈，如果在用户刚使用APP时就弹出评分框，可能会给某些用户带来反感，因此，选择一个合适的时机弹出评分很重要，不然适得其反。
  今天在使用爱奇艺的时候发现他们的弹出场景是这样的。我因为要出门所以下载了一部电影。在会员模式下高速缓存成功后（我很满意）弹出评分按钮。
  ![爱奇艺评分](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/61530453779_.pic.jpg)


 
 

    