SKStoreReviewController如何检测用户已关闭评价此应用程序(RTA)在设置或3倍限制已达到?

Van*_*ran 16 ios skstorereviewcontroller ios10.3

从iOS 10.3开始,Apple将评论提示(评级此应用程序)限制为每年3次,并且可以在用户设置中关闭它.

问:我们如何检测到3次限制已经达到或者用户是否关闭了RTA所以在应用程序中我不会显示弹出窗口:"你喜欢这个应用程序吗?如果是的话,你能写一篇评论吗? [是/否]"因为那时,如果用户点击是,则不会显示任何内容.

官方文档中的信息确实不多:https://developer.apple.com/reference/storekit/skstorereviewcontroller

虽然在应用程序的用户体验流程中有意义时应调用此方法,但评级/审阅请求视图的实际显示由App Store策略控制.由于此方法可能会或可能不会显示警报,因此响应按钮点击或其他用户操作来调用它是不合适的.

Nik*_*jic 10

前言

询问用户是否喜欢该应用可能会导致您的应用遭到拒绝.这是一个例子:https: //twitter.com/pietbrauer/status/791883047373246464

如果链接在这里死亡,则摘录苹果响应:

3.2.2 ...您的应用程序包含可以操纵App Store上的用户评论或图表排名的内容和功能.具体来说,您的应用会过滤用户评论,并且仅指导打算为您的应用评分4-5颗星的用户在App Store上完成评分...

我个人认为,如果你真的试图解决用户问题,这仍然是一个有效的策略,并且仍然给他们一个机会在之后进行审核,但问题仍然是苹果会如何看待它.

可能解决方案

  1. 显示弹出窗口,询问用户是否喜欢/喜欢/等使用该应用程序.
  2. 尝试使用[SKStoreReviewController requestReview]来获得评论.
  3. 检查窗口数是否已更改,表示已显示弹出窗口.需要注意的是,这不是100%可靠,因为其他一些事件可能导致窗口数量发生变化.
  4. 如果窗口数保持不变,请使用深层链接将用户转发到应用商店.SKStoreReviewController建议使用action=write-review作为查询参数的文档直接转到评论页面.

这是一个简单的实现:

// make sure we the current iOS version supports in app reviews
if ([SKStoreReviewController class])
{
    NSUInteger windowCount = [UIApplication sharedApplication].windows.count;
    [SKStoreReviewController requestReview];

    // give the review controller some time to display the popup
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        if (windowCount < [UIApplication sharedApplication].windows.count)
        {
            // assume review popup showed instead of some other system alert
            // for example show "thank you"
        }
        else
        {
            // open app store to leave review
            NSURL *reviewUrl = [NSURL URLWithString:@"{your-app-url}?action=write-review"];
            [[UIApplication sharedApplication] openURL:reviewUrl];
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

注意:我还没有将此代码提交到App Store,所以这只是理论上的.

  • 因此,如果我正确理解您的代码,您将尝试显示新的Apple Review弹出窗口,但如果它失败(因为它已经显示3次,或者用户已将其关闭),那么您仍然会向他们显示评论页面用旧方法?嗯,我不确定苹果会接受这个,这是他们试图阻止的. (2认同)

Mic*_*chi 6

好吧,您可以尝试触发请求并查看但只要没有回调以及其他官方方式如何检测在您调用请求方法时是否已显示评级警报.

然而,一种方法 - 其中一个StoreKit类可以调整,以便您可以在打开"评级"对话框时观察.

UIWindow- 检查周围提到的方式也可能有用,但调用方法调用可能更可靠.

您还可以使用一些评级管理器,例如AppRating可用作托管,可以为您管理这些内容,但只能通过计算呼叫并记住它来实现.