使用谷歌分析与混合移动应用程序

时间:2013-03-10 16:25:26

标签: ios objective-c google-analytics ab-testing hybrid-mobile-app

我们正在将原生iPad应用转变为混合应用。一些功能和UI将保留在本机代码中,其他功能将以HTML格式实现,这些功能将从我们的服务器提供,也可以离线使用。

我现在遇到的主要问题是使用Google Analytics:
现有的本机代码使用适用于IOS的GA SDK,我计划在Web部件上使用Web API,但是我无法找到两个通道中的数据如何在GA中一起使用,因为数据存储似乎是不同的。

此外,我计划使用Google Analytics的内容实验进行A / B测试Web部件,但转换目标可能是在本机部分实现的。

任何人都有使用混合应用程序或替代解决方案的分析经验。

由于

3 个答案:

答案 0 :(得分:18)

您真的想要使用SDK。它具有一些功能,可以用于移动应用程序,如崩溃,游戏商店集成。它还可以批量发送数据以提高电池使用率,并且还可以在应用程序离线时将命中排队,以便在线时发送。您将无法使用Javascript实现模拟它。

所以你需要编写的是Javascript方法,它们将数据从WebView发送回应用程序的Native部分。 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,上面的适配器将其数据发送到APP的本机部分。然后,您只需编写将拦截该HTTP请求的本机部分,并使用本机SDK发布Google Analytics功能。

普通_gaq.push(['_trackPageview', '/homepage']);将变成类似analytics://_trackPageview?/homepage的uri,现在您只需要拦截并解析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;
}

我希望它给了你一个很好的起点。祝你好运。

答案 1 :(得分:1)

确实是具有挑战性的配置。

您是否考虑过将analytics.js(Universal Analytics)用于网络部分?然后,可能能够将数据提供到单个应用配置文件

否则,您可以使用Measurement Protocol的服务器端实现从后端发送所有跟踪调用,但您可能会放弃使用内容实验!

答案 2 :(得分:0)

我将http://www.flurry.com/用于我的应用,将Google Analytics用于其他内容。我从来没有在同一个应用程序中混合使用它们,但我猜它是可行的。我想先看看乱舞。混合应用程序也很有可能就足够了。