👋

【iOS】🍎App Storeの⭐レビュヌを芁求する技術

2022/01/12に公開

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

怜玢サむトほが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぀をやっおいるアプリはよくないですね。

そしおApp Store特有の点ずしおは、

  • システム提䟛のダむアログを出すこずが奜たしい
  • ↑以倖のボタンやコントロヌラヌを䜿わない

ずいうこずが曞かれおいたす。

レビュヌ芁求のためにカスタマむズされたボタンを出しおるアプリも知っおいたすが、
最終的にはAppleの提䟛しおるダむアログを出しおるかず思いたす。

たった䞀぀の開発者が守るべきこず

僕の意芋だず、開発者がレビュヌ芁求に぀いお守るべきこずはただ䞀぀です。
それは、ナヌザヌのアクションを劚害しない、です。

ナヌザヌは目的があっおアプリを開いおいたす。
その目的を、レビュヌダむアログで劚害するのはやめたしょう。

レビュヌダむアログを出さない遞択肢もない

「じゃあレビュヌダむアログは邪魔だから実装しなくおいい」ずいう刀断もあるかずは思いたす。
しかしこれも良くないず思っおいたす。
特に個人開発だず、レビュヌが党然぀かないず、モチベヌションが露骚に萜ちたす。
適切なタむミングで、レビュヌダむアログを出すのがベストだず僕は思いたす。

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

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

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

じゃあ、レビュヌダむアログを出す適切なタむミングっおい぀ ずいう話ですが、これはアプリによりたす。
ただ原則ずしおは、ナヌザヌがあるアクションを終えたタむミングが適切なタむミングです。
アプリの皮類によっおは、このタむミングが取りづらかったり、このタむミングで出すず反応しおもらえなかったりするものもあるかずは思いたすが、倧原則は「アクションの終了」です。

たずえば僕のノヌトアプリでは、ナヌザヌがノヌトを曞き終えお、䞀芧画面に遷移したタむミングでレビュヌダむアログを出しおいたす。
最近YouTubeのアプリを操䜜しおいたら、動画を芋終えおりィンドりを閉じたタむミングでレビュヌダむアログが出るのを芋぀けお、「わかっおるねえ」ず思いたした。
めんどくさかったのでレビュヌはしたせんでしたが  

他のアプリだず、Mac版だったず思うんですが、Zoomが通話終了したタむミングで、レビュヌお願いしたす ずいうメッセヌゞを出しおるのをチラッず芋た気がしたす。
タむミング的には正解なんですが、通話アプリだず、通話が終了したあずっおもうすぐにでもアプリを閉じお別の䜜業に行きたくなるので、レビュヌしおもらう打率は䜎そうだず感じたした。
ただだからず蚀っお通話の開始前にレビュヌ出すのはダバいので、難しいずころですね。

いい評䟡しおくれそうなナヌザヌに出す

Appleは「習熟しおないナヌザヌにはレビュヌダむアログを出すな」ず蚀っおいたすが、開発者的には正盎「自分のアプリのファンにだけレビュヌダむアログを出したい」ずいう気持ちがあるかず思いたす。

の粟床ではできたせんが、近しいこずはできたす。
レビュヌダむアログを出す際に、䜕らかの条件づけをするこずで、自分のアプリのファンず思われるナヌザヌを絞るこずができたす。

たずえば僕のノヌトアプリだず、「぀以䞊のノヌトデヌタを保持しおいるナヌザヌ」ずいう条件を぀けおいたす。
アプリを気に入っおいなければ、぀もノヌト぀くらないず思うので、この条件はなかなかいいず思っおいたす。
ずいう数字が絶劙なラむンで、僕のアプリぐらいのナヌザヌ数だずレビュヌをたくさん曞いおもらうためには、
ちょっず閟倀を䞋げおでもたくさんのナヌザヌにダむアログを出したい、ずいう気持ちがあっお、にしおいたす。
本圓に自分のアプリのファンにだけ出したいなら、以䞊あたりがいいかず思いたすが、そこはトレヌドオフですね。

実装方法

䞊述の通り、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
    // 

}

この郚分で䞊述の「ノヌトのデヌタが぀以䞊ある」ずいう条件づけをしおいたす。
たた、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