如何在iOS 10上使用Facebook iOS SDK


104

我正在尝试使用Xcode 8使用Swift 3通过Facebook登录构建应用程序。当我切换回iOS Simulator 9.3时,它可以工作。在iOS 10中,我收到此错误:

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

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

有人对此有解决方案吗?

注1:

调试后,此问题是FBSDK无法更新expect_challangeSecItemUpdate内部功能security.framework不起作用。这是IOS 10的问题


5
“ ...你为什么期望这能奏效?” 因为软件应该可以工作。这不是这个家伙的错,这不是facebook的错。这是苹果的错。他们获得通过是因为它是“测试版”,但是即使在测试版中,打破钥匙串也几乎是不可接受的。
杰夫·霍利迪

Answers:


201

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

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

发生这种情况的原因是Apple更改了iOS 10中使用钥匙串的方式。要解决此问题,您只需转到Targets-> Capabilities并启用钥匙串共享(它可以访问您的应用程序的钥匙串): 图片

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

只需确保在“权利”中启用了钥匙串访问权限,然后还选择“模拟器(调试)”构建的权利。默认情况下未设置。


2
非常感谢您,您是否有有关此更改的任何文档?
trquoccuong '16

1
退出xcode,运行,sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer并尝试重建后,仍然遇到相同的问题。我现在意识到,我看到的错误更类同此stackoverflow.com/questions/39091841/...
罗伊Kolak

1
@NikitaP似乎您有@ RoyKolak上面提到的问题的经验。
罗曼·埃莫洛夫

1
@NikitaP弄清楚了。这是试图自动集成到应用程序委托中的第三方库(CleverTap)。我在stackoverflow.com/questions/39091841/中回答了…… 感谢您的关注!
Roy Kolak

3
我发现了@RomanErmolov,我在Xamarin上,在构建调试文件时,默认情况下不使用Entitlement.plist文件。当我包括调试权利时,它就起作用了。以下是我最终寻求适当解决方案的方法。stackoverflow.com/a/39576798/1062572- 也许您可以更新答案,以使Xamarin帅哥更容易找出他们是否失踪。
dynamokaj 2016年

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)
}

4

出现以下错误的主要原因是,

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

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


未安装fb应用程序时,应打开Web ui。
Softlion

3

就我而言,解决方法是*:

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 (e.g. deep links)
  handlerOtherUrls(url: url) 
  return true 
}

*按照@MoridinBG在Facebook SDK的Github页面上的建议


0

如果使用的是FBSDKCoreKit或FBSDKLoginKit版本4.39.0,也可能导致此错误。此版本的SDK中存在一个错误。升级到4.39.1或更高版本进行修复。详细信息在这里

另外,其他用户提到,如果您没有在模拟器上安装Facebook,则会看到此错误。没错,但是当未安装应用程序时,SDK应该会自动回退到Web登录方法。如果这没有发生,则可能是由其他问题引起的,例如Info.plist中的值丢失/配置错误(检查LSApplicationQueriesSchemes)或AppDelegate上的方法丢失。


-3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.