ios - 是否可以确定是否已提交 SKStore Review Controller。

标签 ios objective-c swift app-store skstorereviewcontroller

我的意图是显示 SKStore Review Controller(如果适用)或显示我自己的反馈 Controller 并将用户重定向到 App Store。通过这样做,我可以避免多次询问用户反馈。

在阅读了 Apple 缺少的关于 SKStore Review Controller (https://developer.apple.com/reference/storekit/skstorereviewcontroller) 的文档后,似乎无法确定 SKStore Review Controller 是当前呈现还是之前呈现。

我知道我可以将显示频率存储在 NSUserDefaults 中,但我宁愿避免这样做。

最佳答案

以下是我检测它是否已呈现的方法。

private static func checkIfShownSKStoreReviewController(_ iteration: Int, originalWindowCount: Int) {
    let windows = UIApplication.shared.windows
    if windows.count > originalWindowCount {
        let window = windows[1]

        if window.className == "UITextEffectsWindow" || window.className == "UIRemoteKeyboardWindow" {
            print("Shown SKVC iteration: \(iteration)")

            //Do logic stuff like saving to your database
            return
        }
    }

    if iteration > 2000 {
        print("checkIfShownSKStoreReviewController: timeout, bailing \(iteration)")
        return
    }

    runThisAfterDelay(seconds: 0.02, after: {
        checkIfShownSKStoreReviewController(iteration + 1, originalWindowCount: originalWindowCount)
    })
}

private static func runThisAfterDelay(seconds seconds: Double, after: () -> ()) {
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC)))
    dispatch_after(time, dispatch_get_main_queue(), after)
}

static func showReview() {
    print("Showing AppStore Review")
    if #available(iOS 10.3, *) {
        SKStoreReviewController.requestReview()
        checkIfShownSKStoreReviewController(0, originalWindowCount: UIApplication.shared.windows.count)
    }
}

关于ios - 是否可以确定是否已提交 SKStore Review Controller。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43268014/

相关文章:

ios - UITextField 添加到 UIView 时不响应触摸事件

ios - 当我调用 performFetch 几次时,我的应用程序卡住了

ios - 为什么使用 JSONEncoder 编码字符串会添加反斜杠?

iphone - 从服务器获取数据后如何获取保存数据的文件路径?

iphone - 方向改变时 MapView 的问题

ios - 数据输入自定义 View 的 Swift 示例(自定义应用内键盘)

ios - iOS 8 和 7 上的 View 框架不同

ios - 如何在 iOS 14.4+ 设备上触发系统诊断

objective-c - 从 NSData 中提取子数据而不复制

ios - 无法在 UITableViewController 中设置 TableView 的约束