代码之家  ›  专栏  ›  技术社区  ›  Mads Mobæk

使用asihttprequest在雅虎网络分析上跟踪iphone

  •  0
  • Mads Mobæk  · 技术社区  · 14 年前

    我正在尝试使用Yahoo Web Analytics跟踪我的应用程序中的事件。我使用的代码看起来像

    ASIHTTPRequest *yahooTrack = [ASIHTTPRequest requestWithURL:
        [NSURL URLWithString:@"http://s.analytics.yahoo.com/p.pl?a=xxxxxxxxxxxxx&js=no&b=yyyyyyyyyyyy&cf6=zzzzzzzzzzz"]];
    yahooTrack.didFinishSelector = @selector(statisticsFinished:);
    yahooTrack.delegate = self;
    [yahooTrack startAsynchronous];
    

    然后统计数据显示:

    NSLog(@"Cookies: %@", request.requestCookies);
    NSLog(@"Redircount: %d", [request redirectCount]);
    NSLog(@"Responsecode %d %@\nMsg: %@", request.responseStatusCode, 
        request.responseStatusMessage, [request responseString]);
    

    我得到的所有信息看起来都是正确的。Cookie已设置,第一次重定向计数为1(当它重定向到 s.analytics.yahoo.com/itr.pl?.... 一个普通的浏览器可以)。在应用程序重新启动并清除会话之前,后续请求的重定向计数为0。负责人回来了 GIF89a .

    即使数据看起来是正确的,雅虎仍然不会追踪。只要我在浏览器中直接调用跟踪url,它就会按预期工作。

    我意识到flurry是一个更好的选择,但在这种情况下我不得不使用雅虎。另外,使用uiwebview可能会奏效,但我反对仅仅出于跟踪目的而使用webview。

    asihttprequest和safari处理这样一个简单url的调用有什么不同吗?或者你有没有看到其他的东西可以解释为什么跟踪不起作用?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Mads Mobæk    14 年前

    我终于发现了问题。asihttprequest基于您的应用程序名创建一个用户代理,来自这个用户代理的请求不知怎么被yahoo忽略了(bug?)。如文档中所述,可以按如下方式覆盖用户代理:

    [request addRequestHeader:@"User-Agent" value:@"My-User-Agent-1.0"];

    我在iphone上使用了safari的用户代理字符串,它立即生效了!顺便说一句,同样的问题也适用于android,同样的修复方法也适用。