私はiOS 10.3で利用可能なこの新機能について読みましたが、より柔軟ですぐに使えるようになると思いました。しかし、 docs を読んだ後、表示する時間とそれを呼び出すviewControllerを決定する必要があることがわかりました。その時点で任意のviewControllerでランダムな期間が表示された後にトリガーする方法はありますか?
AppDelegateで:
迅速:
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)
}
@objc 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が呼び出されると、評価プロンプトが表示されます。
目的のために-C:
追加StoreKit.framework
次に、viewController.hで
#import <StoreKit/StoreKit.h>
次に、関数呼び出しで:
[SKStoreReviewController requestReview];
Swiftの場合
追加StoreKit.framework
ViewController.Swiftで
import StoreKit
次に、関数呼び出しで:
SKStoreReviewController.requestReview()
それでおしまい ! Appleは評価をいつ表示するかをランダムに処理します。開発中は、呼び出すたびに呼び出されます。
編集:OSバージョンを確認する必要はありません。OSが10.3未満の場合、StoreKitはポップアップしません。Zakariaに感謝します。
ランダムにポップアップするのは、そのルーチンを使用する良い方法ではなく、Appleのアドバイスに違反しているだけでなく、結果があまり良くありません。
ランダムな時間にポップアップでユーザーを悩ますことは、レベルを完了したときやドキュメントを作成したときなど、適切なタイミングでユーザーを促すほど成功することはありません。
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()
ランダムにダイアログを表示することは、おそらく良い考えではありません。 Appleガイドライン をご覧ください:特に時間に敏感なタスクやストレスの多いタスクを実行している場合は、ユーザーを中断しないでください。
これはAppleが示唆するものです:
ユーザーがアプリとの関わりを実証した後にのみ評価を求めます。たとえば、ゲームレベルの完了時にユーザーにプロンプトを表示するまたは生産性タスク。最初の起動時またはオンボーディング時に評価を求めないでください。十分な時間をかけて意見を述べてください。
害虫にならないでください。評価のプロンプトが繰り返し表示されると、ユーザーを苛立たせ、アプリに対するユーザーの意見に悪影響を及ぼす可能性があります。少なくともを評価リクエストの間に1〜2週間許可し、ユーザーがアプリとの追加のエンゲージメントを示した後にのみ再度プロンプトを表示します。
この post も非常に興味深い...
まだコメントを追加できませんが、Appiraterを使用している場合は、バージョンを確認して10.3よりも低いかどうかを確認し、他のAppiraterレビューメッセージボックスが表示されるようにしてください。