ObjecTips

Swift & Objective-C で iOS とか macOS とか

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];
}

この時の遷移の流れは以下のようになる

メソッド実行

f:id:Koze:20170202101009p:plain

アプリを離れて App Store へ遷移

f:id:Koze:20170202101258p:plain

レビュータブが選択された状態のアプリ紹介画面が一瞬表示される

f:id:Koze:20170202101404p:plain

即座にモーダルでレビュー記入画面が表示される(ログインが必要であればログイン)

f:id:Koze:20170202101636p:plain f:id:Koze:20170202101703p:plain

キャンセルorレビューを完了するとアプリ紹介画面へ戻る

f:id:Koze:20170202101404p:plain

このように action=write-review を使うと直接レビュー画面を開く事が出来る。
クエリ無しでURLを開いた場合はアプリ紹介画面の詳細タブが選択された状態で表示されるためユーザにレビュータブを選択してもらう操作が必要になる。
その点はスマートではないけどレビュータブを選択してレビューを書く前に「App サポート」の選択肢がユーザに提示されるので、もしアプリの使い方や不具合についてネガティブなレビュー書く前にサポートに連絡して欲しいという場合はクエリを使って直接レビュー記入画面を開かずに従来の方法でApp Storeに遷移するのも手かも知れない。
もしくはアプリ内でレビューボタンと不具合報告ボタンをきちんと分けておいて、不具合報告はサポートに直接連絡してもらうようなフローを取るのがいいと思う。


ちなみに iOS 10.3 の SKStoreReviewController を使ったレビュー機能はアプリ内にアラート形式のレーティング画面が出るだけなので非常に使いやすそうだけど、ドキュメントにあるようにメソッドを実行した時に常にアラートが出るわけではなくframework側でよしなに実行タイミングを決めてくれるものなので、ボタン操作などユーザのアクションに対してこのコントローラを使うのは不適切らしい。