如何使用requestReview(SKStore Review Controller)在一段随机时间后在当前viewController中显示查看弹出窗口

时间:2017-03-28 16:55:08

标签: ios objective-c storekit

我已经了解了iOS 10.3中提供的这一新功能,并认为它更灵活,开箱即用。但在我阅读docs后,我发现你需要决定显示它的时间和调用它的viewController。有没有什么方法可以让我在任何一个viewController在那一刻显示的随机时间段之后触发它?

6 个答案:

答案 0 :(得分:25)

在AppDelegate中:

夫特:

#import <StoreKit/StoreKit.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    int shortestTime = 50;
    int longestTime = 500;
    int timeInterval = arc4random_uniform(longestTime - shortestTime) + shortestTime;

    [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(requestReview) userInfo:nil repeats:NO];
}

- (void)requestReview {
    [SKStoreReviewController requestReview];
}

目标-C:

   Tableau.getTable(2)
      .then((data) => {
       $scope.elements = data
    })

上面的代码将要求Apple提示用户在应用程序完成启动后的50到500秒之间的随机时间对应用程序进行评级。 请记住,根据Apple的文档,无法保证在调用requestReview时会显示评级提示。

答案 1 :(得分:13)

目标 - C:

添加 StoreKit.framework

然后在你的viewController.h中

#import <StoreKit/StoreKit.h>

然后在你的函数调用中:

            [SKStoreReviewController requestReview];

对于Swift

添加 StoreKit.framework

在ViewController.swift中

import StoreKit

然后在你的函数调用中:

SKStoreReviewController.requestReview()

那就是它! Apple会在何时显示评级(随机)。 在开发过程中,每次调用它时都会调用它。

编辑:无需检查操作系统版本,如果操作系统小于10.3,StoreKit不会弹出,感谢Zakaria。

答案 2 :(得分:9)

在随机时间弹出并不是使用该例程的好方法,并且不仅违反了Apple的建议,而且会给你带来不那么好的结果。

在随机时间弹出一个用户的烦恼永远不会像在适当的时候提示他们那样成功 - 例如当他们刚刚完成一个关卡或创建一个文档时,并且具有那种温暖模糊的成就感。

答案 3 :(得分:6)

根据Peter Johnson的建议,我创建了一个简单的类,您可以将该方法放在代码中的所需位置,它会弹出一个用户刚刚成功的位置。

struct DefaultKeys {
  static let uses = "uses"
}


class ReviewUtility {

  //  Default Keys stored in Structs.swift

  static let sharedInstance = ReviewUtility()

  private init() {}

  func recordLaunch() {
    let defaults = UserDefaults.standard

    // if there's no value set when the app launches, create one
    guard defaults.value(forKey: DefaultKeys.uses) != nil else { defaults.set(1, forKey: DefaultKeys.uses); return }
    // read the value
    var totalLaunches: Int = defaults.value(forKey: DefaultKeys.uses) as! Int
    // increment it
    totalLaunches += 1
    // write the new value
    UserDefaults.standard.set(totalLaunches, forKey: DefaultKeys.uses)

    // pick whatever interval you want
    if totalLaunches % 20 == 0 {
      // not sure if necessary, but being neurotic
      if #available(iOS 10.3, *) {
        // do storekit review here
        SKStoreReviewController.requestReview()
      }
    }
  }
}

要使用它,请将其粘贴到您想要调用的位置,并希望您不会随机勾选用户。

ReviewUtility.sharedInstance.recordLaunch()

答案 4 :(得分:5)

随机显示对话框可能不是一个好主意。请参阅提及的Apple guideline不要打断用户,尤其是当他们执行时间敏感或压力很大的任务时。

这就是Apple的建议:

仅在用户证明与您的应用互动后才要求评分。例如,在完成游戏级别生产力任务时提示用户。永远不要在首次发布或入职时要求评级。留出足够的时间来形成意见。

不要成为害虫。重复的评级提示可能会令人恼火,甚至可能会对用户对您的应用的看法产生负面影响。在评分请求之间允许至少一周或两周,并且只有在用户与您的应用进行了额外互动后才会再次提示。

post也非常有趣......

答案 5 :(得分:1)

我无法添加评论,但如果您使用的是Appirater,则可能需要检查版本以查看其是否低于10.3,以便弹出其他Appirater评论消息框。