Consigue reviews de 5 estrellas en el AppStore en menos de 10 minutos

Contenido del Bootcamp Dirigido por: | Última modificación: 2 de abril de 2024 | Tiempo de Lectura: 7 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Los usuarios de tu app no te dejan reviews en el App Store?

O peor aún: sí que lo hacen, pero para dejarte una estrellita cuando algo ha dejado de funcionar.

Lo tienes claro, te cuesta muchísimo que tus usuarios valoren tu aplicación, y sabes que hoy en día es fundamental tener buenas valoraciones para aumentar el número de descargas y mejorar la confianza percibida por el potencial usuario.

En este post voy a darte unos consejos sobre cómo y cuándo solicitar  una review a tus usuarios, y así plagar tu aplicación de valoraciones de 5 estrellas. También te dejo el video tutorial más abajo ⬇️

SKStoreReviewController (gracias Apple)

Antes de iOS 10 para solicitar una review teníamos que crear nuestros propios UIAlertViews o acudir a servicios de customer love, como por ejemplo, Apptentive.

Hoy en día ya no es necesario ya que Apple nos proporciona una clase de forma nativa. La clase se llama SKStoreReviewController y es la que vamos a utilizar en este video.

Pero antes de entrar en materia tenemos que conocer 2 peculiaridades sobre esta clase si queremos utilizarla correctamente y sacarle el mayor provecho:

  1. Esta clase sólo mostrará la solicitud al usuario 3 veces en un período de 365 días. Es decir, que aunque la quieras usar 100 veces, a partir de la tercera  dejará de aparecer hasta que se cumpla un año. 
  2. El sistema NO mostrará la alerta si cree que no ha pasado tiempo suficiente entre tu anterior solicitud y la nueva.

Teniendo en cuenta estas dos características, tienes que asegurarte de escoger perfectamente el timing a la hora de mostrar la alerta. Es decir, cuándo puedes estar (más o menos) seguro/a de que si solicitas una review, tus usuarios dejarán una valoración y ésta será muy buena.

Vamos a poner un ejemplo estúpido pero creo que efectivo: imagina que vives en el mundo de The Walking Dead, con los zombies o caminantes, y uno de ellos viene a por ti. Tienes una pistola con únicamente 3 balas. O aciertas en la cabeza con alguna, o estás muerto. ¿No intentarías asegurarte de que vas a acertar antes de malgastar tus balas?

The Walking Dead scene

¿Qué NO debes hacer?

Primero te voy a contar qué 3 cosas NO DEBERÍAS HACER JAMAS si no quieres malgastar tus balas:

  1. Ni pidas a tu user que valore tu app nada más abrir la aplicación. ¿No te ha pasado alguna vez que al descargar una app y abrirla por primera vez ya te solicitan una review? ¡Si ni siquiera me ha dado tiempo a probarla!
  2. No interrumpas al usuario. Imagina que estás escribiendo un mensaje de WhatsApp importante y, de repente, te aparece una alerta que te bloquea la aplicación hasta que dejes una valoración o le des a Cancelar. ¿No te molestaría que te interrumpiesen?
  3. No seas pesado. Si pides a tu usuario que te valore cada 2×3 tu app lo único que vas a conseguir es influir negativamente en la percepción que tiene sobre ésta. Y además, deberás esperar un año para tener una nueva oportunidad. 

¿Qué SÍ debes hacer?

Si quieres estar más o menos seguro de que al solicitar una valoración a tu usuario, éste te la deje y además sea una buena valoración (4 o más estrellas), debemos escoger el momento perfecto para hacerlo, y el tiempo necesario que debe transcurrir antes de solicitarla por primera vez o entre una solicitud y la siguiente.

a) Escoger el momento perfecto tras el cual solicitar una valoración:

Párate a pensar un par de minutos en el problema o problemas que soluciona tu app. Quédate con aquél en el que tu usuario siente la mayor satisfacción. Yo lo llamo, Momento de Mayor Satisfacción (MMS). Ese momento en el que tu usuario consigue aquello que fue a hacer a tu app. 

Como todo se entiende mejor con ejemplos, voy a darte 3 diferentes  dependiendo del tipo de aplicación.

  • En el caso de que tu app sea un juego, el Mayor Momento de Satisfacción (MMS) puede ser cuando el usuario pasa de nivel con éxito
  • Si es una aplicación bancaria, cuando el usuario realiza una transferencia con éxito
  • Vayamos a una aplicación bien conocida por todos: Airbnb. En este caso, el MMS será cuando el usuario reserva su alojamiento con éxito

¿Has visto qué palabra se repite en todos los ejemplos?

Éxito.

Localiza en tu app esos momentos de éxito y solicita la review SÓLO cuando tu usuario haya alcanzado el objetivo principal que fue a hacer a tu app.

b) Escoge el intervalo de tiempo adecuado

Ahora ya sabes que sólo debes solicitar la review tras ese momento éxtasis o Momento de Mayor Satisfacción (MMS) en tu app. Ahora deberías escoger cuánto tiempo vas a esperar para solicitar la review por primera vez, o cuánto tiempo debes dejar pasar hasta volver a solicitarla en caso de que tu usuario haya decidido no evaluarla en tu anterior intento. 

Como experiencia personal, tendrás más valoraciones de 5 estrellas si esperas hasta que tu usuario tenga cierto engagement con la aplicación. 

¿Qué es el engagement?

Engagement, en inglés, significa compromiso o noviazgo. En el mundo de las apps se suele utilizar cuando el usuario ha experimentado ese noviazgo, ese enganche hacia tu app. Ese momento de «oh dios mío qué genial es esta app».

En resumen, lo que tienes que hacer es combinar estos dos puntos y solicitar una review solamente cuando tenga ya cierto engagement y tras haber tenido una experiencia de éxito en la app.

Con ejemplos se entiende mejor: si se trata de un juego y el usuario pasa el primer nivel, probablemente todavía no tenga engagement suficiente como para querer valorar con 5 estrellas la aplicación. Sin embargo, si ya se ha pasado varios niveles, puedes suponer que sí lo tiene. En ese momento, cuando se pase el siguiente nivel, le solicitas la valoración. 

Manos al teclado: Xcode

Vamos a construir una aplicación de Reserva de alojamientos, tipo Airbnb.

Lo primero que hay que hacer es definir los eventos que vamos a utilizar para calcular cuándo mostrar la alerta. En este caso, el MMS o Momento de Mayor Satisfacción que he elegido es cuando el usuario reserve correctamente una casa. Para medir el engagement, voy a utilizar el número de veces que el usuario abre la aplicación.


enum ReviewEvent: String {
    case bookHouse
    case launchApp
}

Lo siguiente que necesito es un objeto que me permita guardar y leer el número de veces que ocurre cada evento. Para ello creo un protocolo llamado ReviewManagerProtocol:


protocol ReviewManagerProtocol {
    func log(_ event: ReviewEvent) // Write
    func count(of event: ReviewEvent) -> Int // Read
}

Para la implementación del ReviewManager elegí UserDefaults como mecanismo de persistencia, aunque tú puedes escoger el que quieras. Gracias a haberlo creado como un protocolo, los detalles de implementación quedarán ocultos y si en el futuro decidimos cambiar UserDefaults por MySQL, Realm, CoreData u otro, no tendremos que cambiar ni una sóla linea de código allá donde usemos nuestro ReviewManager ?.


final class ReviewManager: ReviewManagerProtocol {
    // UserDefaults as persistence engine
    private let engine = UserDefaults.standard
    
    // MARK: - ReviewManagerProtocol
    // Write
    func log(_ event: ReviewEvent) {
        let current = count(of: event)
        engine.set(current + 1, forKey: event.rawValue)
    }
    // Read    
    func count(of event: ReviewEvent) -> Int {
        return engine.integer(forKey: event.rawValue)
    }
}

La app de prueba tendrá únicamente un ViewController que muestra el detalle de un alojamiento y tiene un botón para reservarlo.

ViewController

Ahora vamos a utilizar la clase ReviewManager en nuestro ViewController, y medir o trackear los eventos que hemos definido. Lo ideal, sería inyectar el ReviewManager mediante el método init de nuestro controlador, aunque para no despistar del objetivo principal del post, vamos a instanciarlo directamente.


final class ViewController: UIViewController {

    private let reviewManager: ReviewManagerProtocol = ReviewManager()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Log the number of times the app is launched
        reviewManager.log(.launchApp)
    }

    @IBAction func bookHouse(_ sender: Any) {
        // Log the number of times a house is booked
        reviewManager.log(.bookHouse)         
    }
    
}

Ahora que ya mido los eventos que utilizaré para lanzar la solicitud de review, es hora de definir el momento ideal. Para ello, voy a combinar las dos recomendaciones que os expliqué más arriba: esperaré a que el usuario tenga cierto engagement y lanzaré la solicitud después del momento de éxito (después de que reserve la casa satisfactoriamente).

Voy a suponer que el usuario ya tiene engagement cuando utiliza 3 veces la app (.launchApp), y tras la primera reserva con éxito (.bookHouse) le voy a mostrar la alerta. Ten en cuenta que para tu app estos números pueden ser mucho mayores. En el método bookHouse(sender:) añado:


@IBAction func bookHouse(_ sender: Any) {
        // Log the number of times a house is booked
        reviewManager.log(.bookHouse)
        
        // Check if the prompt should be displayed
        let launchedCount = reviewManager.count(of: .launchApp)
        let bookedCount = reviewManager.count(of: .bookHouse)
        
        if launchedCount > 3 && bookedCount > 1 {
            SKStoreReviewController.requestReview()
        } 
    }

Si el usuario decide no dejar una review esta vez, debemos esperar un cierto tiempo antes de volver a enviar el mensaje SKStoreReviewController.requestReview(). Para ello, vamos a añadir un método a nuestro ReviewManagerProtocol para resetear la cuenta de un determinado evento. En nuestro caso, resetearemos el .launchApp.


protocol ReviewManagerProtocol {
    func log(_ event: ReviewEvent)
    func count(of event: ReviewEvent) -> Int
    func reset(_ event: ReviewEvent)
}

final class ReviewManager: ReviewManagerProtocol {
    
    ...

    func reset(_ event: ReviewEvent) {
        engine.set(0, forKey: event.rawValue)
    }
}

Y utilizamos este nuevo método en el método bookHouse(sender:) tras haber mostrado la alerta:


@IBAction func bookHouse(_ sender: Any) {
        // Log the number of times a house is booked
        reviewManager.log(.bookHouse)
        
        // Check if the prompt should be displayed
        let launchedCount = reviewManager.count(of: .launchApp)
        let bookedCount = reviewManager.count(of: .bookHouse)
        
        if launchedCount > 2 && bookedCount > 0 {
            SKStoreReviewController.requestReview()
            
            // Reset the number of times the app is launched
            reviewManager.reset(.launchApp)
        } 
    }

Si el usuario ha utilizado la app por lo menos 3 veces y logra reservar con éxito un alojamiento, el sistema le preguntará si quiere dejarnos una review en el AppStore.

«Fórmula 5 estrellas» GRATUITA

Hay ocasiones en las que calcular correctamente los valores de umbral es difícil, especialmente el de de launchApp.

Y lo que ocurre es que solemos gastar nuestras balas muy rápido, cuando el usuario no siente todavía ese enganche suficiente hacia nuestra app como para querer dejarnos una valoración. Por ello, he creado una fórmula para calcular estos valores y que os sirvan de referencia.

La fórmula os la podéis descargar TOTALMENTE GRATIS.

⬇️ Video tutorial completo

Conclusión

Con la clase SKStoreReviewController es realmente sencillo solicitar una review. No tenemos que crear nuestra propia alerta ni obligar al usuario a abandonar la app para valorar la aplicación. Con una única linea de código, Apple hace todo por nosotros.

No obstante, hemos visto las limitaciones de esta clase. Por lo que es muy conveniente elegir cuándo utilizar el método requestReview() si queremos «asegurarnos» que el usuario quiera dejarnos una review, y que ésta sea positiva.

¿Y tú? ¿Qué otra estrategia utilizas para mejorar las valoraciones de tus apps? Cuéntamelo en los comentarios ?

Alexandre es Software developer e instructor iOS en el Mobile Bootcamp Engineering de KeepCoding.

Aunque puedas haberlo visto impartiendo cursos de Android o de Ruby On Rails en el pasado, ahora está completamente enfocado en el desarrollo iOS, publicando artículos en su página web, o subiendo videos a su canal de YouTube. Alexandre vendió su propia startup (Apparcar) cuando tenía tan sólo 25 años, y según palabras textuales, su intención es «que no sea la última».

También puedes seguir a Alexandre en Twitter en @xandrefreire

Post original escrito en alexandrefreire.com

Si tienes algo que deseas compartir o quieres formar parte de KeepCoding, escríbenos a [email protected].

Posts más leídos