IOS 10.3以降、Appleは、レビュープロンプト(このアプリを評価)を年3回に制限しており、ユーザーの設定でオフにすることができます。
Q:3回の制限に達したこと、またはユーザーがRTAをオフにしたことをアプリで確認するにはどうすればいいですか?「アプリは気に入りましたか?はいの場合、レビューを書くことができますか? [はい/いいえ]」ので、ユーザーが[はい]をタップしても何も表示されません。
公式ドキュメントには、実際にはそれほど多くの情報はありません: https://developer.Apple.com/reference/storekit/skstorereviewcontroller
アプリのユーザーエクスペリエンスフローに意味がある場合は、このメソッドを呼び出す必要がありますが、評価/レビューリクエストビューの実際の表示は、App Storeポリシーによって管理されます。このメソッドはアラートを表示する場合としない場合があるため、ボタンのタップやその他のユーザーアクションに応答して呼び出すのは適切ではありません。
アプリが気に入ったかどうかをユーザーに尋ねるmightと、アプリが拒否されます。次に例を示します。 https://Twitter.com/pietbrauer/status/791883047373246464
ここでリンクが切れた場合は、Appleの応答の抜粋です。
3.2.2 ...アプリには、App Storeのユーザーレビューやチャートランキングを操作できるコンテンツと機能が含まれています。具体的には、アプリはユーザーレビューをフィルタリングし、アプリを4つ星から5つ星に評価するつもりのユーザーにのみ、App Storeでの評価を完了するように指示します...
私は個人的に、ユーザーの問題を本当に解決しようとし、その後レビューを残す機会を彼らに与えた場合、これは有効な戦術であると信じていますが、Appleそのように。
[SKStoreReviewController requestReview]
を使用してみてください。SKStoreReviewController
のドキュメントでは、action=write-review
をクエリパラメータとして使用して、レビューページに直接移動することを推奨しています。ここに簡単な実装があります:
// make sure we the current iOS version supports in app reviews
if ([SKStoreReviewController class])
{
NSUInteger windowCount = [UIApplication sharedApplication].windows.count;
[SKStoreReviewController requestReview];
// give the review controller some time to display the popup
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
if (windowCount < [UIApplication sharedApplication].windows.count)
{
// assume review popup showed instead of some other system alert
// for example show "thank you"
}
else
{
// open app store to leave review
NSURL *reviewUrl = [NSURL URLWithString:@"{your-app-url}?action=write-review"];
[[UIApplication sharedApplication] openURL:reviewUrl];
}
});
}
注:私はこのコードをApp Storeに送信していないため、これは理論上のものです。
まあ、あなたはリクエストを発射して見ることを試みることができますが、コールバックがなく、リクエストしているメソッドを呼び出すときに評価アラートが表示されたかどうかを検出する他の公式の方法がない限り。
ただし、回避策はあります – StoreKit
クラスの1つをスウィズルできるため、[評価]ダイアログが開いたときに確認できます。
UIWindow
-周りに言及されている方法を調査することも役立つかもしれませんが、メソッド呼び出しのスウィズルはおそらくより信頼性があります。
ポッドとして利用できるAppRating
のようないくつかの評価マネージャーを使用することもできます。ポッドとしては、あなたのためにものを管理しますが、単純なレベルでのみ、通話をカウントして覚えています。
公式Appleの例:
彼らはこのようにしています:
_let twoSecondsFromNow = DispatchTime.now() + 2.0
DispatchQueue.main.asyncAfter(deadline: twoSecondsFromNow) { [navigationController] in
if navigationController?.topViewController is ProcessCompletedViewController {
SKStoreReviewController.requestReview()
UserDefaults.standard.set(currentVersion, forKey: UserDefaultsKeys.lastVersionPromptedForReviewKey)
}
}
_
なぜSKStoreReviewController.requestReview()
からBOOLを返すことができなかったのか、私にはわかりません。