Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I cancel a previous Facebook reauthorize call?

A quick question about the Facebook SDK for iOS. I'm trying to implement the functionality for a user to grant my app access to extended permissions.

While the code works fine when the user accepts the extended permission request (from the Facebook iOS app the user gets redirected to), I'm having trouble detecting when the user has returned to the app while having neither accepted the permissions, or clicking cancel then returning to the app.

If I click 'Cancel' and multitask back into the app, there is nothing logged and nothing shown on-screen. When I try to re-authorize again, the Facebook SDK throws an exception:

FBSession: It is not valid to reauthorize while a previous reauthorize call has not yet completed.

While I can catch the exception, it still doesn't help as I can't figure out how to stop the previous call in order to allow the user to try to re-authorize again.

Here's the code I'm using at the moment:

@try {
    [[FBSession activeSession] reauthorizeWithPermissions:[self requiredPermissions]
                                             behavior:FBSessionLoginBehaviorWithFallbackToWebView
                                    completionHandler:^(FBSession *session, NSError *error) {
        if (!error) {
            [self fetchUserPermissionsWithCompletionHandler:^(BOOL extendedGranted) {
                if (extendedGranted) {
                    [self setCanPostToActivityStream:YES];
                }
            }];
        }
        else {
            NSLog(@"%@", [error localizedDescription]);
        }
    }];
}
@catch (NSException *exception) {
    NSLog(@"%@", exception);
}

Now, the issue is not with the code above - the code works fine. The issue I'm having, again, is cancelling the previous re-authorize call when the user doesn't return to the app successfully after allowing permissions. The Facebook SDK as it is doesn't seem to alert the app of this situation in any way.

like image 713
John Rogers Avatar asked Sep 04 '12 06:09

John Rogers


1 Answers

From your App's delegate, when - (void)applicationDidBecomeActive:(UIApplication*)application is invoked, you need to make a call to the active session's handleDidBecomeActive method. Once you do that, the completion handler associated with your reauthorizeWithPublishPermissions call will be invoked, and will provide the appropriate error.

- (void)applicationDidBecomeActive:(UIApplication*)application
{
    [[FBSession activeSession] handleDidBecomeActive];
}
like image 197
Fostah Avatar answered Oct 04 '22 20:10

Fostah