web-dev-qa-db-fra.com

Comment utiliser requestReview (SKStore Review Controller) pour afficher la fenêtre de révision dans le viewController actuel après une période aléatoire

J'ai entendu parler de cette nouvelle fonctionnalité disponible dans iOS 10.3 et je pensais qu'elle serait plus flexible et prête à l'emploi. Mais après avoir lu les docs , j'ai découvert qu'il fallait décider du moment pour le montrer et du viewController qui l'appelle. Est-il possible de le déclencher après une période aléatoire dans n'importe quel viewController affiché à ce moment? 

22
Zakaria

Dans votre AppDelegate:

Rapide:

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()
}

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

Le code ci-dessus demandera à Apple d’inviter l’utilisateur à évaluer l’application à un moment quelconque entre 50 et 500 secondes après le lancement de l’application . lorsque le requestReview est appelé.

25
Michael Sacks

Pour objectif - C:

Ajouter StoreKit.framework

Puis dans votre viewController.h

#import <StoreKit/StoreKit.h>

Puis dans votre appel de fonction:

            [SKStoreReviewController requestReview];

Pour Swift

Ajouter StoreKit.framework

Dans votre ViewController.Swift

import StoreKit

Puis dans votre appel de fonction:

SKStoreReviewController.requestReview()

C'est tout ! Apple se chargera de l'affichage de la note (au hasard)… .. Une fois en développement, il sera appelé à chaque fois que vous l'appelez.

Édité: pas besoin de vérifier la version du système d'exploitation, StoreKit ne s'affiche pas si le système d'exploitation est inférieur à 10.3, merci Zakaria.

13
Omkar Jadhav

Sauter au hasard n’est pas un bon moyen de suivre cette routine et non seulement contrevient au conseil d’Apple, mais vous donnera des résultats décevants.

Ennuyer un utilisateur avec une fenêtre contextuelle à un moment donné n'aura jamais autant de succès que de l'inviter à un moment approprié, comme lorsqu'il vient de terminer un niveau ou de créer un document, et qu'il a ce sentiment de succès, très confus.

9
Peter Johnson

En suivant les conseils de Peter Johnson, j'ai créé un cours simple, dans lequel vous pouvez simplement insérer la méthode à l'endroit souhaité dans votre code et qui apparaîtra à un endroit où l'utilisateur vient de connaître le succès.

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()
      }
    }
  }
}

Pour l’utiliser, placez-le à l’endroit où vous souhaitez l’appeler et espérons que vous ne cochez pas les utilisateurs au hasard.

ReviewUtility.sharedInstance.recordLaunch()
6
Adrian

Montrer le dialogue au hasard n'est probablement pas une bonne idée. Veuillez vous reporter à la directive Apple qui mentionne: N'interrompez pas l'utilisateur, surtout lorsqu'il effectue une tâche urgente ou stressante.

Voici ce que suggère Apple: 

Demandez une note uniquement après que l'utilisateur a démontré son engagement avec votre application. Par exemple, Invitez l'utilisateur à la achèvement d'un niveau de jeu ou tâche de productivité. Ne demandez jamais une note lors du premier lancement ou lors de l'intégration. Prévoyez suffisamment de temps pour vous faire une opinion.

Ne pas être un parasite. Des invites de classement répétées peuvent être irritantes et même avoir un impact négatif sur l'opinion de l'utilisateur sur votre application. Autorisez au moins _ une semaine ou deux entre les demandes d'évaluation et ne revenez qu'à l'invite après que l'utilisateur aura démontré un engagement supplémentaire avec votre application.

Ce post est également très intéressant ...

5
petrsyn

Je ne peux pas encore ajouter de commentaires, mais si vous utilisez Appirater, vous pouvez vérifier la version pour voir si elle est inférieure à 10.3.

1
limitedaccess