2016-02-12 112 views
2

我正在使用Xcode 7使用Facebook iOS idk v4.1编写针对iOS7的应用程序。当我执行Facebook登录时,FBSDKLoginButton回调中的[FBSDKAccessToken currentAccessToken]仍然为零。我已经尝试了几种SO解决方案来解决这个问题,但迄今为止还没有一种解决方案能够解决此问题登录Facebook之前iOS 9

我认为问题出在我的appDelegate。这里是我的代码:

- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    //for Facebook signin 
    if([[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]) 
    { 
     return YES; 
    } 
    //for Google Signin on iOS 8 and earlier 
    else 
    { 
     NSDictionary* options = @{UIApplicationOpenURLOptionsSourceApplicationKey:sourceApplication, UIApplicationOpenURLOptionsAnnotationKey:annotation}; 
     return [self application:application openURL:url options:options]; 
    } 
} 

//iOS 9 and later 
//for Google Signin 
- (BOOL) application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options 
{ 
    if ([[[NSUserDefaults standardUserDefaults] objectForKey:UDLoginType] integerValue] == ltGoogle) 
    { 
     return [[GIDSignIn sharedInstance] handleURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; 
    } 
    else 
    { 
     return YES; 
    } 
} 

当我的应用程序从Facebook返回时,应用程序:openURL:options(iOSv9 +)被调用。该方法不包含对Facebook SDK的调用。在应用程序中有一个对Facebook SDK的调用:openURL:sourceApplication:注解(iOSv8-),但我不知道如何将它翻译为iOSv9调用,就像Google一样。据我所知,在Facebook登录后没有处理登录URL。我究竟做错了什么?

感谢

回答

4

这里是你如何能为iOS 9+

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options { 
     return [[FBSDKApplicationDelegate sharedInstance] application:app 
                   openURL:url 
                sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
                  annotation:options[UIApplicationOpenURLOptionsAnnotationKey]] 
       || [[GIDSignIn sharedInstance] handleURL:url 
             sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
               annotation:options[UIApplicationOpenURLOptionsSourceApplicationKey]]; 
    } 

下面IOS 9

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

     return [[FBSDKApplicationDelegate sharedInstance] application:application 
                  openURL:url 
               sourceApplication:sourceApplication 
                 annotation:annotation 
       ] || 
       [[GIDSignIn sharedInstance] handleURL:url 
              sourceApplication:sourceApplication 
               annotation:annotation]; 
    } 
实施