👋

【iOS】🍎App Storeの⭐️レビューを要求する技術

4 min read

アプリのレビュー数、増やしたいですよね?

検索サイト(ほぼGoogle)への最適化をSEOと言いますが、
モバイルアプリのストアの最適化をASO(App Store Optimization)と言うそうです。

この記事は、僕がiOSアプリの個人開発の中で、正攻法でレビューを要求する道を模索したものです。
前半で原理原則の話をして、後半に実装方法を書きます。

Appleは何を言っているか

レビュー要求について、Appleは何を言っているでしょうか。
Human Interface Guidelines(以下HIG)の中に、それは書かれています。

https://developer.apple.com/design/human-interface-guidelines/ios/system-capabilities/ratings-and-reviews/

基本として、3つのことが書かれています。

  • アプリに習熟する十分な時間を与えた後でレビューを要求する
  • ユーザーが大事なタスクを処理してるときにレビューを要求しない
  • しつこくダイアログを出さない

この辺は反論がないかと思います。
他のストアにおいても、この3つをやっているアプリはよくないですね。

そしてApp Store特有の点としては、

  • システム提供のダイアログを出すことが好ましい
  • (↑以外の)ボタンやコントローラーを使わない

ということが書かれています。

レビュー要求のためにカスタマイズされたボタンを出してるアプリも知っていますが、
最終的にはAppleの提供してるダイアログを出してるかと思います。

たった一つの開発者が守るべきこと

僕の意見だと、開発者がレビュー要求について守るべきことはただ一つです。
それは、ユーザーのアクションを妨害しない、です。

ユーザーは目的があってアプリを開いています。
その目的を、レビューダイアログで妨害するのはやめましょう。

レビューダイアログを出さない選択肢もない

「じゃあレビューダイアログは邪魔だから実装しなくていい」という判断もあるかとは思います。
しかしこれも良くないと思っています。
特に個人開発だと、レビューが全然つかないと、モチベーションが露骨に落ちます。
適切なタイミングで、レビューダイアログを出すのがベストだと僕は思います。

ちなみにですが、僕の個人開発のアプリ「Pieces of Paper」の例で話すと、
2020/10/17のレビュー要求ダイアログを入れる直前では、トータルレビュー12件だったものが、2020/10/22には24件になりました。

https://twitter.com/0si43/status/1319072389389447168?s=20

レビューダイアログを出す適切なタイミングを考える

じゃあ、レビューダイアログを出す適切なタイミングっていつ? という話ですが、これはアプリによります。
ただ原則としては、ユーザーがあるアクションを終えたタイミングが適切なタイミングです。
アプリの種類によっては、このタイミングが取りづらかったり、このタイミングで出すと100%反応してもらえなかったりするものもあるかとは思いますが、大原則は「アクションの終了」です。

たとえば僕のノートアプリでは、ユーザーがノートを書き終えて、一覧画面に遷移したタイミングでレビューダイアログを出しています。
最近YouTubeのアプリを操作していたら、動画を見終えてウィンドウを閉じたタイミングでレビューダイアログが出るのを見つけて、「わかってるねえ」と思いました。
(めんどくさかったのでレビューはしませんでしたが……)

他のアプリだと、Mac版だったと思うんですが、Zoomが通話終了したタイミングで、レビューお願いします! というメッセージを出してるのをチラッと見た気がします。
タイミング的には正解なんですが、通話アプリだと、通話が終了したあとってもうすぐにでもアプリを閉じて別の作業に行きたくなるので、レビューしてもらう打率は低そうだと感じました。
ただだからと言って通話の開始前にレビュー出すのはヤバいので、難しいところですね。

いい評価してくれそうなユーザーに出す

Appleは「習熟してないユーザーにはレビューダイアログを出すな」と言っていますが、開発者的には正直「自分のアプリのファンにだけレビューダイアログを出したい!」という気持ちがあるかと思います。

100%の精度ではできませんが、近しいことはできます。
レビューダイアログを出す際に、何らかの条件づけをすることで、自分のアプリのファンと思われるユーザーを絞ることができます。

たとえば僕のノートアプリだと、「5つ以上のノートデータを保持しているユーザー」という条件をつけています。
アプリを気に入っていなければ、5つもノートつくらないと思うので、この条件はなかなかいいと思っています。
5という数字が絶妙なラインで、僕のアプリぐらいのユーザー数だとレビューをたくさん書いてもらうためには、
ちょっと閾値を下げてでもたくさんのユーザーにダイアログを出したい、という気持ちがあって、5にしています。
本当に自分のアプリのファンにだけ出したいなら、10以上あたりがいいかと思いますが、そこはトレードオフですね。

実装方法

上述の通り、Appleがダイアログを用意してくれているので、それを使えば実装できます。
iOS 14以降ならこうです。

if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
    SKStoreReviewController.requestReview(in: scene)
}

iOS 14以前なら

SKStoreReviewController.requestReview()

requestReview() はお手軽だったんですが、Deperecated扱いになってます。

https://developer.apple.com/documentation/storekit/skstorereviewcontroller/2851536-requestreview

以前個人開発のアプリのプルリクをご参考で載せておきます。

https://github.com/0si43/PiecesOfPaper/pull/20/files

ちなみにですが、

private func requestAppStoreReview() {
    guard drawings.count >= 5 else { return } // frequently used
    guard !UserDefaults.standard.bool(forKey: "DidAppStoreReviewRequested") else { return } // request once
    // …
}

この部分で上述の「ノートのデータが5つ以上ある」という条件づけをしています。
また、UserDefaultsを使って、一度レビューダイアログを出したユーザーには出さないよう制御を入れています。
よほどレビューして欲しければ、同じユーザーでも時間をおいて何回か出してもいいかもですが、マイナス効果もそれなりにあるので、僕は一回出せば十分と思っています。

SwiftUIベースのアプリでも、SKStoreReviewController.requestReview(in: scene) を使うことになります。
ただSceneの取得について、UIApplication.shared.connectedScenes ではなく UIApplication.shared.windowsを使いました。

// for SwiftUI
if let windowScene = UIApplication.shared.windows.first?.windowScene {
     SKStoreReviewController.requestReview(in: windowScene)
}

ググって「SwiftUIではこうだよ」と出てきたのを雑に使っただけなので、両者の差異はあまり良くわかってません。。。

もし実装例が欲しい方は、↓のプルリクをご覧ください。

https://github.com/0si43/PiecesOfPaper/pull/86/files

Discussion

ログインするとコメントできます