iOS 应用内评分、应用内打开App Store

iOS6.0添加了新的api,可以在应用内直接打开App Store。上代码:

应用内打开App Store

#import
遵守协议SKStoreProductViewControllerDelegate
/**
 应用内打开App Store 需要APP在App Store中的ID
 */
- (void)openAppStore {
    
    SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];
    storeProductViewController.delegate = self;
    [storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : KAppID} completionBlock:^(BOOL result, NSError * _Nullable error) {
        if (!error) {
            [self presentViewController:storeProductViewController animated:YES completion:nil];
        }
    }];
}

#pragma mark -- SKStoreProductViewControllerDelegate

- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
    
    [viewController dismissViewControllerAnimated:YES completion:nil];
}

应用内评分

iOS10.3之后可以在应用内弹窗提示用户给APP评分,而且开发者可以在开发者管理后台 iTunes Connect 中“我的 App - 活动 - 评分与评论”能看到用户给 App 留下的评论,并可以选择某一条评论进行回复。

  • 很多文章说每年只用3次机会弹窗提示用户,目前我还没有验证是不是这个样子。
  • 开发模式下,调用此方法,可以一直弹出评分视图,但提交是灰色不可点击。
  • 新API虽然方便又好用,但是次数太少,而且弹出了用户可能也会点击“取消”,这也会使次数-1!而且,这个功能是有可能被用户关闭的,在系统设置->iTunes Store与App Store中可以找到“App内评分及评论”的开关,如果用户关闭了这个开关,则上面的窗口也不会弹出。

弹窗提示的时机

  • 提现成功后
  • 活跃用户(登录次数多/天或停留时间长)
  • 当用户处于任务中不要提示
/**
 展示APP评分弹框
 */
- (void)showAppReview {
    
    NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
    NSString *title = [NSString stringWithFormat:@"喜欢%@吗?\n给个五星好评吧,亲!",appName];
    UIAlertController * alertVC = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleAlert];
    //跳转APPStore 中应用的撰写评价页面
    UIAlertAction *review = [UIAlertAction actionWithTitle:@"我要吐槽" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSURL *appReviewUrl = [NSURL URLWithString:KAppStoreGradeUrl];//换成你应用的 APPID
        CGFloat version = [[[UIDevice currentDevice]systemVersion]floatValue];
        if (version >= 10.0) {
            /// 大于等于10.0系统使用此openURL方法
            [[UIApplication sharedApplication] openURL:appReviewUrl options:@{} completionHandler:nil];
        }else{
            [[UIApplication sharedApplication] openURL:appReviewUrl];
        }
    }];
    [alertVC addAction:review];
    
    //不做任何操作
    UIAlertAction *noReview = [UIAlertAction actionWithTitle:@"用用再说" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [alertVC removeFromParentViewController];
    }];
    [alertVC addAction:noReview];
    
    //判断系统,是否添加五星好评的入口
    if (@available(iOS 10.3, *)) {
        if([SKStoreReviewController respondsToSelector:@selector(requestReview)]){
            UIAlertAction *fiveStar = [UIAlertAction actionWithTitle:@"五星好评" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//此处应该在APP内做一个显示次数的记录  后期实现
                [[UIApplication sharedApplication].keyWindow endEditing:YES];//防止键盘遮挡
                [SKStoreReviewController requestReview];//无论您请求评分提示多少次,系统都会在365天内最多显示三次提示
            }];
            [alertVC addAction:fiveStar];
        }
    }
    
    dispatch_async(dispatch_get_main_queue(), ^{
        [self presentViewController:alertVC animated:YES completion:nil];
    });
}

参考
https://www.jianshu.com/p/c31362945983
https://www.jianshu.com/p/9b3c76e60ce3
https://www.jianshu.com/p/cdf74acb45f4?utm_source=desktop&utm_medium=timeline
https://www.jianshu.com/p/4f9fe2e1879e

你可能感兴趣的:(iOS 应用内评分、应用内打开App Store)