如何在iOS 10上使用Facebook iOS SDK

trq*_*ong 103 ios facebook-ios-sdk swift ios10

我正在尝试使用Xcode 8来构建一个使用Swift 3登录Facebook的应用程序.当我切换回iOS模拟器9.3时,它可以工作.在iOS 10中,我收到此错误:

""fbauth2:/" The operation couldn’t be completed. (OSStatus error -10814.)"
Run Code Online (Sandbox Code Playgroud)

Optional(Error Domain=com.facebook.sdk.login Code=308 "(null)")
Run Code Online (Sandbox Code Playgroud)

有人有解决方案吗?

注1:

调试后,这个问题是FBSDK无法更新expect_challange.功能SecItemUpdate里面security.framework不行.这是IOS 10的问题

Rom*_*lov 198

错误OSStatus -10814canOpenURL: 找不到任何应用程序时发生,可以打开此URL(实际上,Facebook试图通过canOpenURL:使用参数"fbauth2:/" 来查找其应用程序).打印发生在函数内部,因此您无法执行任何操作.但是,如果您将在安装了Facebook应用程序的设备上运行您的应用程序,则不会看到此错误.

错误308由于这种情况发生,当存储在钥匙串中的值不等于值时,存储在facebook完成参数中(有关您可以检查的更多信息-[FBSDKLoginManager completeAuthentication:expectChallenge:]).

之所以发生这种情况,是因为Apple改变了在iOS 10中使用钥匙串的方式.要解决这个问题,您只需转到Targets-> Capabilities并启用钥匙串共享(它可以访问您应用的钥匙串): 图片

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

只需确保在Entitlements中启用钥匙串访问权限,并选择Simulator(Debug)版本的权利.默认情况下,未设置此项.

  • 你是这样一个救星,在这个问题上浪费4天尝试随机解决方案. (7认同)
  • @RomanErmolov我想通了,我在Xamarin上,在构建调试时,默认情况下不使用Entitlement.plist文件.当我包含Entitlement进行调试时,它工作正常.以下给了我最后的解决方案.http://stackoverflow.com/a/39576798/1062572 - 也许你可以更新你的答案,让Xamarin家伙更容易弄清楚他们是否遗失了. (3认同)
  • 非常感谢,你有关于这个变化的任何文件吗? (2认同)

ZAF*_*007 5

同样的问题在我的应用程序中,我检查了许多解决方案,但对我不起作用.我用下面的方法解决了这个问题.

转到此链接选择您的应用程序并配置您的info.plist

import 并在您的.中添加此代码 AppDelegate

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