I understand - http://developers.facebook.com/docs/guides/mobile/#ios -, seems really useful, but my app won't support multitasking, so this "cross safari" method won't work for me.
Is there a brief example somewhere (or can someone please copy here) an authentication process trough FBDialogs (with this so called "new" API)? I'm just getting know this SDK, so please as basic as you can.
Struggled to figure this out for a couple of hours...
Here is the solution to bypass fb app|background-safari authentication, and it is just to change in Facebook.m:
[self authorizeWithFBAppAuth:YES safariAuth:YES]
to
[self authorizeWithFBAppAuth:NO safariAuth:NO]
in the method:
- (void)authorize:(NSArray *)permissions
delegate:(id<FBSessionDelegate>)delegate
.
Verified it with the sample code without changing anything else (of course set kAppId to yours)
I was quite mad why on earth FB doesn't document this...
Hope it helps,
Cheers
All the magic is in
- (void)authorize:(NSArray *)permissions
delegate:(id<FBSessionDelegate>)delegate
which call [self authorizeWithFBAppAuth:YES safariAuth:YES]
:
FBAppAuth:YES
will try to authenticate using Facebook app if installed
safariAuth:YES
will try to authenticate using Safari if device supports multitasking
So what you want is [self authorizeWithFBAppAuth:NO safariAuth:NO]
If you want to leave unmodified the Facebook SDK you can simply "expose" their private api :
@interface Facebook (Private)
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
safariAuth:(BOOL)trySafariAuth;
@end
And then extend if with a category:
@interface Facebook (MyApp)
- (void)myAuthorize:(id<FBSessionDelegate>)delegate;
@end
@implementation Facebook (MyApp)
- (void)myAuthorize:(id<FBSessionDelegate>)delegate {
_permissions = [[NSArray arrayWithObjects:@"email", *(whatever you need)*, nil] retain];
_sessionDelegate = delegate;
[self authorizeWithFBAppAuth:NO safariAuth:NO]; // force in app auth
}
@end
Then use it almost normally :
Facebook *facebook = [[Facebook alloc] initWithAppId:MY_APP_FB_ID];
[facebook myAuthorize:self];
That's a popular request they didn't implemented, there are even pull requests with solutions...