Facebook SDK登录永远不会在iOS 9上回调我的应用程序

Hes*_*gid 65 facebook objective-c ios

我已按照指南更新我的应用程序,以便在使用iOS 9 SDK构建时使用Facebook SDK 4.6正常工作.

当我点击登录按钮时,会出现一个Safari视图控制器(不应该重定向到Facebook应用程序吗?),但在接受权限后,Safari视图控制器永远不会被解雇.它会加载一个新的空白页面并在那里无所事事.如果我点击完成按钮,返回FBSDKLoginManagerLoginResultisCancelled是真的.

SDK是否通过Facebook应用程序选择Safari视图控制器是正常的吗?为什么登录完成后我没有得到回调?

Hes*_*gid 132

原来,在iOS 9时UIApplicationDelegateapplication:openURL:options:实施,application:openURL:sourceApplication:annotation:将不会被调用.

因此,我不得不做的是调用FBSDKApplicationDelegateapplication:openURL:sourceApplication:annotation:UIApplicationDelegateS'application:openURL:options:

- (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]];
}
Run Code Online (Sandbox Code Playgroud)

  • 在iOS 9+上禁用本机登录.https://pbs.twimg.com/media/CPqUE3bW8AEcS8n.png (5认同)
  • 在SDK v4.6和v3.24中,FB SDK默认使用Safari View Controller,而不是快速应用程序切换到本机Facebook应用程序.这是设计上的,因为在iOS 9上,Safari View Controller为人们提供了比快速应用程序切换流程更好的体验. (5认同)
  • 这是解决方案!一个垃圾facebook SDK再次!谢谢! (4认同)
  • 我不明白为什么在Facebook文档中没有提到这个如此关键的问题.我在其他地方找不到这个.非常感谢@ HeshamAbd-Elmegid. (3认同)

Dav*_*vid 32

对于Swift,这对我有用(在AppDelegate.swift中添加):

@available(iOS 9.0, *)
func application(application: UIApplication,openURL url: NSURL, options: [String: AnyObject]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, 
     openURL: url, 
     sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String,
     annotation: options [UIApplicationOpenURLOptionsAnnotationKey])
}
Run Code Online (Sandbox Code Playgroud)

@available(iOS, introduced=8.0, deprecated=9.0)
func application(application: UIApplication,openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {  
return FBSDKApplicationDelegate.sharedInstance().application(application,
     openURL: url,
     sourceApplication: sourceApplication!,
     annotation: annotation)
}
Run Code Online (Sandbox Code Playgroud)

在每种情况下,请记住添加import FBSDKCoreKit其他import语句.

它基本上是Google SignIn使用的.如果它仍然不起作用,您需要设置委托和您的info.plist,就像它在FaceBook Docs中指定的那样.我希望这有帮助!


JT5*_*501 15

对于Swift 3和Facebook SDK 4.16.0:

将以下代码添加到AppDelegate.swift

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
Run Code Online (Sandbox Code Playgroud)


Com*_*Eel 5

对于那些遇到iOS10相同问题的人我添加了这个:

@available(iOS 9.0, *)
func application(_ application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
Run Code Online (Sandbox Code Playgroud)

这应该工作,但现在它只是一个解决方法