2016-02-02 10 views
7

Ho appena integrato l'SDK iOS di Facebook con la mia app e il login funziona alla grande. Detto questo, l'SDK non sembra darmi l'opzione di personalizzare il mio pulsante di accesso (mi fornisce quel brutto pulsante predefinito nel mezzo dello schermo). Sto usando gli storyboard con la mia app: come faccio ad agganciare il mio pulsante al codice fornito? Ho visto alcune risposte più anziani inviati ad Stack, ma dal momento che la documentazione FB è cambiato:/Pulsante Facebook Login personalizzato iOS

Viewcontroller.m

FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; 
loginButton.center = self.view.center; 
[self.view addSubview:loginButton]; 

risposta

30

ti fanno propria pulsante personalizzato nello storyboard. Collega l'azione a myButtonPressed.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.loginButton = [[FBSDKLoginButton alloc] init]; 
    self.loginButton.hidden = YES; 
} 

- (void)myButtonPressed { 
    [self.loginButton sendActionsForControlEvents: UIControlEventTouchUpInside]; 
} 
+19

Super Dirty Solution xD: D – Abo3atef

+0

è funzionante per me. grazie –

+0

No: errore fatale: inaspettatamente trovato nil mentre scartando un valore opzionale' – MarksCode

12

aggiornato per Swift 3

@IBAction func fblogin(_ sender: Any) { 
    let loginManager = LoginManager() 
    UIApplication.shared.statusBarStyle = .default // remove this line if not required 
    loginManager.logIn([ .publicProfile,.email ], viewController: self) { loginResult in 
     print(loginResult) 

     //use picture.type(large) for large size profile picture 
     let request = GraphRequest(graphPath: "me", parameters: ["fields":"email,name,gender,picture"], accessToken: AccessToken.current, httpMethod: .GET, apiVersion: FacebookCore.GraphAPIVersion.defaultVersion) 
     request.start { (response, result) in 
      switch result { 
      case .success(let value): 
       print(value.dictionaryValue) 
      case .failed(let error): 
       print(error) 
      } 
     } 
    } 
} 

Per Objective-C

È possibile chiamare questo metodo su UIButton evento Click

-(void)fblogin{ 

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    if ([UIApplication.sharedApplication canOpenURL:[NSURL URLWithString:@"fb://"]]) 
    { 
     login.loginBehavior = FBSDKLoginBehaviorSystemAccount; 
    } 

    [login logInWithReadPermissions:@[@"public_profile", @"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     if (error) 
     { 
      NSLog(@"Unexpected login error: %@", error); 
      NSString *alertMessage = error.userInfo[FBSDKErrorLocalizedDescriptionKey] ?: @"There was a problem logging in. Please try again later."; 
      NSString *alertTitle = error.userInfo[FBSDKErrorLocalizedTitleKey] ?: @"Oops"; 
      [[[UIAlertView alloc] initWithTitle:alertTitle 
             message:alertMessage 
             delegate:nil 
           cancelButtonTitle:@"OK" 
           otherButtonTitles:nil] show]; 
     } 
     else 
     { 
      if(result.token) // This means if There is current access token. 
      { 

       [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" 
                parameters:@{@"fields": @"picture, name, email"}] 
       startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id userinfo, NSError *error) { 
        if (!error) { 


         dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
         dispatch_async(queue, ^(void) { 

          dispatch_async(dispatch_get_main_queue(), ^{ 

           // you are authorised and can access user data from user info object 

          }); 
         }); 

        } 
        else{ 

         NSLog(@"%@", [error localizedDescription]); 
        } 
       }]; 
      } 
      NSLog(@"Login Cancel"); 
     } 
    }]; 
} 
0

Da Facebook documentat ione: (https://developers.facebook.com/docs/swift/login)

import FacebookCore 
import FacebookLogin 

func viewDidLoad() {  
    // Add a custom login button to your app 
    let myLoginButton = UIButton(type: .Custom)] 
    myLoginButton.backgroundColor = UIColor.darkGrayColor() 
    myLoginButton.frame = CGRect(0, 0, 180, 40); 
    myLoginButton.center = view.center; 
    myLoginTitle.setTitle("My Login Button" forState: .Normal) 

    // Handle clicks on the button 
    myLoginButton.addTarget(self, action: @selector(self.loginButtonClicked) forControlEvents: .TouchUpInside) 

    // Add the button to the view 
    view.addSubview(myLoginButton) 
} 

// Once the button is clicked, show the login dialog 
@objc func loginButtonClicked() { 
    let loginManager = LoginManager() 
    loginManager.logIn([ .PublicProfile ], viewController: self) { loginResult in 
    switch loginResult { 
    case .Failed(let error): 
     print(error) 
    case .Cancelled: 
     print("User cancelled login.") 
    case .Success(let grantedPermissions, let declinedPermissions, let accessToken): 
     print("Logged in!") 
    } 
} 
2

Nuovo URL di documentazione su pulsanti personalizzati:

https://developers.facebook.com/docs/facebook-login/ios/advanced

Oppure, se volete solo sapere cosa fare quando auth pulsante sfruttato fare questo in "Button sfruttato" metodo (non dimenticare di collegare quel metodo con il tasto):

#import <FBSDKLoginKit/FBSDKLoginKit.h> 
#import <FBSDKCoreKit/FBSDKCoreKit.h> 

Poi

- (IBAction)facebookAuthButtonTapped:(id)sender { 

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login 
    logInWithReadPermissions: @[@"public_profile"] 
    fromViewController:self 
    handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     if (error) { 
      NSLog(@"Process error"); 
     } else if (result.isCancelled) { 
      NSLog(@"Cancelled"); 
     } else { 
      NSLog(@"Logged in"); 
     } 
    }]; 
}