Advertisement
headsortail

FB Singleton

May 26th, 2012
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //  FacebookManager.h
  2.  
  3. #import <UIKit/UIKit.h>
  4. #import "Facebook.h"
  5. #import "Constants.h"
  6.  
  7. @interface FacebookManager : NSObject <FBSessionDelegate, FBRequestDelegate> {
  8.     Facebook *facebook;
  9.     SuccessBlock successBlock;
  10.     FailureBlock failureBlock;
  11.     BOOL doingLogin;
  12. }
  13.  
  14. @property (nonatomic, retain) Facebook *facebook;
  15.  
  16. + (FacebookManager *)sharedFacebook;
  17.  
  18. - (void)loginWithSuccess:(SuccessBlock)_success andFailure:(FailureBlock)_failure;;
  19. - (void)logout;
  20.  
  21. @end
  22.  
  23.  
  24. // FacebookManager.m
  25.  
  26. #import "FacebookManager.h"
  27. #import "Constants.h"
  28. #import "UserObject.h"
  29. #import "Utilities.h"
  30.  
  31. @interface FacebookManager ()
  32. @end
  33.  
  34. @implementation FacebookManager
  35.  
  36. @synthesize facebook;
  37.  
  38. ////////////////////////////////////////////////////////////////
  39. #pragma mark Object Lifecycle
  40. ////////////////////////////////////////////////////////////////
  41.  
  42. + (FacebookManager *)sharedFacebook
  43. {
  44.     static FacebookManager *_sharedFacebook = nil;
  45.     static dispatch_once_t oncePredicate;
  46.     dispatch_once(&oncePredicate, ^{
  47.         _sharedFacebook = [[self alloc] init];
  48.     });
  49.    
  50.     return _sharedFacebook;
  51. }
  52.  
  53. - (id)init
  54. {
  55.     self = [super init];
  56.     if (!self) return nil;
  57.  
  58.     //initialize ivars - for clarity (not necessary)
  59.     doingLogin = NO;
  60.     successBlock = nil;
  61.     failureBlock = nil;
  62.  
  63.     //initialize Facebook
  64.     facebook = [[Facebook alloc] initWithAppId:facebookAppId andDelegate:self];
  65.    
  66.     //restore previous session
  67.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  68.     if ([defaults objectForKey:@"FBAccessTokenKey"]
  69.         && [defaults objectForKey:@"FBExpirationDateKey"]) {
  70.         facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
  71.         facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
  72.         [facebook extendAccessTokenIfNeeded];
  73.     }    
  74.        
  75.     return self;
  76. }
  77.  
  78. - (void)dealloc
  79. {
  80.     //should not be called
  81.     [facebook release];
  82.     [super dealloc];
  83. }
  84.  
  85. ////////////////////////////////////////////////////////////////
  86. #pragma mark Public methods
  87. ////////////////////////////////////////////////////////////////
  88.  
  89. - (void)loginWithSuccess:(SuccessBlock)_success andFailure:(FailureBlock)_failure
  90. {
  91.     if (!doingLogin) {
  92.         if (!facebook.isSessionValid) {
  93.             doingLogin = YES;
  94.             successBlock = [_success copy];
  95.             failureBlock = [_failure copy];
  96.             NSArray *permissions = [[NSArray alloc] initWithObjects:
  97.                                     @"offline_access",
  98.                                     @"publish_stream",
  99.                                     nil];
  100.             [facebook authorize:permissions];
  101.             [permissions release];
  102.             //now wait for the delegate callback
  103.         } else {
  104.             _success(nil);
  105.         }        
  106.     } else {
  107.         _failure([Utilities createErrorWithString:NSLocalizedString(@"Login already in progress", "Login already in progress - error message")]);
  108.     }
  109. }
  110.  
  111. - (void)logout
  112. {
  113.     [facebook logout];
  114. }
  115.  
  116. ////////////////////////////////////////////////////////////////
  117. #pragma mark FBSessionDelegate methods
  118. ////////////////////////////////////////////////////////////////
  119.  
  120. - (void)fbDidLogin
  121. {
  122.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  123.     [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
  124.     [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
  125.     [defaults synchronize];
  126.  
  127.     //call the success block
  128.     if (successBlock) {
  129.         successBlock(nil);
  130.        
  131.         //clean up
  132.         [successBlock release]; successBlock = nil;
  133.         [failureBlock release]; failureBlock = nil;
  134.         doingLogin = NO;
  135.     }
  136.  
  137. }
  138.  
  139. - (void)fbDidNotLogin:(BOOL)cancelled
  140. {
  141.     //call the failure block
  142.     if (failureBlock) {
  143.         failureBlock([Utilities createErrorWithString:NSLocalizedString(@"Facebook login failed", @"Facebook login failed - error message")]);
  144.        
  145.         //clean up
  146.         [successBlock release]; successBlock = nil;
  147.         [failureBlock release]; failureBlock = nil;
  148.         doingLogin = NO;
  149.     }
  150. }
  151.  
  152. - (void)fbDidLogout
  153. {
  154.     // Remove saved authorization information if it exists
  155.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  156.     if ([defaults objectForKey:@"FBAccessTokenKey"]) {
  157.         [defaults removeObjectForKey:@"FBAccessTokenKey"];
  158.         [defaults removeObjectForKey:@"FBExpirationDateKey"];
  159.         [defaults synchronize];
  160.     }
  161. }
  162.  
  163. - (void)fbDidExtendToken:(NSString *)accessToken expiresAt:(NSDate *)expiresAt
  164. {
  165.     NSLog(@"token extended until: %@", expiresAt);
  166.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  167.     [defaults setObject:accessToken forKey:@"FBAccessTokenKey"];
  168.     [defaults setObject:expiresAt forKey:@"FBExpirationDateKey"];
  169.     [defaults synchronize];
  170. }
  171.  
  172. - (void)fbSessionInvalidated
  173. {
  174.     [[UserObject currentUser] logout];
  175. }
  176.  
  177. @end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement