web-dev-qa-db-ja.com

SKStoreReviewController設定でユーザーがこのアプリ(RTA)のレートをオフにしたこと、または3回の制限に達したことを検出する方法?

IOS 10.3以降、Appleは、レビュープロンプト(このアプリを評価)を年3回に制限しており、ユーザーの設定でオフにすることができます。

Q:3回の制限に達したこと、またはユーザーがRTAをオフにしたことをアプリで確認するにはどうすればいいですか?「アプリは気に入りましたか?はいの場合、レビューを書くことができますか? [はい/いいえ]」ので、ユーザーが[はい]をタップしても何も表示されません。

公式ドキュメントには、実際にはそれほど多くの情報はありません: https://developer.Apple.com/reference/storekit/skstorereviewcontroller

アプリのユーザーエクスペリエンスフローに意味がある場合は、このメソッドを呼び出す必要がありますが、評価/レビューリクエストビューの実際の表示は、App Storeポリシーによって管理されます。このメソッドはアラートを表示する場合としない場合があるため、ボタンのタップやその他のユーザーアクションに応答して呼び出すのは適切ではありません。

16
Van Du Tran

前文

アプリが気に入ったかどうかをユーザーに尋ねるmightと、アプリが拒否されます。次に例を示します。 https://Twitter.com/pietbrauer/status/791883047373246464

ここでリンクが切れた場合は、Appleの応答の抜粋です。

3.2.2 ...アプリには、App Storeのユーザーレビューやチャートランキングを操作できるコンテンツと機能が含まれています。具体的には、アプリはユーザーレビューをフィルタリングし、アプリを4つ星から5つ星に評価するつもりのユーザーにのみ、App Storeでの評価を完了するように指示します...

私は個人的に、ユーザーの問題を本当に解決しようとし、その後レビューを残す機会を彼らに与えた場合、これは有効な戦術であると信じていますが、Appleそのように。

可能な解決策

  1. アプリを使用して楽しんでいるかどうかなどをユーザーに尋ねるポップアップを表示します。
  2. レビューを取得するには、[SKStoreReviewController requestReview]を使用してみてください。
  3. ポップアップが表示されていることを示す、ウィンドウの数が変化したかどうかを確認します。ここでの注意点は、他のイベントによってウィンドウの数が変化する可能性があるため、これは100%信頼できるものではないということです。
  4. ウィンドウの数が変わらない場合は、ディープリンクを使用してユーザーをアプリストアに転送します。 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に送信していないため、これは理論上のものです。

10
Nikola Lajic

まあ、あなたはリクエストを発射して見ることを試みることができますが、コールバックがなく、リクエストしているメソッドを呼び出すときに評価アラートが表示されたかどうかを検出する他の公式の方法がない限り。

ただし、回避策はありますStoreKitクラスの1つをスウィズルできるため、[評価]ダイアログが開いたときに確認できます。

UIWindow-周りに言及されている方法を調査することも役立つかもしれませんが、メソッド呼び出しのスウィズルはおそらくより信頼性があります。

ポッドとして利用できるAppRatingのようないくつかの評価マネージャーを使用することもできます。ポッドとしては、あなたのためにものを管理しますが、単純なレベルでのみ、通話をカウントして覚えています。

6
Michi

公式Appleの例:

https://developer.Apple.com/documentation/storekit/skstorereviewcontroller/requesting_app_store_reviews?language=objc

彼らはこのようにしています:

_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を返すことができなかったのか、私にはわかりません。

2