Журнал каждого нажатия кнопки / взаимодействия в приложении для 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 для отслеживания взаимодействия пользователей в вашем приложении.