SKStoreReviewController.requestReview() 无法在 Live App 中工作

问题描述 投票:0回答:2

这是我请求审核的代码:

        if #available(iOS 10.3, *) {
            SKStoreReviewController.requestReview()
        }
        else{
            print("Review is not available with in the app")
        }

在开发模式下它工作正常并且我能够像这样获得弹出窗口: 但在从应用程序商店下载的 Live 应用程序中,应用程序不会显示此评级弹出窗口,并且如果用户点击评级按钮也不会发生任何情况。

ios swift skstorereviewcontroller
2个回答
11
投票

来自文档

尽管您应该在应用程序的用户体验流程中有意义时调用此方法,但评级/评论请求视图的实际显示受 App Store 政策的约束。由于此方法可能会或可能不会显示警报,不适合调用它来响应按钮点击或其他用户操作

(突出显示我的)

如果您有一个像您在问题中所说的评级按钮,您不应该指望它会显示提示。

仅在以下情况下才会显示提示:

  1. 用户尚未禁用“设置”中的“查看提示”。
  2. 一年内向用户显示该提示的次数不超过 3 次。

如果您必须在用户交互时请求审核,则必须使用如下代码将用户引导至应用程序的 App Store 页面(取自请求 App Store 审核示例代码):

@IBAction func requestReviewManually() {
    // Note: Replace the XXXXXXXXXX below with the App Store ID for your app
    // You can find the App Store ID in your app's product URL
    guard let writeReviewURL = URL(string: "https://itunes.apple.com/app/idXXXXXXXXXX?action=write-review")
    else { fatalError("Expected a valid URL") }
    UIApplication.shared.open(writeReviewURL, options: [:], completionHandler: nil)
}

0
投票

Andy 的回答很好,但只是补充说,还有一些原因可能导致它在调用时不会出现:

  • 未在主线程上调用
  • 在 UIWindowScene 连接之前被调用(didFinishLaunchingWithOptions 太早了)。有一场比赛,有时可能会有效,但并不一致。
  • 如果您使用新的 API
    requestReviewInScene
    :提供错误的 UIWindowScene,或改为 UIScene。
  • Andy提到的两个原因:用户已经看到它太多次(每年限制3次),或者用户已禁止它出现在设置中的任何应用程序中。开发模式在这里仍然有效,但不适用于 App Store 构建。开发人员通常会陷入这个困境!
  • TestFlight:它从未在 TestFlight 中显示

如果您有评分按钮,则需要使用

?action=write-review
,如上面安迪的建议。

如果您通过用户操作触发它但仍然没有看到它,则可能是上述问题之一。

我编写了一份指南,涵盖了这些限制,并包含一个可以解决大多数限制的帮助程序类:https://riticmoments.io/blog/skstorereviewcontroller_guide_with_examples

© www.soinside.com 2019 - 2024. All rights reserved.