如何在 iOS 10 上使用 Facebook iOS SDK
Posted
技术标签:
【中文标题】如何在 iOS 10 上使用 Facebook iOS SDK【英文标题】:How to use Facebook iOS SDK on iOS 10 【发布时间】:2016-12-05 23:45:26 【问题描述】:我正在尝试使用 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_challange
。 security.framework
内的函数 SecItemUpdate
不起作用。这是IOS 10的问题
【问题讨论】:
"...您为什么希望它能够工作?"因为软件应该可以工作。这不是这个人的错,也不是 Facebook 的错。这是苹果的错。他们获得通过是因为这是“测试版”,但打破钥匙串几乎是不可接受的,即使在测试版中也是如此。 【参考方案1】:错误 OSStatus -10814 发生在canOpenURL:
can't find any application 时,可以打开此 URL(实际上,Facebook 试图通过使用参数“fbauth2:/”调用 canOpenURL:
来查找他们的应用程序) .打印发生在函数内部,因此您无能为力。
但是,如果您将在安装了 Facebook 应用程序的设备上运行您的应用程序,您将不会看到此错误。
错误 308 发生的原因是,当 keychain 中存储的 value 不等于 facebook 完成参数中存储的 value 时(有关更多信息,您可以查看 -[FBSDKLoginManager completeAuthentication:expectChallenge:]
)。
这是因为 Apple 在 iOS 10 中更改了使用钥匙串的方式。要解决此问题,您只需转到 Targets->Capabilities 并启用钥匙串共享(它可以让您的应用访问钥匙串):
如果您使用的是 Xamarin(阅读此link 了解更多信息,感谢@dynamokaj):
只要确保您在权利和权利中启用钥匙串访问 也选择模拟器(调试)构建的权利。默认 未设置。
【讨论】:
非常感谢,您有关于此更改的任何文件吗? 退出xcode后,运行sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
,并尝试重建,仍然遇到同样的问题。我现在意识到我看到的错误与***.com/questions/39091841/… 更相似
@NikitaP 您似乎对@RoyKolak 上面提到的问题有经验。
@NikitaP 想通了。这是一个试图自动集成到应用程序委托中的第三方库 (CleverTap)。我回复了***.com/questions/39091841/…感谢您的关注!
@RomanErmolov 我想通了,我在 Xamarin 上,在构建调试时,默认情况下不使用 Entitlement.plist 文件。当我包含调试权利时,它起作用了。以下为我提供了正确解决方案的最后推动力。 ***.com/a/39576798/1062572 - 也许你可以更新你的答案,让 Xamarin 兄弟们更容易弄清楚他们是否失踪了。【参考方案2】:
同样的问题出现在我的应用程序中,我检查了许多解决方案,但对我不起作用。我已经用下面的方法解决了这个问题。
转到此Link 选择您的应用并配置您的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)
【讨论】:
【参考方案3】:您收到以下错误的主要原因,
canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)
是您的 iOS 模拟器没有安装 Facebook 应用程序。在您在 iOS 模拟器上安装应用程序之前,您将继续收到错误消息。尝试在安装了 Facebook 的预配置 iOS 设备上运行您的 iOS 应用程序,您将不会再次看到错误消息。希望这会有所帮助!
【讨论】:
在未安装fb应用时应该打开web ui。【参考方案4】:在我的情况下,修复是*:
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's Github page 推荐的那样
【讨论】:
【参考方案5】:如果您使用 FBSDKCoreKit 或 FBSDKLoginKit 版本 4.39.0 也可能导致此错误。此版本的 SDK 存在错误。升级到 4.39.1 或更高版本来修复它。详情here.
作为旁注,其他用户提到如果您没有在模拟器上安装 Facebook,则会出现此错误。确实如此,但 SDK 应该在未安装应用程序时自动回退到 Web 登录方法。如果这没有发生,则可能是由其他问题引起的,例如 Info.plist 中缺少/错误配置的值(检查 LSApplicationQueriesSchemes)或 AppDelegate 上缺少方法。
【讨论】:
【参考方案6】:就我而言,问题出在 Google Analytics(分析)上。默认情况下,它似乎在应用程序的视图控制器之上添加了自己的视图控制器。 在 Your app-Info.plist 中将“FirebaseAppDelegateProxyEnabled”设置为“NO”解决了这个问题。
【讨论】:
以上是关于如何在 iOS 10 上使用 Facebook iOS SDK的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中以 pageadmin 身份在 Facebook 页面上发布状态提要?
使用 SWIFT 在 iOS SDK for Facebook 上使用 FBSDKGraphRequest
如何在 iOS 6 上将多个 URL 共享到 Facebook