À partir de iOS 10.3, Apple limite l'invite d'examen (Évaluer cette application) à 3 fois par an et peut être désactivée dans les paramètres de l'utilisateur.
Q: Comment pouvons-nous détecter que la limite de 3 fois est atteinte ou si l’utilisateur a désactivé RTA, je ne montrerai donc pas dans l’application: «Avez-vous aimé l’application? Si oui, pouvez-vous écrire un commentaire? [Oui/Non] "car si l'utilisateur appuie sur Oui, rien ne s'affiche.
La documentation officielle ne contient vraiment pas beaucoup d’informations: https://developer.Apple.com/reference/storekit/skstorereviewcontroller
Bien que vous deviez appeler cette méthode lorsque le flux d'expérience utilisateur de votre application vous semble judicieux, l'affichage réel d'une vue de demande d'évaluation/de révision est régi par la stratégie App Store. Étant donné que cette méthode peut ou non présenter une alerte, il n'est pas approprié de l'appeler en réponse à une pression sur un bouton ou à une autre action de l'utilisateur.
Demander aux utilisateurs s'ils aiment l'application pourrait entraîner le rejet de votre application. Voici un exemple: https://Twitter.com/pietbrauer/status/791883047373246464
Au cas où le lien mourrait, voici un extrait de la réponse d'Apple:
3.2.2 ... votre application comprend du contenu et des fonctionnalités permettant de manipuler les avis des utilisateurs ou les classements dans l'App Store. Plus précisément, votre application filtre les avis des utilisateurs et ne fait que diriger les utilisateurs souhaitant attribuer une note de 4 à 5 étoiles à votre application afin qu'ils complètent l'évaluation de l'App Store ...
Personnellement, j'estime que cela peut être une tactique valable si vous essayez réellement de résoudre le problème des utilisateurs tout en leur laissant la possibilité de laisser une critique par la suite, mais la question demeure de savoir si Apple le verra de cette façon.
[SKStoreReviewController requestReview]
pour obtenir un avis.SKStoreReviewController
suggèrent d'utiliser action=write-review
en tant que paramètre de requête pour accéder directement à la page des avis.Voici une implémentation simple:
// 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];
}
});
}
Remarque: Je n'ai pas soumis ce code sur l'App Store, ce n'est donc que théorique.
Eh bien, vous pouvez essayer de lancer la demande et de voir, mais tant qu’il n’ya pas de rappel ni aucun autre moyen officiel de savoir si l’alerte de classement a été affichée au moment où vous appelez la méthode demandeuse.
Il y a un moyen de contourner cependant - une des classes StoreKit
peut être balayée afin que vous puissiez observer lorsque la boîte de dialogue Rating est ouverte.
UIWindow
- Les méthodes d'inspection mentionnées ci-dessus peuvent également être utiles, mais il est probablement plus fiable d'interroger un appel de méthode.
Vous pouvez également utiliser certains gestionnaires de notation, tels que AppRating
, disponibles sous forme de module, qui gèrent le contenu pour vous, mais uniquement à un niveau naïf en comptant les appels et en les mémorisant.
Dans l'exemple officiel Apple, c'est ici:
Ils le font de cette façon:
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)
}
}
Je ne sais pas pourquoi ils ne pourraient pas simplement retourner un BOOL de SKStoreReviewController.requestReview()
.