Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // FacebookManager.h
- #import <UIKit/UIKit.h>
- #import "Facebook.h"
- #import "Constants.h"
- @interface FacebookManager : NSObject <FBSessionDelegate, FBRequestDelegate> {
- Facebook *facebook;
- SuccessBlock successBlock;
- FailureBlock failureBlock;
- BOOL doingLogin;
- }
- @property (nonatomic, retain) Facebook *facebook;
- + (FacebookManager *)sharedFacebook;
- - (void)loginWithSuccess:(SuccessBlock)_success andFailure:(FailureBlock)_failure;;
- - (void)logout;
- @end
- // FacebookManager.m
- #import "FacebookManager.h"
- #import "Constants.h"
- #import "UserObject.h"
- #import "Utilities.h"
- @interface FacebookManager ()
- @end
- @implementation FacebookManager
- @synthesize facebook;
- ////////////////////////////////////////////////////////////////
- #pragma mark Object Lifecycle
- ////////////////////////////////////////////////////////////////
- + (FacebookManager *)sharedFacebook
- {
- static FacebookManager *_sharedFacebook = nil;
- static dispatch_once_t oncePredicate;
- dispatch_once(&oncePredicate, ^{
- _sharedFacebook = [[self alloc] init];
- });
- return _sharedFacebook;
- }
- - (id)init
- {
- self = [super init];
- if (!self) return nil;
- //initialize ivars - for clarity (not necessary)
- doingLogin = NO;
- successBlock = nil;
- failureBlock = nil;
- //initialize Facebook
- facebook = [[Facebook alloc] initWithAppId:facebookAppId andDelegate:self];
- //restore previous session
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- if ([defaults objectForKey:@"FBAccessTokenKey"]
- && [defaults objectForKey:@"FBExpirationDateKey"]) {
- facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
- facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
- [facebook extendAccessTokenIfNeeded];
- }
- return self;
- }
- - (void)dealloc
- {
- //should not be called
- [facebook release];
- [super dealloc];
- }
- ////////////////////////////////////////////////////////////////
- #pragma mark Public methods
- ////////////////////////////////////////////////////////////////
- - (void)loginWithSuccess:(SuccessBlock)_success andFailure:(FailureBlock)_failure
- {
- if (!doingLogin) {
- if (!facebook.isSessionValid) {
- doingLogin = YES;
- successBlock = [_success copy];
- failureBlock = [_failure copy];
- NSArray *permissions = [[NSArray alloc] initWithObjects:
- @"offline_access",
- @"publish_stream",
- nil];
- [facebook authorize:permissions];
- [permissions release];
- //now wait for the delegate callback
- } else {
- _success(nil);
- }
- } else {
- _failure([Utilities createErrorWithString:NSLocalizedString(@"Login already in progress", "Login already in progress - error message")]);
- }
- }
- - (void)logout
- {
- [facebook logout];
- }
- ////////////////////////////////////////////////////////////////
- #pragma mark FBSessionDelegate methods
- ////////////////////////////////////////////////////////////////
- - (void)fbDidLogin
- {
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
- [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
- [defaults synchronize];
- //call the success block
- if (successBlock) {
- successBlock(nil);
- //clean up
- [successBlock release]; successBlock = nil;
- [failureBlock release]; failureBlock = nil;
- doingLogin = NO;
- }
- }
- - (void)fbDidNotLogin:(BOOL)cancelled
- {
- //call the failure block
- if (failureBlock) {
- failureBlock([Utilities createErrorWithString:NSLocalizedString(@"Facebook login failed", @"Facebook login failed - error message")]);
- //clean up
- [successBlock release]; successBlock = nil;
- [failureBlock release]; failureBlock = nil;
- doingLogin = NO;
- }
- }
- - (void)fbDidLogout
- {
- // Remove saved authorization information if it exists
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- if ([defaults objectForKey:@"FBAccessTokenKey"]) {
- [defaults removeObjectForKey:@"FBAccessTokenKey"];
- [defaults removeObjectForKey:@"FBExpirationDateKey"];
- [defaults synchronize];
- }
- }
- - (void)fbDidExtendToken:(NSString *)accessToken expiresAt:(NSDate *)expiresAt
- {
- NSLog(@"token extended until: %@", expiresAt);
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults setObject:accessToken forKey:@"FBAccessTokenKey"];
- [defaults setObject:expiresAt forKey:@"FBExpirationDateKey"];
- [defaults synchronize];
- }
- - (void)fbSessionInvalidated
- {
- [[UserObject currentUser] logout];
- }
- @end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement