Подтвердить что ты не робот

Как использовать requestReview (SKStore Review Controller), чтобы показать всплывающее окно просмотра в текущем viewController после случайного периода времени

Я читал об этой новой функции, доступной в iOS 10.3, и думал, что она будет более гибкой и из коробки. Но после того, как я прочитал docs, я узнал, что вам нужно определить время, чтобы показать его, и viewController, который его называет. Есть ли способ, с помощью которого я могу заставить его запускать после случайного периода времени в любом представленииКонтроллер показывает в тот момент?

4b9b3361

Ответ 1

В приложении AppDelegate:

Swift:

import StoreKit

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let shortestTime: UInt32 = 50
    let longestTime: UInt32 = 500
    guard let timeInterval = TimeInterval(exactly: arc4random_uniform(longestTime - shortestTime) + shortestTime) else { return true }

    Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector: #selector(AppDelegate.requestReview), userInfo: nil, repeats: false)

}

func requestReview() {
    SKStoreReviewController.requestReview()
}

Objective-C:

#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];
}

В приведенном выше коде попросите Apple предложить пользователю оценить приложение в произвольное время между 50 и 500 секундами после завершения запуска приложения. Помните, что согласно документам Apple, нет гарантии, что приглашение рейтинга будет представлено при вызове requestReview.

Ответ 2

Для целей - C:

Добавить StoreKit.framework

Затем в вашем viewController.h

#import <StoreKit/StoreKit.h>

Затем в вашем вызове функции:

            [SKStoreReviewController requestReview];

Для Swift

Добавить StoreKit.framework

В вашем ViewController.swift

import StoreKit

Затем в вашем вызове функции:

SKStoreReviewController.requestReview()

Что это! Apple позаботится о том, когда будет показывать рейтинг (случайным образом). При разработке он будет вызываться каждый раз, когда вы его вызываете.

Отредактировано: не нужно проверять версию ОС, StoreKit не будет всплывать, если ОС меньше 10.3, спасибо Zakaria.

Ответ 3

Всплывающее в случайное время не является хорошим способом использовать эту процедуру и не только противоречит рекомендациям Apple, но и даст вам менее высокие результаты.

Раздражение пользователя всплывающим в случайное время никогда не будет столь же успешным, как подсказывать их в подходящее время, например, когда они только что завершили уровень или создали документ и имеют такое теплое нечеткое чувство достижения.

Ответ 4

Взяв совет 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 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()

Ответ 5

Я не могу добавлять комментарии, но если вы используете Appirater, вы можете проверить версию, чтобы увидеть, если ее ниже 10.3, поэтому появляется всплывающее окно с сообщением Appirater.