2016-02-02 16 views
7

Właśnie zintegrowałem pakiet SDK Facebooka iOS z moją aplikacją, a logowanie działa świetnie. Powiedział, że SDK nie wydaje mi się możliwość dostosowania mojego przycisku logowania (zapewnia mi ten brzydki domyślny przycisk na środku ekranu). Używam Storyboardów z moją aplikacją - w jaki sposób mogę podłączyć własny przycisk do podanego kodu? Widziałem kilka starszych odpowiedzi zamieszczone na stosie, ale dokumentacja FB od tego czasu zmieniło:/Własny przycisk logowania do Facebooka iOS

Viewcontroller.m

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

Odpowiedz

30

Bądź jesteś właścicielem niestandardowego przycisku w serii ujęć. Podejmij akcję do myButtonPressed.

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

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

Super Brudne Rozwiązanie xD: D – Abo3atef

+0

to działa dla mnie. dziękuję –

+0

Nie: "błąd krytyczny: nieoczekiwanie znaleziono zero podczas rozpakowywania wartości opcjonalnej" – MarksCode

12

Aktualizacja dla 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) 
      } 
     } 
    } 
} 

Dla Objective-C

można wywołać tej metody na UIButton kliknij zdarzenie

-(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

Od Facebooku documentat ion (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

New URL dokumentacji o niestandardowych przycisków:

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

lub jeśli po prostu chcesz wiedzieć, co zrobić, gdy auth przycisk podsłuchu zrobić w przycisk "podsłuchu" metoda (nie zapomnij, aby połączyć tę metodę z przycisku):

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

Następnie

- (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"); 
     } 
    }]; 
} 
Powiązane problemy