Вы действительно хотите использовать SDK. В нем есть некоторые функции, которые пригодится для мобильных приложений, таких как сбои, интеграция в хранилище игр. Он также отправляет данные партиями, чтобы улучшить использование батареи, а также может запускать очереди, пока приложение не отправляется в офлайн-режиме, когда он отправляется онлайн. Вы не сможете эмулировать это с помощью реализаций Javascript.
Так что вам нужно написать Javascript-методы, которые отправляют данные из WebView обратно в Родную часть приложения. This other Stack Overflow thread имеет более подробную информацию о том, как это сделать.
Таким образом, javascript для отслеживания взаимодействия Google Analytics может выглядеть примерно так.
var _gaq = {};
_gaq.push = function(arr){
var i, hit;
hit = arr.slice(1).join('&');
location.href = 'analytics://'+arr[0]+'?'+arr;
};
Теперь это будет работать в качестве замены для файла ga.js, вы можете использовать один и тот же API, как вы используете на _gaq сегодня на своем Web App, а адаптер выше, посылает свои данные т.е родной часть APP. И тогда вам просто нужно написать собственную часть, которая перехватит этот HTTP-запрос и использует собственный SDK для выдачи функций Google Analytics.
A нормальный _gaq.push(['_trackPageview', '/homepage']);
станет ури, как analytics://_trackPageview?/homepage
, теперь вам просто нужно перехватить и разобрать, что на Родной части.
- (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;
}
Надеюсь, он дал вам хорошую отправную точку. Удачи.
Вы когда-нибудь использовали шквал в гибридном приложении? Я пока не вижу поддержки в библиотеке, возможно, мне нужно выглядеть сложнее \ – Vineet