You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C项目中如何用RequestReviewAction替代废弃的SKStoreReviewController?

在Objective-C中集成RequestReviewAction替代废弃的SKStoreReviewController

前提说明

SKStoreReviewController的requestReview方法在iOS 16.0及以上已被废弃,替代方案是使用UIWindowScene的requestReviewActionWithCompletionHandler:方法。这个API仅支持iOS 16.0+,所以必须做好版本兼容处理。

集成步骤与代码示例

  1. 导入必要框架
    在需要调用评分功能的文件中,导入UIKit和StoreKit框架:

    #import <UIKit/UIKit.h>
    #import <StoreKit/StoreKit.h>
    
  2. 版本判断与调用评分请求
    在触发评分的逻辑点(比如用户完成某个操作后),加入以下代码:

    // 检查系统版本是否支持新API
    if (@available(iOS 16.0, *)) {
        // 获取当前活跃的UIWindowScene(支持多场景App的适配逻辑)
        UIWindowScene *activeScene = nil;
        for (UIScene *scene in [UIApplication sharedApplication].connectedScenes) {
            if (scene.activationState == UISceneActivationStateForegroundActive && 
                [scene isKindOfClass:[UIWindowScene class]]) {
                activeScene = (UIWindowScene *)scene;
                break;
            }
        }
        
        if (activeScene) {
            // 发起评分请求,并处理回调
            [activeScene requestReviewActionWithCompletionHandler:^(NSError * _Nullable error) {
                if (error) {
                    // 请求失败时的处理:比如引导用户手动前往App Store评分
                    NSLog(@"评分请求失败: %@", error.localizedDescription);
                } else {
                    // 请求已成功发起,弹窗是否显示由系统决定
                    NSLog(@"评分请求已提交");
                }
            }];
        }
    } else {
        // 兼容iOS 16以下版本,使用旧API
        [SKStoreReviewController requestReview];
    }
    

关键注意事项

  • 系统频率限制:不管新旧API,系统都会限制评分弹窗的展示频率,短时间内重复调用不会触发弹窗,不要在用户每次操作时都调用。
  • 回调的意义:completionHandler仅告知你请求是否成功发起,无法得知用户是否完成评分或给出了什么评分。
  • 场景获取逻辑:如果你的App支持多场景(比如iPad分屏),需要确保获取的是当前用户活跃的场景,否则可能无法触发弹窗。
  • 测试注意:在开发环境/模拟器中,评分弹窗会每次响应调用;但在正式App Store环境中,系统会根据用户的使用频率等条件决定是否展示弹窗。

内容的提问来源于stack exchange,提问作者Alexandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:22:10