はじめに
レビューアラートを表示する方法自体はimport StoreKit
を含めてもほんの2行で済むのですが、いつどこで表示させるかが悩みどころ。わざわざレビューのためのボタンを配置するのも億劫なので、特定の回数起動された時に依頼することにしました。
回数をカウントする
Userdefaultsを使って起動回数をカウントします。
let key = "startupCount"
let userDefaults = UserDefaults(suiteName: "/*一意に定まる名前*/")
userDefaults?.setValue((userDefaults?.integer(forKey: key))!+1, forKey: key)
userDefaults?.synchronize()
let count = userDefaults?.integer(forKey: key)
実行された回数を数えるための変数を用意します。僕はこれをアプリが起動された時に実行される関数の中に入れましたが、数えたいものによってはイニシャライザの中に入れても良いと思います。
レビューを表示させる
レビューを表示すること自体はとても簡単です。StoreKit
をimportし、表示させたいところに
SKStoreReviewController.requestReview()
と書きます。
今回は起動回数が5または10の時表示させたいので
if count == 5 || count == 10 {
SKStoreReviewController.requestReview()
}
としました。
SceneDelegateに処理を加える
アプリによってはAppDelegateで起動時の処理を行っているものもあると思います。(特にxcode11以前のもの)
SceneDelegate.swift
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let contentView = Tab()
let key = "startupCount"
let userDefaults = UserDefaults(suiteName: "group.otsuka.amane.ColorDesignApp")
userDefaults?.setValue((userDefaults?.integer(forKey: key))!+1, forKey: key)
userDefaults?.synchronize()
let count = userDefaults?.integer(forKey: key)
// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView)
self.window = window
window.makeKeyAndVisible()
if count == 5 || count == 10 {
SKStoreReviewController.requestReview()
}
}
}
//省略
}
なおここで使っているTab()
とははじめに表示される画面のことで
こんな感じで定義しています。詳しくはこちら