2010-04-14 51 views
0

J'essaie de suivre un événement dans mon application à l'aide de Yahoo Web Analytics. Le code J'utilise ressembleSuivi de l'iPhone sur Yahoo Web Analytics à l'aide de ASIHTTPRequest

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]; 

Alors le statisticsFinished ressemble:

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

Et toutes les informations que je reçois regarde en arrière correcte. Les cookies sont définis, redirectcount vaut 1 la première fois (car il redirige vers s.analytics.yahoo.com/itr.pl?.... un navigateur normal). Ensuite, le compte redirect est 0 pour la requête suivante jusqu'à ce que l'application soit redémarrée et la session effacée. Le responseString renvoie GIF89a.

Même si les données semblent correctes, Yahoo ne suivra toujours pas. Dès que j'appelle l'URL de suivi directement dans mon navigateur, cela fonctionne comme prévu. Je réalise que Flurry est une meilleure option, mais je suis obligé d'utiliser Yahoo dans ce cas. En outre, l'utilisation d'un UIWebView fonctionnerait probablement, mais je suis contre la mise en place d'un webview à des fins de suivi.

Existe-t-il une différence dans la façon dont ASIHTTPRequest et Safari traiteraient un appel à une URL simple comme ceci? Ou voyez-vous autre chose qui pourrait expliquer pourquoi le suivi ne fonctionne pas?

Répondre

2

J'ai finalement trouvé le problème. ASIHTTPRequest crée un user-agent basé sur le nom de votre application, et les requêtes de cet agent utilisateur sont ignorées par Yahoo (bug?). Comme il est indiqué dans la documentation, vous pouvez remplacer l'agent utilisateur comme suit:

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

J'utilise la chaîne de l'agent utilisateur de Safari sur iPhone, et cela a fonctionné immédiatement! BTW; le même problème s'applique pour Android, et le même correctif fonctionne.