创建 facebook Appid Facebook Appid 创建链接创建时间遵循 facebook 指南,您必须在注册时提供捆绑标识符![在 **plist** 中提供 Facebook appid 信息,如打击图像](https://i.stack.imgur.com/dYAHJ.png)
然后使用此代码
@interface LoginViewController : UIViewController<UIWebViewDelegate>
@property(nonatomic,retain)UIWebView *webview;
@property (nonatomic, retain) NSString *accessToken;
@property(nonatomic,retain)UIActivityIndicatorView *FbActive;
@end
@interface LoginViewController ()
@end
@implementation LoginViewController
@synthesize accessToken,webview,FbActive;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
//Removeing the UIWebview Cookies
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
[storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(IBAction)fbLoginPage:(UIButton *)sender1
{
NSString *facebookClientID =facebookAppId;
NSString *redirectUri = @"http://www.facebook.com/connect/login_success.html";
NSString *extended_permissions=@"user_photos,user_videos,publish_stream,offline_access,user_checkins,friends_checkins,email";
NSString *url_string = [NSString stringWithFormat:@"https://graph.facebook.com/oauth/authorize?client_id=%@&redirect_uri=%@&scope=%@&type=user_agent&display=touch", facebookClientID, redirectUri, extended_permissions];
NSURL *url = [NSURL URLWithString:url_string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
CGRect webFrame =[self.view frame];
webFrame.origin.y = 0;
UIWebView *aWebView = [[UIWebView alloc] initWithFrame:webFrame];
[aWebView setDelegate:self];
self.webview = aWebView;
self.FbActive = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.FbActive.color=[UIColor darkGrayColor];
self.FbActive.center = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height / 2);
[self.FbActive startAnimating];
[webview loadRequest:request];
[self.webview addSubview:self.FbActive];
[self.view addSubview:webview];
}
- (void)webViewDidFinishLoad:(UIWebView *)_webView {
/**
* Since there's some server side redirecting involved, this method/function will be called several times
* we're only interested when we see a url like: http://www.facebook.com/connect/login_success.html#access_token=..........
*/
//get the url string
[self.FbActive stopAnimating];
NSString *url_string = [((_webView.request).URL) absoluteString];
//looking for "access_token="
NSRange access_token_range = [url_string rangeOfString:@"access_token="];
//looking for "error_reason=user_denied"
NSRange cancel_range = [url_string rangeOfString:@"error_reason=user_denied"];
//it exists? coolio, we have a token, now let's parse it out....
if (access_token_range.length > 0) {
//we want everything after the 'access_token=' thus the position where it starts + it's length
int from_index = access_token_range.location + access_token_range.length;
NSString *access_token = [url_string substringFromIndex:from_index];
//finally we have to url decode the access token
access_token = [access_token stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//remove everything '&' (inclusive) onward...
NSRange period_range = [access_token rangeOfString:@"&"];
//move beyond the .
access_token = [access_token substringToIndex:period_range.location];
//store our request token....
self.accessToken = access_token;
//remove our window
// UIWindow* window = [UIApplication sharedApplication].keyWindow;
// if (!window) {
// window = [[UIApplication sharedApplication].windows objectAtIndex:0];
// }
[self.webview removeFromSuperview];
self.webview=nil;
//tell our callback function that we're done logging in :)
// if ( (callbackObject != nil) && (callbackSelector != nil) ) {
// [callbackObject performSelector:callbackSelector];
// }
//the user pressed cancel
}
else if (cancel_range.length > 0)
{
//remove our window
// UIWindow* window = [UIApplication sharedApplication].keyWindow;
// if (!window) {
// window = [[UIApplication sharedApplication].windows objectAtIndex:0];
// }
[self.webview removeFromSuperview];
self.webview=nil;
//tell our callback function that we're done logging in :)
// if ( (callbackObject != nil) && (callbackSelector != nil) ) {
// [callbackObject performSelector:callbackSelector];
// }
}
[self getuserdetailes];
}
-(void)getuserdetailes
{
NSString *action=@"me";
NSString *url_string = [NSString stringWithFormat:@"https://graph.facebook.com/%@?", action];
//tack on any get vars we have...
NSDictionary *get_vars=nil;
if ( (get_vars != nil) && ([get_vars count] > 0) ) {
NSEnumerator *enumerator = [get_vars keyEnumerator];
NSString *key;
NSString *value;
while ((key = (NSString *)[enumerator nextObject])) {
value = (NSString *)[get_vars objectForKey:key];
url_string = [NSString stringWithFormat:@"%@%@=%@&", url_string, key, value];
}//end while
}//end if
if (accessToken != nil)
{
//now that any variables have been appended, let's attach the access token....
url_string = [NSString stringWithFormat:@"%@access_token=%@", url_string, self.accessToken];
url_string = [url_string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",url_string);
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url_string]];
NSError *err;
NSURLResponse *resp;
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&resp error:&err];
NSString *stringResponse = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSLog(@"%@",stringResponse);
NSError* error;
NSDictionary *FBResResjson = [NSJSONSerialization
JSONObjectWithData:response//1
options:kNilOptions
error:&error];
NSLog(@"%@",FBResResjson);
}
}