J'essaie de mettre en œuvre la connexion Facebook dans mon application. Je fais déjà tout ce que la page de développeur de Facebook me recommande mais je ne peux pas faire ce travail correctement.FBSDKLogin ne fonctionne pas correctement rediriger vers Safari, mais le résultat est annulé
J'ai déjà mis mon identifiant de groupe dans Facebook Dev App
Facebook Config:
Xcode Projet Config:
Dans mon AppDelegate je mets la code que Facebook indique
#import <FBSDKCoreKit/FBSDKCoreKit.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[FBSDKApplicationDelegate sharedInstance] application:application
didFinishLaunchingWithOptions:launchOptions];
return YES;
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication: sourceApplication
annotation: annotation
];
return handled;
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[FBSDKAppEvents activateApp];
}
mettre également le bouton de connexion comme indiqué dans la documentation Facebook
-(void) viewDidLoad() {
self.loginButton = [[FBSDKLoginButton alloc] init];
self.loginButton.readPermissions = @[@"public_profile", @"email", @"user_friends"];
[self.loginButton addTarget:self action:@selector(buttonFacebookLoginClicked:) forControlEvents:UIControlEventTouchUpInside];
self.manager =[[FBSDKLoginManager alloc] init];
}
Mais dans la méthode buttonFacebookLoginClicked
quand je manipule la réponse que je l'ai toujours result.isCancelled
comme vrai.
Dans l'application lorsque je clique sur le bouton de connexion FB, je suis redirigé vers un nouvel onglet de safari qui ne montre rien, puis lorsque je clique sur le bouton OK, le résultat est annulé.
Mon bouton de connexion Facebook:
vue Safari:
Il est ma fonction de connexion, et je laisse tomber toujours dans le cas où result.isCancelled est vrai, après cliquez sur le bouton OK dans Safari
- (IBAction)buttonFacebookLoginClicked:(id)sender {
if ([FBSDKAccessToken currentAccessToken] != nil) {
[self.manager logOut];
//return
}
[self.manager logInWithReadPermissions: self.loginButton.readPermissions fromViewController: self handler: ^(FBSDKLoginManagerLoginResult* result, NSError* error) {
if (error != nil) {
//According to Facebook:
//Errors will rarely occur in the typical login flow because the login dialog
//presented by Facebook via single sign on will guide the users to resolve any errors.
// Process error
[self.manager logOut];
} else if (result.isCancelled) {
// Handle cancellations
for (NSString * p in self.loginButton.readPermissions) {
NSLog(@"PERMISSION %@", p);
}
[self.manager logOut];
} else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
BOOL allPermsGranted = true;
//result.grantedPermissions returns an array of _NSCFString pointers
NSArray *grantedPermissions = [[result grantedPermissions] allObjects];
// let grantedPermissions = result.grantedPermissions.allObjects.map({"\($0)"})
for (NSString *permission in self.loginButton.readPermissions) {
for (NSString* grantedPerm in grantedPermissions) {
NSRange range = [permission rangeOfString:grantedPerm];
if (range.length == 0) {
allPermsGranted = false;
break;
}
}
}
if (allPermsGranted) {
// Do work
NSString * fbToken = [[result token] tokenString];
NSString * fbUserID = [[result token] userID];
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:@"/me"
parameters:@{@"fields": @"id,name,email"}
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
NSLog(@"result %@", result);
NSDictionary *dict = @{
@"email" : @"email" ,
@"providerID" : @"id",
@"username" : @"name",
@"provider" : @"facebook"
};
NSLog(@"DICT %@", dict);
[self.delegate loginWithCredentials:dict];
[self logUserLoggedInWithFacebookEvent];
}];
} else {
//The user did not grant all permissions requested
//Discover which permissions are granted
//and if you can live without the declined ones
NSLog(@"FACEBOOK LOGIN ERROR");
}
}
}];
}
Je pense que c'est une erreur moins mais je ne peux pas le trouver.
Puis-je demander, pourquoi ne pas utiliser le cadre de compte comme une meilleure option? Une question de plus si vous voulez aller avec FB SDK, avez-vous configuré votre. PLIST pour facebook sdk? –
Il vous manque cette partie https: //developers.facebook.com/docs/ios/getting-started/#xcode \ –
Je l'ai déjà fait dans mon fichier .plist @Gagan_iOS – origds