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

MAUI iOS中访问RequestReviewAction方法(替代过时SKStoreReviewController)

在MAUI C#中实现iOS 18+应用评分请求(替代SKStoreReviewController)

由于iOS 18.0起SKStoreReviewController已过时,苹果推荐使用SwiftUI的RequestReviewAction。在MAUI C#中可通过平台特定代码块或依赖服务实现,以下是具体方案:

方案一:平台特定代码块(快速实现,无需额外架构)

直接在MAUI共享项目中编写条件编译代码,兼容iOS 18及以下版本:

using UIKit;
#if IOS18_0_OR_GREATER
using SwiftUI;
#endif

// 调用此方法触发评分请求
private void TriggerAppReview()
{
#if IOS18_0_OR_GREATER
    // 获取当前活跃窗口与根视图控制器
    var windowScene = UIApplication.SharedApplication.ConnectedScenes
        .OfType<UIWindowScene>()
        .FirstOrDefault();
    var keyWindow = windowScene?.Windows.FirstOrDefault(w => w.IsKeyWindow);
    var rootVC = keyWindow?.RootViewController;

    if (rootVC == null) return;

    // 创建空SwiftUI视图的HostingController,用于获取RequestReviewAction环境变量
    var hostingVC = new UIHostingController<EmptyReviewView>(new EmptyReviewView());
    
    // 临时展示HostingController(用户无感知),调用评分请求后立即关闭
    rootVC.Present(hostingVC, animated: false, () =>
    {
        hostingVC.View.RequestReview();
        hostingVC.DismissViewController(true, null);
    });

    // 定义空SwiftUI视图内部类
    private class EmptyReviewView : View { }
#else
    // iOS 18以下版本使用旧API
    StoreKit.SKStoreReviewController.RequestReview();
#endif
}

方案二:依赖服务(符合MAUI架构规范)

1. 共享项目定义接口

在MAUI共享项目中创建评分服务接口:

public interface IAppReviewService
{
    void RequestReview();
}

2. iOS平台实现服务

在Platforms/iOS目录下创建实现类,并注册依赖服务:

using Foundation;
using SwiftUI;
using UIKit;

[assembly: Dependency(typeof(IOSAppReviewService))]
namespace YourAppNamespace.Platforms.iOS
{
    public class IOSAppReviewService : IAppReviewService
    {
        public void RequestReview()
        {
            var windowScene = UIApplication.SharedApplication.ConnectedScenes
                .OfType<UIWindowScene>()
                .FirstOrDefault();
            var keyWindow = windowScene?.Windows.FirstOrDefault(w => w.IsKeyWindow);
            var rootVC = keyWindow?.RootViewController;

            if (rootVC == null) return;

            var hostingVC = new UIHostingController<EmptyReviewView>(new EmptyReviewView());
            rootVC.Present(hostingVC, animated: false, () =>
            {
                hostingVC.View.RequestReview();
                hostingVC.DismissViewController(true, null);
            });
        }

        private class EmptyReviewView : View { }
    }
}

3. 共享项目调用服务

在需要触发评分的位置调用:

DependencyService.Get<IAppReviewService>()?.RequestReview();

注意事项

  • 若iOS项目未引用SwiftUI,可在Platforms/iOS/YourApp.csproj中添加:<FrameworkReference Include="SwiftUI" />
  • 严格遵循苹果调用规则:每365天最多触发3次评分请求,不可在应用启动等非用户主动操作场景调用
  • 测试时需使用TestFlight或App Store Connect测试版本,模拟器可能无法弹出评分窗口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:23:12