gpt4 book ai didi

ios - 像 Google Analytics 一样在 UIViewController 上跟踪用户使用时间和时间

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:04 25 4
gpt4 key购买 nike

跟踪应用程序使用时间和用户在应用程序本身内查看屏幕(或与 UIView 交互)所花费的时间的最佳方法是什么? Google Analytics 似乎做得很好,但我想在应用程序本身内部使用这些数字来解锁应用程序的项目和区域。

最佳答案

您可能会基于 Core Data 推出自己的解决方案,或者如果您的数据很小,您甚至可以考虑使用 NSDefaults。这是一个好的开始。它涉及拥有一个基本 View Controller ,您应该在每个要测量所花费时间的 View Controller 中继承它:

@interface BaseViewController : UIViewController

- (NSString *)screenKey;
+ (NSInteger)secondsInScreen:(NSString *)screenKey;

@end

该实现只是测量屏幕出现到消失之间的秒数。注意 appDidEnterForeground 和 appDidEnterBackground 通知非常重要。当您将应用程序发送到后台或返回前台时,不会调用 viewDidAppear 和 viewDidDisappear。

#import "BaseViewController.h"

@implementation BaseViewController {
NSDate *_startDate;
}

- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
}

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self startMeasuring];
}

- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self stopMeasuring];
}

- (void)appDidEnterBackground:(NSNotification *)not {
[self stopMeasuring];
}

- (void)appDidEnterForeground:(NSNotification *)not {
[self startMeasuring];
}

- (void)startMeasuring {
_startDate = [NSDate date];
}

- (void)stopMeasuring {
NSInteger secondsInScreen = ABS([_startDate timeIntervalSinceNow]);
[self addSecondsToScreen:secondsInScreen];
}

- (NSString *)screenKey {
// Subclasses must override this method
return @"";
}

- (void)addSecondsToScreen:(NSInteger)seconds {
NSString *key = [self screenKey];
if (key.length > 0) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber *s = [defaults objectForKey:key];
NSInteger addedSeconds = s.integerValue + seconds;
[defaults setObject:[NSNumber numberWithInteger:addedSeconds] forKey:[self screenKey]];
[defaults synchronize];
}
}

+ (NSInteger)secondsInScreen:(NSString *)screenKey {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber *s = [defaults objectForKey:screenKey];
return s.integerValue;
}

@end

您的子类必须重写 screenKey,为您要测量的每个屏幕重新调整唯一标识符。 BaseViewController 中有一个静态方法,可让您获得在每个屏幕上花费的秒数总和。

这是一种简单的方法。从设计的角度来看,最好将此信息存储在 Core Data 中并将 View Controller 逻辑与该数据的存储分开(静态方法 secondsInScreen 可能应该在另一个类中)。但这是一个良好的工作开端。

关于ios - 像 Google Analytics 一样在 UIViewController 上跟踪用户使用时间和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22885945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com