ios - Cómo usar requestReview(SKStore Review Controller) para mostrar la ventana emergente de revisión en el viewController actual después de un período de tiempo aleatorio
objective-c storekit (6)
He leído acerca de esta nueva característica disponible en iOS 10.3 y pensé que sería más flexible y lista para usar. Pero después de leer los docs , descubrí que necesitas decidir el momento para mostrarlos y al controlador de visualización que lo llama. ¿Hay alguna forma en que pueda activarlo después de un período de tiempo aleatorio en cualquier viewController que se muestra en ese momento?
Aún no puedo agregar comentarios, pero si está utilizando Appirater, es posible que desee verificar la versión para ver si es inferior a 10.3, de modo que aparezca el otro cuadro de mensaje de revisión de Appirater.
En su AppDelegate:
Rápido:
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()
}
C objetivo:
#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];
}
El código anterior le pedirá a Apple que solicite al usuario que califique la aplicación en un tiempo aleatorio entre 50 y 500 segundos después de que la aplicación se inicie. Recuerde que de acuerdo con los documentos de Apple, no hay garantía de que se presentará el indicador de calificación cuando se llame a requestReview.
Mostrar el diálogo al azar no es probablemente una buena idea. Consulte la guía de Apple que menciona: No interrumpa al usuario, especialmente cuando está realizando una tarea estresante o sensible al tiempo.
Esto es lo que Apple sugiere:
Pida una calificación solo después de que el usuario haya demostrado compromiso con su aplicación. Por ejemplo, solicite al usuario que complete un nivel de juego o una tarea de productividad . Nunca solicite una clasificación en el primer lanzamiento o durante la incorporación. Deje suficiente tiempo para formarse una opinión.
No seas una plaga. Los repetidos avisos de calificación pueden ser irritantes e incluso pueden influir negativamente en la opinión del usuario sobre su aplicación. Permita al menos una o dos semanas entre las solicitudes de calificación y vuelva a preguntar después de que el usuario haya demostrado un compromiso adicional con su aplicación.
Este post también es bastante interesante ...
No es una buena manera de usar esa rutina, y no solo contraviene los consejos de Apple, sino que le ofrece resultados poco satisfactorios.
Molestar al usuario con una ventana emergente en un momento aleatorio nunca será tan exitoso como pedirle en un momento apropiado, como cuando acaba de completar un nivel o crear un documento, y tiene esa cálida sensación de logro.
Siguiendo el consejo de Peter Johnson, creé una clase simple en la que puedes pegar el método en el lugar deseado de tu código y aparecerá en un lugar donde el usuario tuvo éxito.
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()
}
}
}
}
Para usarlo, coloque esto donde quiera que se llame y, con suerte, no se enoje a los usuarios con aleatoriedad.
ReviewUtility.sharedInstance.recordLaunch()
Para el objetivo - C:
Añadir StoreKit.framework
Luego en tu viewController.h
#import <StoreKit/StoreKit.h>
Luego en su función llame:
[SKStoreReviewController requestReview];
Para Swift
Añadir StoreKit.framework
En su ViewController.swift
import StoreKit
Luego en su función llame:
SKStoreReviewController.requestReview()
Eso es ! Apple se hará cargo de cuándo mostraría la calificación (al azar). Cuando está en desarrollo, será llamado cada vez que lo llames.
Editado: no es necesario verificar la versión del sistema operativo, StoreKit no se abrirá si el sistema operativo es inferior a 10.3, gracias a Zakaria.