2011-04-20 36 views
0

呼应PHP文本我有一个网站,返回的access_token(即脸谱)。iPhone/Objective-C的 - 从检索的UIWebView

redirect_uri has已更改为指向我的Web服务器上的PHP文件。 PHP代码简单地响应用户离线的Facebook access_token页面。

什么是抓住这个access_token所以我可以将它内NSUserDefaults存储的最佳方式?

我假设我需要使用UIWebView的:

[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];

在某些方式或形式?

任何帮助将不胜感激。

回答

2

不要使用网页视图!它消耗资源并且为此目的很慢。

利用类似ASIHttpRequest的框架来触发http获取请求或使用Apple的NSURLConnection。你甚至可以考虑使用HTTPS在一些安全带上。

+0

100%同意这一点。在这种情况下使用UIWebView非常糟糕。 ASIHttpRequest是前进的方向。 – 2011-04-20 08:20:24

+0

我结束了这个解决方案。感谢所有的帮助。 – fuzz 2011-04-21 14:40:18

1

虽然我同意你不应该使用UIWebView做到这一点。回答你的问题。

NSString *theHTML = [_webView stringByEvaluatingJavaScriptFromString:@"document.body.innerText"]; 

在你使用之前,我建议你尽可能使用下面的解决方案。

NSString *theHTML = [NSString stringWithContentsOfURL:[NSURL URLWithString:url]]; 

UPDATE: 艾伦Zeino指出,使用stringWithContentsOfURL:不是很理想。所以我提供了另一种异步的解决方案。我的解决方案假定一切都会工作你必须实现错误处理和数据重用机制。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    // self.data is a NSMutableData property 
    [self.data appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSString *theHTML = [[[NSString alloc] initWithData:self.data encoding:NSASCIIStringEncoding] autorelease]; 
    self.data = nil; 
    // TODO: Its up to you now how you want to handle the HTML. 
} 

要执行请求,请使用此操作。

NSURLRequest *theURLRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; 
NSURLConnection *theURLConnection = [[[NSURLConnection alloc] initWithRequest:theURLRequest delegate:self startImmediately:YES] autorelease]; 
+2

您提供的第二种解决方案并不理想; 'stringWithContentsOfURL'是一种同步方法,同步方法在网络环境中使用时非常糟糕。他/她应该使用异步NSURLConnection。 – 2011-04-20 07:56:50

+0

尽管如此,你不希望你的系统挂起。我将用一个使用NSURLConnection的方法进行更新。感谢您指出。 – lxcid 2011-04-20 08:00:01

+0

我很惊讶得到了一个可以解决几乎所有相关问题的3种不同的代码和解决方案。如果下来的选民可以解释他不满意的地方,我会改进我的回答。谢谢。 – lxcid 2011-04-20 08:53:07