控制 SKStoreReviewController 显示频率

Posted

技术标签:

【中文标题】控制 SKStoreReviewController 显示频率【英文标题】:Controlling SKStoreReviewController Display Frequency 【发布时间】:2017-03-28 11:28:46 【问题描述】:

我已将以下内容添加到我的 AppDelegate 并导入了 StoreKit。审查模式按预期在启动时弹出。我的问题是,我是这个被调用频率的负责人还是苹果? docs 仍然很轻,但我读到 elsewhere,Apple 将每个用户每年限制为 3 次,我可以相信他们在显示之间添加适当的时间(理想情况下是几个个月)?

在开发过程中,每次我启动应用程序时都会弹出它,我不希望我的用户不得不在多次启动中关闭它 3 次,然后在 12 个月内不再被询问。

现在 10.3 已经发布,我很想知道其他人是如何解决这个问题的。

干杯。

    if #available(ios 10.3, *) 
        print("Show Review Controller")
        SKStoreReviewController.requestReview()
     else 
        print("Cannot Show Review Controller")
        // Fallback on earlier versions
    

【问题讨论】:

我刚刚了解到,Apple 没有在一年中平均分配 3 次。我的实现是,在应用程序中某个操作的第三次之后,每次都调用 requestReview()。多哈。原来在这三个动作之后每次都会弹出审查请求。三次。然后没有更多,一年,据说。正如此处的答案所述,将上次请求尝试日期存储在用户默认值等中应该是处理此问题的明智方法。 【参考方案1】:

我添加了一个存储在UserDefaults 中的计数。每次发生特定操作时它都会增加,当count % 10 == 0 我调用SKStoreReviewController.requestReview() 时(普通用户可能会在每次使用应用程序时增加一次计数)

这可能会或可能不会显示审核请求,但它确保它不会显示得太频繁。

或者,考虑存储lastReivewAttemptDate 和请求之间的最小间隔。

【讨论】:

我最终做了类似的事情,我有一个值存储在用户默认值中,初始值为 5。每当用户成功添加特定对象时,我从该用户默认值中删除 1,一旦它达到零我调用 SKStoreReviewController.requestReview() 并将值重置为 5。 @FaizFareed 请将此作为另一个问题提出。 @AshleyMills ,感谢您的指导,但我想我会自己做。所以不需要产生另一个问题。 &对不起我的上述评论。所以要删除它。【参考方案2】:

您不负责计算这一点 - 但这样做可以让您在可能用完电话时更具战略性。

在 NSUserDefaults 中为每个调用保存时间戳似乎是最灵活的跟踪方式。这就是我在 obj-c 中所做的:

// Rate app action for iOS 10.3+
-(void)displayDialog 
    [SKStoreReviewController requestReview];
    [self storeTimestamp:PromptTimestampsKey];


- (void)storeTimestamp:(NSString *)key 
    NSNumber *todayTimestamp = [NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]];

    NSMutableArray *timestamps = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults]  arrayForKey:key]];

    // Remove timestamps more than a year old
    for (NSNumber *timestamp in timestamps) 
        if ((todayTimestamp.doubleValue - timestamp.doubleValue) > SecondsInYear) 
            [timestamps removeObject:timestamp];
        
    

    // Store timestamp for this call
    [timestamps addObject:todayTimestamp];
    [[NSUserDefaults standardUserDefaults] setObject:timestamps forKey:key];

【讨论】:

以上是关于控制 SKStoreReviewController 显示频率的主要内容,如果未能解决你的问题,请参考以下文章

HMI-45-控制台控制台代码迁移

自动控制 PID

HMI-45-控制台控制台代码迁移

控制器的主要功能是啥?

多控制器和导航控制器简单介绍

jmeter逻辑控制器-仅一次控制器交替控制器