Je viens d'intégrer le SDK Facebook iOS avec mon application, et la connexion fonctionne très bien. Cela dit, le SDK ne semble pas me donner la possibilité de personnaliser mon bouton de connexion (il me fournit ce bouton par défaut laid au milieu de l'écran). J'utilise Storyboards avec mon application. Comment puis-je connecter mon propre bouton au code fourni? J'ai vu d'anciennes réponses postées sur Stack, mais la documentation de FB a été modifiée depuis: /
Viewcontroller.m
FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
loginButton.center = self.view.center;
[self.view addSubview:loginButton];
Créez votre propre bouton personnalisé dans le storyboard. Reliez l'action à myButtonPressed
.
- (void)viewDidLoad {
[super viewDidLoad];
self.loginButton = [[FBSDKLoginButton alloc] init];
self.loginButton.hidden = YES;
}
- (void)myButtonPressed {
[self.loginButton sendActionsForControlEvents: UIControlEventTouchUpInside];
}
Mise à jour pour 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)
}
}
}
}
Pour Objective-C
Vous pouvez appeler cette méthode sur l'événement UIButton
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");
}
}];
}
Nouvelle URL de la documentation sur les boutons personnalisés:
https://developers.facebook.com/docs/facebook-login/ios/advanced
Ou si vous voulez simplement savoir quoi faire quand le bouton auth a tapé, faites-le dans la méthode "Bouton tapé" (n'oubliez pas de lier cette méthode avec votre bouton):
#import <FBSDKLoginKit/FBSDKLoginKit.h>
#import <FBSDKCoreKit/FBSDKCoreKit.h>
Ensuite
- (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");
}
}];
}
À partir de la documentation de Facebook: ( 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!")
}
}
Swift 4.0 Définit l'action sur le bouton ur.
func loginButtonClicked() {
let loginManager = LoginManager()
loginManager.logIn(readPermissions: [.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! \(grantedPermissions) \(declinedPermissions) \(accessToken)")
self.getFBUserData()
}
}
}