简体   繁体   中英

How to authorize user through a DIALOG with the NEW Facebook Connect iOS API?

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...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM