2017-10-11 134 views
0

我正在我的應用程序中實施Facebook登錄。獲取權限後的Facebook登錄讓Safari空白頁打開,而不是重定向到我的應用程序在iOS 10和iOS 11

所有的工作屬性,除了Facebook獲取權限後重定向到我的應用程序。

Safari空白頁是打開的句柄,而不是重定向到我的應用程序。我在醬油許多論壇和了解iOS 9類似問題的其他堆棧溢出問題閱讀,使用此代碼在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; 
} 

我已經檢查的時候,我給Facebook的權限,此代碼工作正常,但仍然不重定向到我的應用程序,只重定向到一個新的Safari瀏覽器的空白頁面,在這裏,我唯一的選擇是按OK完成按鈕送我的loginManager方法將用戶取消的請求情況下

(1) Allow Facebook to read permissions

(2) Redirect to a Safari blank page

還有就是我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]; 
     } 
     } 
    }]; 

的方法調用,但總是在result.isCancelled情況下

+0

其答案canyou打印錯誤'的NSLog(@「Facebook登錄錯誤%@」,錯誤);' –

+0

在這種情況下切勿掉落,只能重定向到Safari瀏覽器頁面,然後我唯一的選擇是按OK按鈕即取消結果。 @ Anbu.Karthik – origds

+0

查看此代碼https://drive.google.com/file/d/0B7lSqbQq9-WuYU9qNlhOdWczU2M/view?usp=sharing與您的代碼相同。 –

回答

相關問題