2016-02-04 44 views
8

我正在运行与使用Facebook SDK(4.9.1)的问题,如果没有系统帐户存在,它在应用程序浏览器中打开登录。登录不起作用/坚持最新的Facebook SDK

从系统Facebook帐户登录效果很好。我使用下面的代码

FBSDKLoginManager *manager = [[FBSDKLoginManager alloc] init]; 
    manager.loginBehavior = FBSDKLoginBehaviorSystemAccount; 
    [manager logInWithReadPermissions:@[@"public_profile",@"email",@"user_friends"] fromViewController:controller handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
      if (error) { 
       success(kFacebookStatusFailed); 
      } else if (result.isCancelled) { 
       success(kFacebookStatusCancelled); 
      } else { 
       success(kFacebookStatusSuccess); 
      } 
}]; 

我已经正确定义here所有必需的Info.plist设置的。

问题是当它使用inapp浏览器登录时,实际上使用SafariViewController通过调试发现。它遍历所有的登录过程,但在白色空白屏幕到底stucks并不会关闭,请参阅下面

enter image description here

截图已经尝试了所有可能的步骤,但不能够克服它。但是当我设置新鲜的项目没有什么只是上面的登录代码和适当的设置,所有工作正常。

新鲜项目和原项目唯一的区别是在应用程序中使用不同框架的数量,像Crashlytics面料Instabug谷歌框架等是否有任何理由,我应该怀疑这些导致问题的框架,我认为没有。所以,有什么可能是问题,任何人遇到同样的问题,可以帮助我将不胜感激。

谢谢。

+0

它以某种方式为你工作?我有同样的问题... –

+0

@MariusKažemėkaitis没有伴侣,我们无法解决这个问题..似乎有一些我们错过的设置,因为它不适用于特定的应用程序,但我们无法弄清楚.. – iphonic

回答

5

我遇到了同样的问题。添加到您的AppDelegate:

在AppDelegate.m

  1. application:didFinishLaunchingWithOptions:

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
        [[FBSDKApplicationDelegate sharedInstance] application:application 
             didFinishLaunchingWithOptions:launchOptions]; 
    } 
    
  2. 以下方法添加到您的AppDelegate。L:

    -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
        return [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; 
    } 
    

我不知道,如果SafariViewController检查的application:openURL:sourceApplication:annotation但是这为我工作。 试一试。我希望这个对你有用。

来源:https://developers.facebook.com/docs/ios/getting-started

+0

你需要这个导入> #import 。而且我忘了在didFinishLaunchingWithOptions中放回YES(但这是暗示的:P) – Axort

2

是有一个与登录。你有问题可以试试这样

-(IBAction)fbAction:(id)sender 

{ 

    FBSDKLoginManager *manager = [[FBSDKLoginManager alloc] init]; 
    manager.loginBehavior=FBSDKLoginBehaviorWeb; 

    if ([FBSDKAccessToken currentAccessToken]) 
    { 
     [manager logOut]; 
     NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]); 

     [self fetchUserInfo]; 
    } 
    else 
    { 
     [manager logInWithReadPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) 
     { 
      if (error) 
      { 
       NSLog(@"Login process error"); 
      } 
      else if (result.isCancelled) 
      { 
       NSLog(@"User cancelled login"); 
      } 
      else 
      { 
       NSLog(@"Login Success"); 
       if ([result.grantedPermissions containsObject:@"email"]) 
       { 
        NSLog(@"result is:%@",result); 
        [self fetchUserInfo]; 

       } 
      } 
     }]; 
    } 

} 

-(void)fetchUserInfo 

{ 

     if ([FBSDKAccessToken currentAccessToken]) 
     { 
      NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]); 

      [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, email"}] 
      //[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, first_name, last_name, picture.type(large), email"}] 

      startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
       if (!error) 
       { 
        NSLog(@"results:%@",result); 

        NSString *email = [result objectForKey:@"email"]; 
        NSString *userId = [result objectForKey:@"id"]; 

        if (email.length >0) 
        { 

         NSLog(@"email %@,userid %@",email,userId); 
        } 
        else 
        { 
         NSLog(@"Facebook email is not verified"); 
        } 
       } 
       else 
       { 
        NSLog(@"Error %@",error); 
       } 
      }]; 
     } 

} 
+0

你的代码有什么不同? – iphonic

+0

登录将会弹出。 –

+0

将FBSDKLoginManager登录行为更改为FBSDKLoginBehaviorWeb为我工作。新的基于SFSafariViewController的默认方法存在一些问题。 – arton

0

对于我来说,我已经安装了Branch SDK和我openURL:应用程序的委托方法被搞砸了。

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

只开放Branch链接,而

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 

被打开两个FacebookBranch链接。

仔细检查两种方法(iOS9和< = iOS8)中的逻辑设置是否正确。

0

对不起,我不 “说话” 的目标C,但你要重写的OpenURL。 这里是C#:

public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation) 
    { 
     // Facebook - We need to handle URLs by passing them to their own OpenUrl in order to make the SSO authentication works. 
     return ApplicationDelegate.SharedInstance.OpenUrl(application, url, sourceApplication, annotation); 
    }