diff --git a/native/ios/FacebookConnectPlugin.h b/native/ios/FacebookConnectPlugin.h index a0d4ad499..73dcdca2b 100755 --- a/native/ios/FacebookConnectPlugin.h +++ b/native/ios/FacebookConnectPlugin.h @@ -19,6 +19,6 @@ } @property (nonatomic, retain) Facebook *facebook; - +@property (nonatomic, copy) NSString* loginCallbackId; @end diff --git a/native/ios/FacebookConnectPlugin.m b/native/ios/FacebookConnectPlugin.m index 96c16dcb3..012110958 100755 --- a/native/ios/FacebookConnectPlugin.m +++ b/native/ios/FacebookConnectPlugin.m @@ -19,7 +19,7 @@ @implementation FacebookConnectPlugin -@synthesize facebook; +@synthesize facebook, loginCallbackId; /* This overrides PGPlugin's method, which receives a notification when handleOpenURL is called on the main app delegate */ - (void) handleOpenURL:(NSNotification*)notification @@ -32,11 +32,17 @@ - (void) handleOpenURL:(NSNotification*)notification BOOL ok = [facebook handleOpenURL:url]; if (ok) { + NSDictionary* session = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:self.facebook.accessToken, [self.facebook.expirationDate description], APP_SECRET, [NSNumber numberWithBool:YES], @"...", @"...", nil] forKeys:[NSArray arrayWithObjects:@"access_token", @"expires", @"secret", @"session_key", @"sig", @"uid", nil]]; + NSDictionary* status = [NSDictionary + dictionaryWithObjects:[NSArray arrayWithObjects:@"connected", session, nil] + forKeys:[NSArray arrayWithObjects:@"status", @"session", nil]]; + - [super writeJavascript:[NSString stringWithFormat:@"FB.Auth.setSession(%@);", [session JSONRepresentation]]]; + PluginResult* result = [PluginResult resultWithStatus:PGCommandStatus_OK messageAsDictionary:status]; + [super writeJavascript:[result toSuccessCallbackString:self.loginCallbackId]]; } } @@ -83,10 +89,11 @@ - (void) login:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options NSMutableArray* marray = [NSMutableArray arrayWithArray:arguments]; [marray removeObjectAtIndex:0]; // first item is the callbackId - [facebook authorize:marray delegate:self]; + // save the callbackId for handleOpenURL return (only works if the app is multi-tasked!) + self.loginCallbackId = callbackId; + + return [facebook authorize:marray delegate:self]; - result = [PluginResult resultWithStatus:PGCommandStatus_ERROR messageAsString:@"Must call FB.init before FB.login"]; - jsString = [result toErrorCallbackString:callbackId]; } [super writeJavascript:jsString];