我修复了一个关键的错误,该错误阻止了框架真正调用 Google 分析服务器。这个错误发生在几乎所有 10.6 版本的安装上,但不在 10.8 上,这是由于 cocoa 的 WebView 类的行为在操作系统版本之间发生的非常轻微的变化而造成的,我误判了。
Objective-C Cocoa 包装器,用于 JavaScript Google 分析跟踪。
Google 没有适用于 Google 分析跟踪的 macOS SDK。它有一个 Android SDK,但没有源代码。它有一个 iOS SDK,但也没有源代码。所有这些都是在 arm 上预编译的,我没有看到在 macOS 上使用的任何方法。所以我留下了可用于嵌入任何网站并在任何自定义场景下使用的 JavaScript Tracker。
通过我在 @doo 的工作,我编写了一个框架,该框架提供了一个 GAJavaScriptTracker objective-c 类来包装这个 JavaScript,并提供了易于使用的接口,以尝试模拟来自 Google 的 GATracker iOS 类。
它通过辅助类 GAJSWebViewEngine、略微修改的 GoogleAnalytics JavaScript 以及一个加载 JS 的基本 HTML 文件来实现。
注意:此类不是功能完整。它专门针对 doo 应用的 GA 需求定制,并也打算作为从 Cocoa 使用 JS SDK 的示例。(如果 Google 有朝一日决定将 iOS SDK 移植到 macOS,我很支持。)
该框架附带了一个小型演示应用程序,您可以用它来测试追踪器的可用功能。
+(id)trackerWithAccountID:(NSString *)accountID;
This method tries to find a tracker for the specified Google Analytics account ID (the string that begins with "UA-") in an internal List. If no tracker for that ID is up, it inits a new one
-(void)start;
starts this tracker
-(void)stop;
stops this tracker, flushing any calls left
@property(readonly) NSString *accountID;
the account ID
@property(readonly,getter = isRunning) BOOL running;
is the tracker running?
@property(nonatomic) NSUInteger batchSize;
use batching of requests. size<=1 = no batching
It defaults to 0.
@property(nonatomic) NSTimeInterval batchInterval;
the max interval for dispatching batches. It defaults to 0.
@property(readwrite) BOOL debug;
If the debug flag is set, debug messages will be written to the log.
It is useful for debugging calls to the Google Analytics SDK.
By default, the debug flag is disabled.
@property(readwrite) BOOL dryRun;
If the dryRun flag is set, hits will not be sent to Google Analytics.
It is useful for testing and debugging calls to the Google Analytics SDK.
By default, the dryRun flag is disabled.
@property(readwrite) BOOL anonymizeIp;
If the anonymizeIp flag is set, the SDK will anonymize information sent to Google Analytics by setting the last octet of the IP address to zero prior to its storage and/or submission.
By default, the anonymizeIp flag is disabled. Currently only takes effect if the the tracker has not been started yet.
以下两个方法会导致向 Google Analytics 发送请求。直接发送或 - 如果启用了批处理 - 通过队列中的 JavaScript 调用发送。
-(BOOL)trackPageview:(NSString )pageURL withError:(NSError *)error;
Track a page view. Returns YES on success or NO on error.
Note that trackPageview will prepend a '/' character if pageURL doesn't start with one.
-(BOOL)trackEvent:(NSString )category action:(NSString *)action label:(NSString *)label value:(NSInteger)value withError:(NSError *)error;
Track an event. The category and action are required. The label and value are optional (specify nil for no label and -1 or any negative integer for no value). Returns YES on success or NO on error.
通过额外的预处理器宏可配置,当从源代码构建框架时
DEFAULT_BATCH_INTERVAL :: 浮点数
default value: 5.0
FREE_WEBVIEW_AFTER_BATCH :: 布尔值
default value: 0
DEBUG_WEBVIEW_ENGINE :: 布尔值
default value: 0