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

Var*_*ant 15 google-analytics objective-c ab-testing ios hybrid-mobile-app

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

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

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

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

谢谢

Edu*_*rdo 18

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

所以你需要编写的是Javascript方法,它们将数据从WebView发送回应用程序的Native部分.这个其他Stack Overflow线程有关于如何执行此操作的更多详细信息.

因此,跟踪Google Analytics互动的JavaScript可能看起来像这样.

var _gaq = {};
_gaq.push = function(arr){
  var i, hit;
  hit = arr.slice(1).join('&');
  location.href = 'analytics://'+arr[0]+'?'+arr;
};
Run Code Online (Sandbox Code Playgroud)

现在,这将作为ga.js文件的替代品,您仍然可以使用与Web应用程序上的_gaq上使用的相同的API,上面的适配器将其数据发送到APP的本机部分.然后,您只需编写将拦截该HTTP请求的本机部分,并使用本机SDK发布Google Analytics功能.

正常_gaq.push(['_trackPageview', '/homepage']);将变成uri 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;
}
Run Code Online (Sandbox Code Playgroud)

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