Я читал об этой новой функции, доступной в iOS 10.3, и думал, что она будет более гибкой и из коробки. Но после того, как я прочитал docs, я узнал, что вам нужно определить время, чтобы показать его, и viewController, который его называет. Есть ли способ, с помощью которого я могу заставить его запускать после случайного периода времени в любом представленииКонтроллер показывает в тот момент?
Как использовать requestReview (SKStore Review Controller), чтобы показать всплывающее окно просмотра в текущем viewController после случайного периода времени
Ответ 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.