0

我正在尝试使用 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];

然后statisticsFinished看起来像:

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

我得到的所有信息看起来都是正确的。Cookie 已设置,redirectcount 第一次为 1(因为它重定向到s.analytics.yahoo.com/itr.pl?....普通浏览器)。然后重定向计数为 0 用于后续请求,直到应用程序重新启动并清除会话。响应字符串返回GIF89a

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

我意识到 Flurry 是一个更好的选择,但在这种情况下我不得不使用 Yahoo。此外,使用 UIWebView 可能会起作用,但我反对仅出于跟踪目的而放入 webview。

ASIHTTPRequest 和 Safari 处理对简单 URL 的调用的方式有什么不同吗?或者您是否看到任何其他可以解释为什么跟踪不起作用的东西?

4

1 回答 1

2

我终于找到了问题所在。ASIHTTPRequest 根据您的应用程序名称创建一个用户代理,并且来自该用户代理的请求被雅虎以某种方式忽略(错误?)。如文档中所述,您可以按如下方式覆盖用户代理:

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

我在 iPhone 上使用了 Safari 的用户代理字符串,它立即起作用了!顺便提一句; 同样的问题适用于 Android,并且同样的修复工作。

于 2010-04-15T21:27:46.713 回答