ARAnalytics 是 iOS 中的 Analytical,Ruby 中的 JavaScript 中的 Analytics.js。
ARAnalytics 是一个分析抽象库,提供了一个合理的 API 来跟踪事件和用户数据。它目前支持 iOS 上的:Mixpanel、Localytics、Flurry、GoogleAnalytics、KISSmetrics、Crittercism、Crashlytics、Fabric、Bugsnag、Countly、Helpshift、Tapstream、NewRelic、Amplitude、HockeyApp、HockeyAppLib、ParseAnalytics、HeapAnalytics、Chartbeat、UMengAnalytics、Librato、Segmentio、Swrve、YandexMobileMetrica、Adjust、AppsFlyer、Branch、Snowplow、Sentry、Intercom、Keen、Adobe 和 MobileAppTracker/Tune。对于 OS X:KISSmetrics、Mixpanel 和 HockeyApp。
它通过使用 CocoaPods 子规范来实现这一点,让您选择您想使用的库。您也可以使用任何提供程序的官方 API。此外,它还附带一个惊人的 DSL 来清晰您的代码。
您不应该只使用:`pod "ARAnalytics"`。从 CocoaPods 0.36+ 开始,您应该做一些类似以下的事情
pod "ARAnalytics", :subspecs => ["Mixpanel", "Segmentio", "HockeyApp"]
一旦您安装了库,您可以使用个别方法(例如)[ARAnalytics setupTestFlightWithTeamToken:@"TOKEN"]来启动每个分析平台,或者使用我们的常量使用通用的 setupWithAnalytics。
[ARAnalytics setupWithAnalytics:@{
ARCrittercismAppID : @"KEY",
ARKISSMetricsAPIKey : @"KEY",
ARGoogleAnalyticsID : @"KEY"
}];
提交存储在在线控制台中的控制台日志,对于崩溃报告,这提供了一种提供跟踪的方法。`ARLog(@"Looked at Artwork (%@)", _artwork.name);`
extern void ARLog (NSString *format, ...);
/// Submit user events
+ (void)event:(NSString *)event;
+ (void)event:(NSString *)event withProperties:(NSDictionary *)properties;
// Add extra properties to get sent along with every event
+ (void)addEventSuperProperties:(NSDictionary *)superProperties;
/// Let ARAnalytics deal with the timing of an event
+ (void)startTimingEvent:(NSString *)event;
+ (void)finishTimingEvent:(NSString *)event;
/// Submit errors to providers
+ (void)error:(NSError *)error;
+ (void)error:(NSError *)error withMessage:(NSString *)message;
/// Set a per user property
+ (void)identifyUserWithID:(NSString *)userID andEmailAddress:(NSString *)email;
+ (void)setUserProperty:(NSString *)property toValue:(NSString *)value;
+ (void)incrementUserProperty:(NSString*)counterName byInt:(int)amount;
/// Monitor Navigation changes as page view
+ (void)pageView:(NSString *)pageTitle;
+ (void)monitorNavigationViewController:(UINavigationController *)controller;
除此之外,您还可以使用原始SDK。ARAnalytics为许多提供者提供了一个通用API,因此它会尝试在提供者之间映射大部分功能,但如果您要执行复杂操作,也请期待使用您提供商的SDK。
在ARAnalytics/DSL
子规范中还有一个类似于DSL的设置构造器,让您一次完成所有分析设置。例如使用方法
[ARAnalytics setupWithAnalytics: @{ /* keys */ } configuration: @{
ARAnalyticsTrackedScreens: @[ @{
ARAnalyticsClass: UIViewController.class,
ARAnalyticsDetails: @[ @{
ARAnalyticsPageNameKeyPath: @"title",
}]
}],
ARAnalyticsTrackedEvents: @[@{
ARAnalyticsClass: MyViewController.class,
ARAnalyticsDetails: @[ @{
ARAnalyticsEventName: @"button pressed",
ARAnalyticsSelectorName: NSStringFromSelector(@selector(buttonPressed:)),
},
@{
ARAnalyticsEventName: @"switch switched",
ARAnalyticsSelectorName: NSStringFromSelector(@selector(switchSwitched:)),
}]
},
...
上述配置指定,当在MyViewController
的任何实例上调用选择器buttonPressed:
时,将发送“按钮按下”事件。此外,每当调用viewDidAppear:
时,每个视图控制器都会发送一个带有其标题的页面视图作为页面名称。在DSL中,还可以使用块进行高级用法,选择性禁用某些事件,提供自定义页面/事件属性字典,或者提供动态页面/事件名称。
[ARAnalytics setupWithAnalytics: @{ /* keys */ } configuration: @{
ARAnalyticsTrackedScreens: @[ @{
ARAnalyticsClass: UIViewController.class,
ARAnalyticsDetails: @[ @{
ARAnalyticsProperties: ^NSDictionary*(MyViewController *controller, NSArray *parameters) {
return @{ /* Custom screen view properties */ };
},
ARAnalyticsPageNameBlock: ^NSDictionary*(MyViewController *controller, NSArray *parameters, NSDictionary *customProperties) {
return [NSString stringWithFormat:@"%@:%@:%@",controller.a, controller.b, controller.c];
}
}]
}],
ARAnalyticsTrackedEvents: @[ @{
ARAnalyticsClass: MyViewController.class,
ARAnalyticsDetails: @[
@{
ARAnalyticsSelectorName: NSStringFromSelector(@selector(buttonPressed:)),
ARAnalyticsShouldFire: ^BOOL(MyViewController *controller, NSArray *parameters) {
return /* some condition */;
},
ARAnalyticsProperties: ^NSDictionary*(MyViewController *controller, NSArray *parameters) {
return @{ /* Custom properties */ };
},
ARAnalyticsEventNameBlock: ^NSDictionary*(MyViewController *controller, NSArray *parameters, NSDictionary *customProperties) {
return [NSString stringWithFormat:@"%@ pressed", [(UIButton*)parameters[0] titleLabel].text];
}
},
/* more events for this class */
]
},
...
请注意,当在UIViewControllers
上使用页面跟踪时,所有实例的title
属性必须具有非nil
值。如果您的应用程序使用嵌套视图控制器,则可能不是这种情况。在这种情况下,请使用ARAnalyticsShouldFire
块来禁用这些视图控制器发送分析事件。
ARAnalyticsShouldFire: ^BOOL(MyViewController *controller, NSArray *parameters) {
return controller.title != nil;
},
从HockeyApp版本3.7.0开始,HockeyApp提供者将自动记录事件并将它们包括在崩溃报告中,从而向报告添加“面包屑”,以便在崩溃报告中提供有用的上下文。使用ARLog()
记录的任何消息也将包含在报告中。
但是请注意,在iOS中,syslogd
不会长期保留日志,因此您只需期望应用程序崩溃后立即重新启动应用程序的人的日志。
iOS: Mixpanel
、Localytics
、Flurry
、GoogleAnalytics
、Firebase
、KISSmetrics
、Crittercism
、Countly
、Bugsnag
、Helpshift
、Tapstream
、NewRelic
、Amplitude
、HockeyApp
、HockeyAppLib
、ParseAnalytics
、HeapAnalytics
、Chartbeat
、UMengAnalytics
、Segmentio
、Swrve
、YandexMobileMetrica
、Adjust
、Intercom
、Librato
、Crashlytics
、Fabric
、AppsFlyer
、Branch
、Snowplow
、Sentry
、Keen
、Adobe
、MobileAppTracker
、Leanplum
和Appboy
。
OSX: KISSmetricsOSX
、HockeyAppOSX
、MixpanelOSX
和ParseAnalyticsOSX
。
请参阅贡献