Il sistema di recensioni e votazioni dell’AppStore è uno strumento molto utilizzato dagli utenti, ma molto spesso criticato dagli sviluppatori. Avrebbe bisogno, secondo me, di una seria rivisitazione, che permetta anche ai developer di interagire con gli utenti… ma questi sono alti discorsi!
Vi sarà spesso capitato di aprire un’applicazione e vedervi comparire un pop-up come questo, che vi invita a lasciare una recensione dell’applicazione:

Quello mostrato in figura può sicuramente essere un buon modo per invogliare gli utenti a lasciare una recensione della nostra applicazione in AppStore, che spesso è necessaria per poter sopravvivere alla grandissima competizione presente nello store.
Per fare ciò viene in nostro aiuto una classe semplice ma davvero potente: Appirater, che potete scaricare gratuitamente direttamente da GitHub. Vediamo come usarla ed integrarla durante lo sviluppo delle nostre applicazioni iPhone e iPad.
Utilizziamo Appirater
Utilizzare questa classe è davvero semplicissimo. Iniziamo scaricando la classe Appirater e inserendola all’interno del nostro progetto XCode:

Aggiungiamo, inoltre, anche il framework “SystemConfiguration”, necessario per la corretta compilazione della classe:

A questo punto dobbiamo fare in modo che venga utilizzata, per esempio, all’avvio dell’applicazione, prima che l’utente possa eseguire qualsiasi altra interazione con la nostra app. Apriamo, quindi, il nostro file “AppDelegate”, e modifichiamolo nel seguente modo:
#import "Appirater.h"
@implementation Mia_ApplicazioneAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// definizioni e inizializzazioni varie
// ...
// avviamo il metodo della classe Appirater
[Appirater appLaunched];
return YES;
}
@end
Come vedete abbiamo aggiunto solo 2 istruzioni!! Alla riga 1 abbiamo importato la classe “Appirater.h”, mentre nel metodo “application: didFinishLaunchingWithOptions:” abbiamo richiamato il metodo “appLaunched” della classe Appirater. (non c’è bisogno di definire nessun elemento, la classe prevede un metodo statico che ci semplifica ulteriormente il lavoro).
Sarà la classe stessa che si occuperà di tutto: visualizzare il messaggio, controllare che sia passato un certo tempo dal precedente avviso e salvare la scelta dell’utente.
Per completare la configurazione apriamo il file “Appirater.h” e cambiamo il valore di “APPIRATER_APP_ID” con l’ID della nostra applicazione. Eccovi un esempio:
/*
Place your Apple generated software id here.
*/
#define APPIRATER_APP_ID 409332404 //Orologi di Classe PLUS
Abbiamo già concluso! Davvero velocissimo vero?
Modifichiamone il comportamento
Possiamo modificare alcuni aspetti del comportamento di questa classe. Per default l’avviso viene visualizzato se l’utente utilizza la nostra applicazione per 15 volte negli ultimi 30 giorni. Se queste impostazioni ci sembrano non corrette per la nostra applicazioni, ci basterà variarne il valore, sempre all’inteno di “Appirater.h”. Le due variabili in questioni sono:
#define APPIRATER_DAYS_UNTIL_PROMPT 30 // double
#define APPIRATER_USES_UNTIL_PROMPT 15 // integer
Sempre nello stesso file potrete inoltre cambiare il messaggio che appare, ad esempio traducendolo in italiano (oppure inserendo la possibilità di localizzarlo in base alla lingua del dispositivo).
Ultima opzione, se volete (ad esempio durante il test della vostra applicazione) che il messaggio appaia ad ogni avvio dell’applicazione dovrete settare a YES questo parametro (che trovate sempre nell’header file della classe Appirater):
/*
'YES' will show the Appirater alert everytime. Useful for testing how your message
looks and making sure the link to your app's review page works.
*/
#define APPIRATER_DEBUG YES
Spero che questo piccolo tutorial possa esservi utile, alla prossima! 😉









40 Responses to “T#096 – Facciamoci lasciare una recensione in App Store dalla nostra applicazione con Appirater”
15 Giugno 2011
DanimartialiceFantastico lo faccio subito! Grazie
15 Giugno 2011
diegobella chicca !!!!!
15 Giugno 2011
cursaoCiao,
molto interessante, possibile che non funzioni con la nuova release di xcode (per firmware 5.0)????
15 Giugno 2011
danielaciao Andrea, ho seguito tutto però ho un dubbio:
/*
Place your Apple generated software id here.
*/
#define APPIRATER_APP_ID 436689870/iBassotto
/*
Your app’s name.
*/
#define APPIRATER_APP_NAME [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]
/*
in questo secondo blocco come devo inserire il nome della mia app ?
…..anche perchè probabilmente, mancando, mi da questo errore:
Appirater.m
* undeclared (First use in this function) iBassotto undeclared…..
Sto usando XCODE 4 !….
Grazie
15 Giugno 2011
Andrea Busiciao, no, il tutorial è stato scritto e testato proprio con la beta 1 dell’SDK di iOS 5.
non devi inserire il nome della tua applicazione, ma solo il suo ID.
Nel tuo caso la stringa sarà:
senza il /iBassotto alla fine
15 Giugno 2011
danielaAh ok perfetto …. xò da che versione è supportato ? perchè si arrabbia ancora…
Undefined symbols for architecture armv6:
“_SCNetworkReachabilityCreateWithAddress”, referenced from:
-[Appirater(hidden) connectedToNetwork] in Appirater.o
“_SCNetworkReachabilityGetFlags”, referenced from:
-[Appirater(hidden) connectedToNetwork] in Appirater.o
ld: symbol(s) not found for architecture armv6
collect2: ld returned 1 exit status
:-((
15 Giugno 2011
Andrea Busidimenticanza mia, se non erro questa classe fa uso di Reachability, che a sua volta richiede il framework CFNetwork.
Aggiungilo al tuo progetto, vedrai che dovrebbe funzionare 😉
15 Giugno 2011
danielaAndrea …..:-( si arrabbia ancora …….
15 Giugno 2011
Andrea Busino forse ho sbagliato io, il framework da inserire è “SystemConfiguration”.. prova e fammi sapere! 😉
15 Giugno 2011
Davidefai un clean target e rifai il build.
15 Giugno 2011
danielaSIIIII ! Non da più errore… sul simulatore mi sembra di aver capito che però non si può testare … Vero ??
Grazie Andrea 😉
15 Giugno 2011
CursaoAndrea te l’ho chiesto perché mi da una montagna di errori, devo inserire un qualche framework?
15 Giugno 2011
Andrea Busisi, mi ero dimenticato di specificarlo nel tutorial. Il framework da inserire è “SystemConfiguration”, vedrai che poi funzionerà senza problemi 😉
15 Giugno 2011
LucaMa l’ID dell’applicazione posso ottenerlo solo dopo la pubblicazione?? dove trovo questo ID??
15 Giugno 2011
Andrea Busisi, lo ottieni solo dopo la pubblicazione dell’app. Lo trovi sia in iTunes Connect che nel link dell’AppStore dell’app
15 Giugno 2011
LucaTrovato… ma non mi compare nessun AlertView ne’ sul simulatore ne’ sul dispositivo…. #import aggiunto e [Appirater appLaunched]; aggiunta… l’app e’ in fase di pubblicazione, ma l’ID da iTunes Connect me lo da’ gia’… hai qualche idea sul non funzionamento??
16 Giugno 2011
Andrea Busisul simulatore è corretto che non funzioni. Sul device, invece, viene visualizzato a seconda della frequenza che hai impostato. Se vuoi visualizzarlo al primo avvio (come test) setta le due costanti a zero:
16 Giugno 2011
Antonioscusate ma sono nuovo in questo campo.
ma se l’id posso averlo dopo la pubblicazione come faccio ad integrare subito questa cosa?
è nato prima l’uovo o la gallina?
16 Giugno 2011
Andrea Busise non sbaglio l’ID ti viene assegnato appena crei una nuova app in iTunes Connect, quindi prima di sottomettere l’app.
16 Giugno 2011
LucaAh… avevo capito il senso di quelle #define alla rovescia…. cioè che non ti si visualizzava più quel messaggio dopo 30gg e dopo 15 volte che si aveva aperto l’app e non il viceversa!!
Scusa sono io che sono un po’ spento di testa!
Complimenti per il tutorial!!!
16 Giugno 2011
imperioliniCiao Andrea quando buildo l’app sull’iPhone mi esce questa cosa: http://imageshack.us/f/546/32849509.png/
16 Giugno 2011
giorgiooppure mettere a YES la modalità debug (ritorna sempre un YES in fase di checking)
#define APPIRATER_DEBUG YES
16 Giugno 2011
Andrea Busicontrolla l’ID dell’app che hai inserito, forse il tuo errore sta li..
16 Giugno 2011
Andrea Busigrazie mille, non mi ero accorto di questa opzione. L’ho appena inserita nel tutorial 😉
16 Giugno 2011
giorgioSe vuoi far
Ho visto che ci sono già tutorial inerenti la localizzazione su devapp, in questo caso nell’header durante la definizione dei messaggi / bottoni della alertView potete localizzare il vostro messaggio con (per esempio)
#define APPIRATER_MESSAGE NSLocalizedString(@”rate_body”, @””)
e localizzare rate_body in piu lingue, penso sia utile inserirlo nel tutorial.
16 Giugno 2011
LucaScusate, ma ho un errore sull’APPID; la mia app è ancora in fase di lavorazione e su iTunesConnect l’ID è un codice alfanumerico e non numerico e questo genera errore
16 Giugno 2011
Andrea Businon mi ricordo se l’AppID viene assegnato solo dopo l’approvazione dell’applicazione. Se fosse così purtroppo sei costretto ad implementare questa funzione solo con un aggiornamento successivo dell’app.
21 Giugno 2011
PiersoftAndrea, funziona tutto.
Per testarlo confermo di mettere a 0 le due variabili. l’AppID viene assegnato subito all’atto dell’invio dell’app in Appstore ma non puoi visualizzare ovviamente la sezione delle recensioni se prima l’app non è stata approvata.
Il framework necessario è System ect non altri.
24 Giugno 2011
ByterosComplimenti innanzitutto.
Ho una domanda…
Ma se l’utente recensisce l’app… il popup continuerà ad uscire ancora?
26 Giugno 2011
MarcelloPer byteros
Se risponde “no grazie” al pop-up, non viene più fuori fino all’upgrade dell’App.
Ciao
Marcello
25 Settembre 2011
andreaciao!
complimenti per il tutoria! Ho seguito le tue indicazioni tutto funziona ma… dopo il pop-up non mi parte più la mia app. Cosa sbaglio?
grazie
Andrea
29 Settembre 2011
Andrea BusiCiao!
Strano come comportamento, il pop-up non dovrebbe interrompere la normale esecuzione del programma. Se non trovi dove sia il problema puoi spostare il codice necessario dall’AppDelegate al primo ViewController che viene visualizzato, in questo caso non dovresti assolutamente aver problemi. Prova e fammi sapere 😉
19 Ottobre 2011
ema1972Ciao, come prima cosa grazie per il tutorial, ho uno stranissimo problema con la mia app se la esegue sul simulatore funziona alla perfezione, posso anche testare il pop-up se lo esegue su iPad o iPhone ricevo il messaggio di errore come se i framework non fossero lincati:
ld: warning: ignoring file /Users/XXX/YYY con l’iPad/PDF-Reader/SystemConfiguration.framework/SystemConfiguration, missing required architecture armv7 in file
“_SCNetworkReachabilityCreateWithAddress”, referenced from:
-[Appirater(hidden) connectedToNetwork] in Appirater.o
“_SCNetworkReachabilityGetFlags”, referenced from:
-[Appirater(hidden) connectedToNetwork] in Appirater.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
Potete aiutarmi, grazie
Emanuele
21 Ottobre 2011
Andrea BusiCiao, strano come problema. Prova a rimuovere il framework SystemConfiguration, a fare un Clean del progetto e poi a reinserire il framework, vediamo se migliora qualcosa..
13 Novembre 2011
ema1972Ciao per pigrizia ho provato un’altra soluzione che mi permetto di consigliare per la semplicità e la velocità di implementazione:
https://github.com/nicklockwood/iRate
sinceramente non saprei paragonarla ad Appirater ma il suo lavoro lo fa senza dover aggiungere particolare Framework
ciao
Ema
28 Novembre 2011
Andrea BusiGrazie della segnalazione. Non ho avuto modo nemmeno io di provarla, ma penso che in sostanza facciano la stessa cosa. Appena riesco la provo e faccio un confronto, grazie della segnalazione! 😉
12 Dicembre 2011
ByterosNon vorrei sbagliarmi ma credo che ci sia da fare una correzione.
Le due variabili hanno un significato diverso da come viene spiegato nel tutorial, ho interpretato in maniera diversa il commento in inglese che sta nel file .h :
#define APPIRATER_DAYS_UNTIL_PROMPT 30 // double
#define APPIRATER_USES_UNTIL_PROMPT 15 // integer
La prima variabile indica “quanti giorni devono passare prima che appaia il messaggio”
La seconda invece indica quante volte bisogna aprire l’app prima che appaia il messaggio.
Le due variabili sono in OR tra loro, nel senso che il messaggio apparirà o raggiunto/superato il num di giorni oppure raggiunto/superato il numero di volte in cui viene eseguita l’app.
Ho testato l’app e anche leggendo il codice credo di non sbagliarmi.
Cmq un ottimo tutorial, le utilizzerò spesso.
Grazie devapp.
7 Gennaio 2012
andreaciao scusa non ho chiaro questo passaggio
#define APPIRATER_APP_ID 436689870
-Ancora non pubblico l’app ….
29 Gennaio 2012
Andrea BusiCiao,
semplicemente vai in iTunes Connect e crei la tua applicazione, in modo che ti venga subito creato l’ID dell’applicazione. Poi potrai caricarla ed inviarla ad Apple per l’approvazione quando vorrai tu 😉
PS: casomai tieni questo passaggio alla fine, così vai sul sicuro..
16 Settembre 2012
FrancescoCiao scusate adesso il file appirater header e main sono leggermente diversi, io non sono molto pratico: potreste gentilmente aggiornare la vostra guida?
io non riesco ad impostarlo correttamente 🙁
grazie!!!