Журнал каждого нажатия кнопки / взаимодействия в приложении для iOS

Есть ли способ отловить все виды взаимодействия с пользователем, но в первую очередь нажатия кнопок в приложении для iOS? Я заинтересован в регистрации этих событий с отметкой времени и в идеале с названием экрана, на котором они появляются.

Я предполагаю, что самый простой способ - вставить вызов пользовательской функции журнала в каждое действие, вызываемое кнопкой. Но это слишком много усилий.

Я также думал о создании подклассов UIButton, но это все равно потребует от меня изменения каждой кнопки в существующем приложении и будет работать только для кнопок (не ячеек в таблице, например).

Есть ли смысл, где я могу перехватить касания в целом? Или какой-то момент, когда я знал, что кнопка была нажата, и у меня есть ссылка на эту кнопку?

(Мы исследуем юзабилити-тестирование мобильных приложений, поэтому нацелены на модульное решение, которое можно легко использовать повторно и которое требует как можно меньше ручных изменений кода. Но любые предложения приветствуются, поскольку я понимаю, что это может быть не так просто.)

2 ответа

Решение

Вы можете создать подкласс UIApplication:

  • Создайте подкласс UIApplication
  • переопределить -(BOOL)sendAction:(SEL)action to:(id)target from:(id)sender forEvent:(UIEvent *)event метод, не забудьте вызвать супер реализацию
  • положить NSLog или другой диагностический код внутри реализации

Например, это будет печатать журнал каждый раз при нажатии кнопки UIB:

-(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>>

Более того, чтобы создать подкласс UIApplication, вы должны изменить файл main.m следующим образом (в моем случае подкласс UIApplication был назван FLApplication, посмотрите на третий параметр функции UIApplicationMain и импорт 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]));
    }
}

Что именно вам нужно, так это Google Analytics. Регистрация каждого взаимодействия с пользователем не является правильным способом. Вы можете использовать Google Analytics для отслеживания взаимодействия пользователей в вашем приложении.

Другие вопросы по тегам