web-dev-qa-db-ja.com

requestReview(SKStore Review Controller)を使用して、ランダムな期間後に現在のviewControllerにレビューポップアップを表示する方法

私はiOS 10.3で利用可能なこの新機能について読みましたが、より柔軟ですぐに使えるようになると思いました。しかし、 docs を読んだ後、表示する時間とそれを呼び出すviewControllerを決定する必要があることがわかりました。その時点で任意のviewControllerでランダムな期間が表示された後にトリガーする方法はありますか?

22
Zakaria

AppDelegateで:

迅速:

import StoreKit

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let shortestTime: UInt32 = 50
    let longestTime: UInt32 = 500
    guard let timeInterval = TimeInterval(exactly: arc4random_uniform(longestTime - shortestTime) + shortestTime) else { return true }

    Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector: #selector(AppDelegate.requestReview), userInfo: nil, repeats: false)

}

@objc func requestReview() {
    SKStoreReviewController.requestReview()
}

Objective-C:

#import <StoreKit/StoreKit.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    int shortestTime = 50;
    int longestTime = 500;
    int timeInterval = arc4random_uniform(longestTime - shortestTime) + shortestTime;

    [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(requestReview) userInfo:nil repeats:NO];
}

- (void)requestReview {
    [SKStoreReviewController requestReview];
}

上記のコードはAppleを要求し、アプリの起動が完了してから50〜500秒のランダムな時間にアプリを評価するようにユーザーに促します。Appleのドキュメントによると、 requestReviewが呼び出されると、評価プロンプトが表示されます。

26
Michael Sacks

目的のために-C:

追加StoreKit.framework

次に、viewController.hで

#import <StoreKit/StoreKit.h>

次に、関数呼び出しで:

            [SKStoreReviewController requestReview];

Swiftの場合

追加StoreKit.framework

ViewController.Swiftで

import StoreKit

次に、関数呼び出しで:

SKStoreReviewController.requestReview()

それでおしまい ! Appleは評価をいつ表示するかをランダムに処理します。開発中は、呼び出すたびに呼び出されます。

編集:OSバージョンを確認する必要はありません。OSが10.3未満の場合、StoreKitはポップアップしません。Zakariaに感謝します。

13
Omkar Jadhav

ランダムにポップアップするのは、そのルーチンを使用する良い方法ではなく、Appleのアドバイスに違反しているだけでなく、結果があまり良くありません。

ランダムな時間にポップアップでユーザーを悩ますことは、レベルを完了したときやドキュメントを作成したときなど、適切なタイミングでユーザーを促すほど成功することはありません。

9
Peter Johnson

Peter Johnsonのアドバイスを受けて、コード内の目的の場所にメソッドを挿入するだけの簡単なクラスを作成し、ユーザーが成功した場所にポップアップします。

struct DefaultKeys {
  static let uses = "uses"
}


class ReviewUtility {

  //  Default Keys stored in Structs.Swift

  static let sharedInstance = ReviewUtility()

  private init() {}

  func recordLaunch() {
    let defaults = UserDefaults.standard

    // if there's no value set when the app launches, create one
    guard defaults.value(forKey: DefaultKeys.uses) != nil else { defaults.set(1, forKey: DefaultKeys.uses); return }
    // read the value
    var totalLaunches: Int = defaults.value(forKey: DefaultKeys.uses) as! Int
    // increment it
    totalLaunches += 1
    // write the new value
    UserDefaults.standard.set(totalLaunches, forKey: DefaultKeys.uses)

    // pick whatever interval you want
    if totalLaunches % 20 == 0 {
      // not sure if necessary, but being neurotic
      if #available(iOS 10.3, *) {
        // do storekit review here
        SKStoreReviewController.requestReview()
      }
    }
  }
}

それを使用するには、呼び出したい場所にこれを貼り付けてください。ランダムにユーザーをオフにしないでください。

ReviewUtility.sharedInstance.recordLaunch()
7
Adrian

ランダムにダイアログを表示することは、おそらく良い考えではありません。 Appleガイドライン をご覧ください:特に時間に敏感なタスクやストレスの多いタスクを実行している場合は、ユーザーを中断しないでください。

これはAppleが示唆するものです:

ユーザーがアプリとの関わりを実証した後にのみ評価を求めます。たとえば、ゲームレベルの完了時にユーザーにプロンプ​​トを表示するまたは生産性タスク。最初の起動時またはオンボーディング時に評価を求めないでください。十分な時間をかけて意見を述べてください。

害虫にならないでください。評価のプロンプトが繰り返し表示されると、ユーザーを苛立たせ、アプリに対するユーザーの意見に悪影響を及ぼす可能性があります。少なくともを評価リクエストの間に1〜2週間許可し、ユーザーがアプリとの追加のエンゲージメントを示した後にのみ再度プロンプトを表示します。

この post も非常に興味深い...

5
petrsyn

まだコメントを追加できませんが、Appiraterを使用している場合は、バージョンを確認して10.3よりも低いかどうかを確認し、他のAppiraterレビューメッセージボックスが表示されるようにしてください。

1
limitedaccess