介绍

iOS16時代のStoreKit使用法 (SwiftUI)

在使用 SwiftUI 创建的应用中,
我想显示一个要求用户评分和评论的视图。
我总结了如何使用它,因为用法会根据 iOS 的版本而有所不同。
(iPadOS、macOS、Mac Catalyst 的情况相同,但我将省略)

API 的变化

  • iOS 13.0-(在 14.0 中已弃用)
SKStoreReviewController.requestReview()
  • iOS 14.0-(未弃用)
// 事前にUIWindowSceneを取得する必要がある。
SKStoreReviewController.requestReview(in: windowScene)
  • iOS 16.0 或更高版本
@Environment(.requestReview) var requestReview
requestReview()

无需获取 UIWindowScene iOS16時代のStoreKit使用法 (SwiftUI)iOS16時代のStoreKit使用法 (SwiftUI)(这很烦人)

代码

我真的很想做这个

import SwiftUI
import StoreKit

struct ContentView: View {

    @available(iOS 16.0, *)
    @Environment(.requestReview) var requestReview

    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .onAppear {
            if #available(iOS 16.0, *) {
                // iOS 16.0 -
                requestReview()
            } else if #available(iOS 14.0, *) {
                // iOS 14.0 - 15.x
                if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
                    SKStoreReviewController.requestReview(in: scene)
                }
            } else {
                // iOS 13.x
                SKStoreReviewController.requestReview()
            }
        }
    }
}

坏消息

不幸的是,存储财产不允许使用 @availableiOS16時代のStoreKit使用法 (SwiftUI)
iOS16時代のStoreKit使用法 (SwiftUI)

现实代码

最低部署是 iOS 16.0 或更高版本

iOS16時代のStoreKit使用法 (SwiftUI)
import SwiftUI
import StoreKit

struct ContentView: View {

    @Environment(.requestReview) var requestReview

    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .onAppear {
            requestReview()
        }
    }
}

最低部署是 iOS 13.0 - 15.x

iOS16時代のStoreKit使用法 (SwiftUI)
import SwiftUI
import StoreKit

struct ContentView: View {

    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .onAppear {
            if #available(iOS 14.0, *) {
                if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
                    SKStoreReviewController.requestReview(in: scene)
                }
            } else {
                SKStoreReviewController.requestReview()
            }
        }
    }
}

结论

在不再支持 iOS 15 之前,我们是否只能安于现状? iOS16時代のStoreKit使用法 (SwiftUI)

请注意

  • 我对何时调用 requestReview 并不认真。
  • 我也没有认真对待如何获取 UIWindowScene。

开发环境

  • Xcode 14.1

参考

评分和评论(人机界面指南)
评分、评论、回复
SKStoreReviewController requestReview()
SKStoreReviewController requestReview(in:)
RequestReviewAction


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308632908.html

相关文章:

  • 2021-06-11
  • 2021-07-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-17
  • 2021-10-18
  • 2021-06-16
  • 2021-12-17
猜你喜欢
  • 2022-12-23
  • 2021-11-13
  • 2021-09-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-03
相关资源
相似解决方案