你真的很想使用 SDK。它有一些对移动应用程序来说很方便的功能,比如崩溃、游戏商店集成。它还可以批量发送数据以提高电池使用率,还可以在应用程序离线时将点击排队等待在线时发送。您将无法使用 Javascript 实现来模拟它。
因此,您需要编写的是将数据从 WebView 发送回 App 的 Native 部分的 Javascript 方法。This other Stack Overflow thread有更多关于如何做到这一点的细节。
所以跟踪 Google Analytics 交互的 javascript 可能看起来像这样。
var _gaq = {};
_gaq.push = function(arr){
var i, hit;
hit = arr.slice(1).join('&');
location.href = 'analytics://'+arr[0]+'?'+arr;
};
现在这将作为您的 ga.js 文件的替代品,您仍然可以在您的 Web 应用程序上使用与今天在 _gaq 上使用的 API 相同的 API,并且上面的适配器会将其数据发送到 APP 的本机部分。然后您只需要编写将拦截该 HTTP 请求并使用本机 SDK 发出 Google Analytics 函数的本机部分。
一个 normal_gaq.push(['_trackPageview', '/homepage']);
会变成一个 uri like analytics://_trackPageview?/homepage
,现在你只需要在 Native 部分拦截和解析它。
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = [request URL];
NSLog(@"Hit detected %@", url.absoluteString);
if ([[url scheme] isEqualToString:@"analytics"]) {
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
if ([url.host isEqualToString:@"_trackPageview"]) {
// Get the page from parameters and then track the native View.
// (...)
[tracker trackView:page];
}
else if ([url.host isEqualToString:@"_trackEvent"]) {
// Get the event parameters from url parameters and then track the native GA Event.
// (...)
[tracker trackEventWithCategory:cat
withAction:act
withLabel:lab
withValue:val];
}
// Check for all other analytics functions types
// (...)
// Cancel the request
return NO;
}
// Not an analytics: request.
return YES;
}
我希望它给了你一个好的起点。祝你好运。