App Storeでレビューする機能を実装する
iOS 10.3から登場する SKStoreReviewController
のドキュメントにApp Storeのレビュー画面を直接開く方法がしれっと記載されている。
https://developer.apple.com/reference/storekit/skstorereviewcontroller/2851536-requestreview
アプリのURLのクエリに action=write-review
を追加すればいいとの事。
例えば Apple の TestFight アプリを例にすると以下のコードになる
- (IBAction)review:(id)sender { // 899247664 is identifier for TestFlight NSURL *URL = [NSURL URLWithString:@"https://itunes.apple.com/app/id899247664?action=write-review"]; [[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil]; }
この時の遷移の流れは以下のようになる
メソッド実行
アプリを離れて App Store へ遷移
レビュータブが選択された状態のアプリ紹介画面が一瞬表示される
即座にモーダルでレビュー記入画面が表示される(ログインが必要であればログイン)
キャンセルorレビューを完了するとアプリ紹介画面へ戻る
このように action=write-review
を使うと直接レビュー画面を開く事が出来る。
クエリ無しでURLを開いた場合はアプリ紹介画面の詳細タブが選択された状態で表示されるためユーザにレビュータブを選択してもらう操作が必要になる。
その点はスマートではないけどレビュータブを選択してレビューを書く前に「App サポート」の選択肢がユーザに提示されるので、もしアプリの使い方や不具合についてネガティブなレビュー書く前にサポートに連絡して欲しいという場合はクエリを使って直接レビュー記入画面を開かずに従来の方法でApp Storeに遷移するのも手かも知れない。
もしくはアプリ内でレビューボタンと不具合報告ボタンをきちんと分けておいて、不具合報告はサポートに直接連絡してもらうようなフローを取るのがいいと思う。
ちなみに iOS 10.3 の SKStoreReviewController
を使ったレビュー機能はアプリ内にアラート形式のレーティング画面が出るだけなので非常に使いやすそうだけど、ドキュメントにあるようにメソッドを実行した時に常にアラートが出るわけではなくframework側でよしなに実行タイミングを決めてくれるものなので、ボタン操作などユーザのアクションに対してこのコントローラを使うのは不適切らしい。