Created
July 31, 2014 17:58
-
-
Save asciimike/1375e16b05012c6c7d88 to your computer and use it in GitHub Desktop.
Snippet of code for handling Twitter multiple login using Firebase Simple Login
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@interface TwitterTest() | |
@property (strong, nonatomic) NSString *currentTwitterHandle; | |
@end | |
@implementation TwitterTest // Note, must conform to the <UIActionSheetDelegate> protocol | |
- (void)authenticateWithTwitter; | |
{ | |
if (self.currentTwitterHandle) { | |
// If the user has a currently selected twitter handle, log them in normally | |
Firebase *ref = [[Firebase alloc] initWithUrl:@"https://<your-firebase>.firebaseio.com"]; | |
FirebaseSimpleLogin *authRef = [[FirebaseSimpleLogin alloc] initWithRef:ref]; | |
[authRef loginToTwitterAppWithId:@"TWITTER_APP_ID" multipleAccountsHandler:^int(NSArray *usernames) { | |
return (int)[usernames indexOfObject:self.currentTwitterHandle]; | |
} withCompletionBlock:^(NSError *error, FAUser *user) { | |
if (error != nil) { | |
// An error has occurred! | |
} else { | |
// We have a user | |
self.title = self.currentTwitterHandle; | |
} | |
}]; | |
} else { | |
// Access account store to pull twitter accounts on device | |
ACAccountStore *accountStore = [[ACAccountStore alloc] init]; | |
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; | |
[accountStore requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error) { | |
if (granted) { | |
NSArray *accounts = [accountStore accountsWithAccountType:accountType]; | |
[self handleMultipleTwitterAccounts:accounts]; | |
} | |
}]; | |
} | |
} | |
- (void)handleMultipleTwitterAccounts:(NSArray *)accounts; | |
{ | |
switch ([accounts count]) { | |
case 0: | |
// Deal with setting up a twitter account (could also not be set up on the device, deal with this differently) | |
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://twitter.com/signup"]]; | |
break; | |
case 1: | |
// Single user system, go straight to login | |
self.currentTwitterHandle = [[accounts firstObject] username]; | |
[self authenticateWithTwitter]; | |
break; | |
default: | |
// Handle multiple users | |
[self selectTwitterAccount:accounts]; | |
break; | |
} | |
} | |
- (void)selectTwitterAccount:(NSArray *)accounts; | |
{ | |
// Pop up action sheet which has different user accounts as options | |
UIActionSheet *selectUserActionSheet = [[UIActionSheet alloc] initWithTitle:@"Select Twitter Account" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: nil]; | |
for (ACAccount *account in accounts) { | |
[selectUserActionSheet addButtonWithTitle:[account username]]; | |
} | |
selectUserActionSheet.cancelButtonIndex = [selectUserActionSheet addButtonWithTitle:@"Cancel"]; | |
[selectUserActionSheet showInView:self.view]; | |
} | |
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex; | |
{ | |
self.currentTwitterHandle = [actionSheet buttonTitleAtIndex:buttonIndex]; | |
[self authenticateWithTwitter]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment