如何在iOS 10上使用Facebook iOS SDK

我试图使用Xcode 8来使用Swift 3build立一个Facebooklogin的应用程序。当我切换回iOS模拟器9.3,它的工作原理。 在iOS 10中,我收到这个错误:

""fbauth2:/" The operation couldn't be completed. (OSStatus error -10814.)" 

 Optional(Error Domain=com.facebook.sdk.login Code=308 "(null)") 

任何人都有这个解决scheme?

注1:

经过debugging,这个问题是FBSDK不能更新expect_challangeSecItemUpdate函数SecItemUpdate不起作用。 这是IOS 10的一个问题

错误OSStatus -10814发生 canOpenURL时canOpenURL: 无法find任何应​​用程序 ,可以打开此URL(实际上,Facebook试图通过调用canOpenURL:与参数“fbauth2:/”)来查找他们的应用程序。 打印发生在函数内部,所以你不能做任何事情。 但是,如果您将在安装了Facebook应用程序的设备上运行应用程序,则不会看到此错误。

当存储在keychain中的值与存储在facebook完成参数中的值不相等时(因为更多的信息可以检查-[FBSDKLoginManager completeAuthentication:expectChallenge:] ), -[FBSDKLoginManager completeAuthentication:expectChallenge:]

这是因为苹果改变了在iOS 10中使用钥匙串的方式。为了解决这个问题,你只需要去目标 – >function,并启用钥匙串共享(它可以访问您的应用程序的钥匙串): 图片

如果您使用Xamarin (请阅读此链接以获取更多信息,谢谢@dynamokaj):

只要确保您启用授权中的钥匙串访问,并select模拟器(debugging)版本的授权。 默认情况下没有设置。

你得到以下错误的主要原因,

 canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn't be completed. (OSStatus error -10814.) 

是你的iOS模拟器没有安装Facebook应用程序。 直到你在你的iOS模拟器上安装应用程序,你将继续得到错误。 尝试在安装了Facebook的预置iOS设备上运行iOS应用程序,您将不会再看到错误消息。 希望这可以帮助!

同样的问题是在我的应用程序,我检查了很多解决scheme,但没有为我工作。 我已经使用下面的方法解决了这个问题。

转到此链接select您的应用程序,并configuration您的info.plist

import并将此代码添加到您的AppDelegate

导入FBSDKCoreKit导入FBSDKLoginKit

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) } func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options) } 

在我的情况下,修复是*:

 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { // First, handle Facebook URL open request if let fbSDKAppId = FBSDKSettings.appID(), url.scheme!.hasPrefix("fb\(fbSDKAppId)"), url.host == "authorize" { let shouldOpen: Bool = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: options[UIApplicationOpenURLOptionsKey.annotation]) return shouldOpen } // After it, handle any other response (eg deep links) handlerOtherUrls(url: url) return true } 

*根据Facebook SDK的Github页面 @MoridinBG的build议

就我而言,问题在于Google Analytics(分析)。 默认情况下,它似乎在应用程序的视图控制器上添加了自己的视图控制器。 在{Your app}中将“FirebaseAppDelegateProxyEnabled”设置为“NO”-Info.plist解决了这个问题。