Created
May 28, 2011 02:49
-
-
Save bobbypage/996543 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Under Facebook.m | |
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth | |
safariAuth:(BOOL)trySafariAuth { | |
//Disable Facebook App Auth and only use native popup auth | |
tryFBAppAuth = NO; | |
trySafariAuth = NO; | |
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: | |
_appId, @"client_id", | |
@"user_agent", @"type", | |
kRedirectURL, @"redirect_uri", | |
@"touch", @"display", | |
kSDKVersion, @"sdk", | |
nil]; | |
NSString *loginDialogURL = [kDialogBaseURL stringByAppendingString:kLogin]; | |
if (_permissions != nil) { | |
NSString* scope = [_permissions componentsJoinedByString:@","]; | |
[params setValue:scope forKey:@"scope"]; | |
} | |
// If the device is running a version of iOS that supports multitasking, | |
// try to obtain the access token from the Facebook app installed | |
// on the device. | |
// If the Facebook app isn't installed or it doesn't support | |
// the fbauth:// URL scheme, fall back on Safari for obtaining the access token. | |
// This minimizes the chance that the user will have to enter his or | |
// her credentials in order to authorize the application. | |
BOOL didOpenOtherApp = NO; | |
UIDevice *device = [UIDevice currentDevice]; | |
if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) { | |
if (tryFBAppAuth) { | |
NSString *fbAppUrl = [FBRequest serializeURL:kFBAppAuthURL params:params]; | |
didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]]; | |
} | |
if (trySafariAuth && !didOpenOtherApp) { | |
NSString *nextUrl = [NSString stringWithFormat:@"fb%@://authorize", _appId]; | |
[params setValue:nextUrl forKey:@"redirect_uri"]; | |
NSString *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params]; | |
didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]]; | |
} | |
} | |
// If single sign-on failed, open an inline login dialog. This will require the user to | |
// enter his or her credentials. | |
if (!didOpenOtherApp) { | |
[_loginDialog release]; | |
_loginDialog = [[FBLoginDialog alloc] initWithURL:loginDialogURL | |
loginParams:params | |
delegate:self]; | |
[_loginDialog show]; | |
} | |
} | |
/** | |
* A private function for parsing URL parameters. | |
*/ | |
- (NSDictionary*)parseURLParams:(NSString *)query { | |
NSArray *pairs = [query componentsSeparatedByString:@"&"]; | |
NSMutableDictionary *params = [[[NSMutableDictionary alloc] init] autorelease]; | |
for (NSString *pair in pairs) { | |
NSArray *kv = [pair componentsSeparatedByString:@"="]; | |
NSString *val = | |
[[kv objectAtIndex:1] | |
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; | |
[params setObject:val forKey:[kv objectAtIndex:0]]; | |
} | |
return params; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment