2013-07-01 10 views
9

C'è un modo per catturare tutti i tipi di interazioni dell'utente, ma in primo luogo premere i pulsanti in un'app per iOS? Sono interessato a registrare questi eventi con un timestamp e idealmente con il nome dello schermo su cui appaiono.Registra ogni pulsante premi/interazione in un'app per iOS

Immagino che il modo più semplice sia inserire una chiamata di una funzione di registro personalizzata in ogni azione chiamata da un pulsante. Ma è troppo sforzo.

Ho anche pensato di sottoclasse UIButton, ma questo sarebbe ancora mi richiede di cambiare ogni tasto in un app esistente e avrebbe funzionato solo per i pulsanti (non celle di una tabella, ad esempio).

C'è un punto in cui posso intercettare i tocchi in generale? O un punto in cui sapevo in particolare che un pulsante era stato premuto e ho un riferimento a quel pulsante?

(Eseguiamo ricerche sui test di usabilità delle app mobili, quindi miriamo a una soluzione modulare che possa essere facilmente riutilizzata e richieda il minor numero possibile di modifiche manuali del codice. Ma qualsiasi suggerimento è benvenuto, poiché mi rendo conto che potrebbe non essere così facile.)

+1

è così facile se si sottoclasse UIApplication, guarda la mia risposta ;-) – LombaX

risposta

12

È possibile creare una sottoclasse UIApplication:

  • Crea un UIApplication sottoclasse
  • l'override del metodo -(BOOL)sendAction:(SEL)action to:(id)target from:(id)sender forEvent:(UIEvent *)event, ricordarsi di chiamare il super implementazione
  • messo un altro codice diagnostico NSLog o dentro l'attuazione

Esempio: stampa un log ogni volta che viene premuto un UIButton:

-(BOOL)sendAction:(SEL)action to:(id)target from:(id)sender forEvent:(UIEvent *)event 
{ 
    if ([sender isKindOfClass:[UIButton class]]) 
    { 
     NSLog(@"Action: %@ - %@ - %@", NSStringFromSelector(action), target, sender); 
    } 

    return [super sendAction:action to:target from:sender forEvent:event]; 
} 


2013-07-08 14:46:18.270 UIApplicationSubclass[94764:c07] Action: anAction: - <ViewController: 0x76790a0> - <UIRoundedRectButton: 0x767b9b0; frame = (103 66; 73 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x767bad0>> 
2013-07-08 14:46:27.378 UIApplicationSubclass[94764:c07] Action: anAction: - <ViewController: 0x76790a0> - <UIRoundedRectButton: 0x767b9b0; frame = (103 66; 73 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x767bad0>> 

Inoltre, per creare una sottoclasse UIApplication, è necessario modificare il file main.m come questo (Nel mio caso la sottoclasse UIApplication è stato nominato FLApplication, guardare il terzo parametro della funzione UIApplicationMain e l'importazione di FLApplication.h)

#import "AppDelegate.h" 
#import "FLApplication.h" 

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, NSStringFromClass([FLApplication class]), NSStringFromClass([AppDelegate class])); 
    } 
} 
+0

Ottima idea, grazie – Stavash

1

Ciò che è esattamente necessario è Google Analytics. La registrazione di ogni interazione dell'utente non è il modo corretto. Puoi utilizzare google analytics per tenere traccia delle interazioni degli utenti all'interno della tua app.

+0

in realtà credo che non lo è. Voglio condurre studi che richiedono i dati grezzi e non una versione aggregata. Voglio controllare ciò che viene registrato e come viene analizzato. Ho bisogno di un set di dati separato per ogni utente con cui ho effettuato un test e l'ora esatta per combinarla con altre informazioni (schermate/registrazioni). – Christian

Problemi correlati