Created
August 21, 2014 13:05
-
-
Save omgbbqhaxx/136d40903be162e62736 to your computer and use it in GitHub Desktop.
Login withfacebook custom
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
// | |
// AppDelegate.h | |
// CustomFBLogin | |
// | |
// Created by Yasin Aktimur on 19.08.2014. | |
// Copyright (c) 2014 Yasin Aktimur. All rights reserved. | |
// | |
#import <UIKit/UIKit.h> | |
#import "ViewController.h" | |
@interface AppDelegate : UIResponder <UIApplicationDelegate> | |
@property (strong, nonatomic) UIWindow *window; | |
@property (strong, nonatomic) ViewController *customLoginViewController; | |
@property NSString *userMail; | |
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error; | |
- (void)userLoggedIn; | |
- (void)userLoggedOut; | |
@end |
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
// | |
// AppDelegate.m | |
// CustomFBLogin | |
// | |
// Created by Yasin Aktimur on 19.08.2014. | |
// Copyright (c) 2014 Yasin Aktimur. All rights reserved. | |
// | |
#import "AppDelegate.h" | |
@implementation AppDelegate | |
@synthesize customLoginViewController, userMail; | |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |
{ | |
//self.window.backgroundColor = [UIColor whiteColor]; | |
//[self.window makeKeyAndVisible]; | |
if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) { | |
// If there's one, just open the session silently, without showing the user the login UI | |
[FBSession openActiveSessionWithReadPermissions:@[@"public_profile", @"email"] | |
allowLoginUI:NO | |
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { | |
// Handler for session state changes | |
// This method will be called EACH time the session state changes, | |
// also for intermediate states and NOT just when the session open | |
[self sessionStateChanged:session state:state error:error]; | |
}]; | |
} | |
return YES; | |
} | |
- (void)applicationWillResignActive:(UIApplication *)application | |
{ | |
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. | |
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. | |
} | |
- (void)applicationDidEnterBackground:(UIApplication *)application | |
{ | |
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. | |
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. | |
} | |
- (void)applicationWillEnterForeground:(UIApplication *)application | |
{ | |
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. | |
} | |
- (void)applicationDidBecomeActive:(UIApplication *)application | |
{ | |
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. | |
[FBAppCall handleDidBecomeActive]; | |
} | |
- (void)applicationWillTerminate:(UIApplication *)application | |
{ | |
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. | |
} | |
// This method will handle ALL the session state changes in the app | |
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error | |
{ | |
// If the session was opened successfully | |
if (!error && state == FBSessionStateOpen){ | |
//NSLog(@"Session opened"); | |
[FBRequestConnection startWithGraphPath:@"me" parameters:@{@"fields": @"first_name, last_name, picture.type(normal), email"} HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { | |
if (!error) { | |
//uygulama başarılı olduğunda yapılcaklar @omgbbqhax | |
userMail = [result objectForKey:@"email"]; | |
[[NSNotificationCenter defaultCenter] postNotificationName:@"userinfo" object:nil userInfo:result]; | |
NSLog(@"%@", userMail); | |
} | |
else{ | |
NSLog(@"%@", [error localizedDescription]); | |
} | |
}]; | |
// [self userLoggedIn]; | |
return; | |
} | |
if (state == FBSessionStateClosed || state == FBSessionStateClosedLoginFailed){ | |
// If the session is closed | |
NSLog(@"Session closed"); | |
// Show the user the logged-out UI | |
[self userLoggedOut]; | |
} | |
// Handle errors | |
if (error){ | |
NSLog(@"Error"); | |
NSString *alertText; | |
NSString *alertTitle; | |
// If the error requires people using an app to make an action outside of the app in order to recover | |
if ([FBErrorUtility shouldNotifyUserForError:error] == YES){ | |
alertTitle = @"Something went wrong"; | |
alertText = [FBErrorUtility userMessageForError:error]; | |
[self showMessage:alertText withTitle:alertTitle]; | |
} else { | |
// If the user cancelled login, do nothing | |
if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryUserCancelled) { | |
NSLog(@"User cancelled login"); | |
// Handle session closures that happen outside of the app | |
} else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryAuthenticationReopenSession){ | |
alertTitle = @"Session Error"; | |
alertText = @"Your current session is no longer valid. Please log in again."; | |
[self showMessage:alertText withTitle:alertTitle]; | |
// Here we will handle all other errors with a generic error message. | |
// We recommend you check our Handling Errors guide for more information | |
// https://developers.facebook.com/docs/ios/errors/ | |
} else { | |
//Get more error information from the error | |
NSDictionary *errorInformation = [[[error.userInfo objectForKey:@"com.facebook.sdk:ParsedJSONResponseKey"] objectForKey:@"body"] objectForKey:@"error"]; | |
// Show the user an error message | |
alertTitle = @"Something went wrong"; | |
alertText = [NSString stringWithFormat:@"Please retry. \n\n If the problem persists contact us and mention this error code: %@", [errorInformation objectForKey:@"message"]]; | |
[self showMessage:alertText withTitle:alertTitle]; | |
} | |
} | |
// Clear this token | |
[FBSession.activeSession closeAndClearTokenInformation]; | |
// Show the user the logged-out UI | |
[self userLoggedOut]; | |
} | |
} | |
// Show an alert message | |
- (void)showMessage:(NSString *)text withTitle:(NSString *)title | |
{ | |
[[[UIAlertView alloc] initWithTitle:title | |
message:text | |
delegate:self | |
cancelButtonTitle:@"OK!" | |
otherButtonTitles:nil] show]; | |
} | |
- (BOOL)application:(UIApplication *)application | |
openURL:(NSURL *)url | |
sourceApplication:(NSString *)sourceApplication | |
annotation:(id)annotation | |
{ | |
// Note this handler block should be the exact same as the handler passed to any open calls. | |
[FBSession.activeSession setStateChangeHandler: | |
^(FBSession *session, FBSessionState state, NSError *error) { | |
// Retrieve the app delegate | |
AppDelegate* appDelegate = [UIApplication sharedApplication].delegate; | |
// Call the app delegate's sessionStateChanged:state:error method to handle session state changes | |
[appDelegate sessionStateChanged:session state:state error:error]; | |
}]; | |
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication]; | |
} | |
// Show the user the logged-out UI | |
- (void)userLoggedOut | |
{ | |
// Set the button title as "Log in with Facebook" | |
UIButton *loginButton = [self.customLoginViewController loginButton]; | |
[loginButton setTitle:@"Log in with Facebook" forState:UIControlStateNormal]; | |
// Confirm logout message | |
[self showMessage:@"You're now logged out" withTitle:@""]; | |
} | |
// Show the user the logged-in UI | |
- (void)userLoggedIn | |
{ | |
// Welcome message | |
[self showMessage:@"Giriş başarılı" withTitle:@"Welcome!"]; | |
} | |
@end |
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
- (IBAction)buttonTouched:(id)sender | |
{ | |
// If the session state is any of the two "open" states when the button is clicked | |
if (FBSession.activeSession.state == FBSessionStateOpen | |
|| FBSession.activeSession.state == FBSessionStateOpenTokenExtended) { | |
// Close the session and remove the access token from the cache | |
// The session state handler (in the app delegate) will be called automatically | |
[FBSession.activeSession closeAndClearTokenInformation]; | |
// If the session state is not any of the two "open" states when the button is clicked | |
} else { | |
// Open a session showing the user the login UI | |
// You must ALWAYS ask for public_profile permissions when opening a session | |
[FBSession openActiveSessionWithReadPermissions:@[@"public_profile"] | |
allowLoginUI:YES | |
completionHandler: | |
^(FBSession *session, FBSessionState state, NSError *error) { | |
// Retrieve the app delegate | |
AppDelegate* appDelegate = [UIApplication sharedApplication].delegate; | |
// Call the app delegate's sessionStateChanged:state:error method to handle session state changes | |
[appDelegate sessionStateChanged:session state:state error:error]; | |
}]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment