2017-10-11 7 views
0

J'implémente Facebook Connexion dans mon application.Connexion Facebook après avoir obtenu des autorisations laissez Safari page blanche ouverte au lieu de rediriger vers mon application dans iOS 10 et iOS 11

Tout fonctionne bien sauf la redirection vers mon application après que Facebook ait obtenu des autorisations.

Une page vierge Safari est ouverte au lieu de rediriger vers mon application. Je lis dans le soja de nombreux forums et questions Stack Overflow sur un problème similaire dans iOS 9, qui est fixé à l'aide de ce code dans le AppDelegate:

- (BOOL)application:(UIApplication *)application 
     openURL:(NSURL *)url 
     options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> 
*)options { 

    return [[FBSDKApplicationDelegate sharedInstance] 
               application:application 
                openURL:url 
             sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
              annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; 
    } 

    return YES; 
} 

je l'ai déjà vérifier que lorsque je donne des autorisations Facebook ce code fonctionne correctement, mais ne fonctionne toujours pas redirigés à mon application, redirect seulement à une nouvelle page blanche Safari où la seule option que j'ai est d'appuyer sur OK ou Terminé bouton qui me envoyer dans la méthode loginManager à la demande utilisateur a annulé cas

(1) Allow Facebook to read permissions

(2) Redirect to a Safari blank page

Il est mon code FBLoginManger

self.manager =[[FBSDKLoginManager alloc] init]; 
    NSArray *facebookPermissions = @[@"email", @"public_profile", @"user_friends"]; 

    if ([FBSDKAccessToken currentAccessToken] != nil) { 
    [self.manager logOut]; 
    //return 
    } 

    [self.manager logInWithReadPermissions: facebookPermissions 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. 

     NSLog(@"FACEBOOK LOGIN ERROR %@", error); 
     // Process error 
     [self.manager logOut]; 
     } else if (result.isCancelled) { 
     // Handle cancellations 
     [self.manager logOut]; 
     } else { 
     // If you ask for multiple permissions at once, you 
     // should check if specific permissions missing 
     BOOL allPermsGranted = true; 

     NSArray *grantedPermissions = [[result grantedPermissions] allObjects]; 

     NSString *lastObject = [grantedPermissions lastObject]; 

     for (NSString *permission in facebookPermissions) { 
      for (NSString* grantedPerm in grantedPermissions) { 
      NSRange range = [permission rangeOfString:grantedPerm]; 
      if ((range.length == 0) && (grantedPerm == lastObject)) { 
       allPermsGranted = false; 
      } else { 
       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) { 
      if (error == nil) { 
       NSDictionary *dict = @{ 
            @"email" : [result objectForKey:@"email"] , 
            @"providerID" : fbUserID, 
            @"username" : [result objectForKey:@"name"], 
            @"provider" : @"facebook" 
            }; 
       NSLog(@"DICT %@", dict); 
       [self.delegate loginWithCredentials:dict]; 
       [self logUserLoggedInWithFacebookEvent]; 
      } else { 
       NSLog(@"ERROR FACEBOOK %@", error); 
      } 
      }]; 

     } 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"); 
      [self.manager logOut]; 
     } 
     } 
    }]; 

La méthode est appelée, mais toujours tomber dans result.isCancelled cas

+0

canyou imprimer l'erreur 'NSLog (@ "FACEBOOK LOGIN erreur% @", erreur);' –

+0

Ne laissez jamais tomber dans ce cas, redirect seulement à la page de safari, puis mon option unique est d'appuyer sur le bouton OK qui annule le résultat. @ Anbu.Karthik – origds

+0

Regardez dans ce code https://drive.google.com/file/d/0B7lSqbQq9-WuYU9qNlhOdWczU2M/view?usp=sharing Identique à votre code. –

Répondre