如何在 iOS 10 上使用 Facebook iOS SDK
How to use Facebook iOS SDK on iOS 10
我正在尝试使用 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)")
有人对此有解决方案吗?
注一:
经调试,此问题为FBSDK无法更新expect_challange
。 security.framework
中的函数 SecItemUpdate
无效。这是IOS10
的问题
错误 OSStatus -10814 在 canOpenURL:
can't find any application 时发生,可以打开此 URL(实际上,Facebook 试图找到他们的应用程序通过使用参数 "fbauth2:/" 调用 canOpenURL:
)。打印发生在函数内部,所以你不能用它做任何事情。
但是,如果您 运行 在安装了 Facebook 应用程序的设备上使用您的应用程序,您将不会看到此错误。
错误 308 发生的原因是,当存储在钥匙串中的值不等于存储在 facebook 完成参数中的值时(有关更多信息,您可以查看 -[FBSDKLoginManager completeAuthentication:expectChallenge:]
).
这是因为 Apple 在 iOS10 中更改了使用钥匙串的方式。要解决此问题,您只需转到 Targets->Capabilities 并启用钥匙串共享(它可以为您的应用程序访问钥匙串) ):
如果您正在使用 Xamarin(阅读此 了解更多信息,感谢@dynamokaj):
Just make sure you enable the keychain access in Entitlements and
select the entitlements for Simulator (Debug) builds too. By default
this is not set.
就我而言,问题是 Google 分析。默认情况下,它似乎在应用程序的视图控制器之上添加了自己的视图控制器。
在 {Your app}-Info.plist 中将 "FirebaseAppDelegateProxyEnabled" 设置为 "NO" 解决了问题。
您收到以下错误的主要原因,
canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)
是您的iOS模拟器没有安装Facebook应用程序。在您将应用程序安装到 iOS 模拟器之前,您将继续收到错误消息。在安装了 Facebook 的已配置 iOS 设备上尝试 运行 您的 iOS 应用程序,您将不会再看到错误消息。希望这对您有所帮助!
同样的问题出现在我的应用程序中,我检查了很多解决方案但都不适合我。我已经使用以下方法解决了这个问题。
转到此 Link Select 您的应用程序并配置您的 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)
}
就我而言,修复是*:
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
推荐
如果您使用的是 FBSDKCoreKit 或 FBSDKLoginKit 版本 4.39.0,也可能导致此错误。此版本的 SDK 中存在错误。升级到 4.39.1 或更高版本以修复它。详情 here.
附带说明一下,其他用户提到如果您没有在模拟器上安装 Facebook,就会看到此错误。没错,但 SDK 应该会在未安装应用程序时自动回退到 Web 登录方式。如果这没有发生,则可能是由其他问题引起的,例如 Info.plist 中的 missing/misconfigured 值(检查 LSApplicationQueriesSchemes)或 AppDelegate 中缺少方法。
我正在尝试使用 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)")
有人对此有解决方案吗?
注一:
经调试,此问题为FBSDK无法更新expect_challange
。 security.framework
中的函数 SecItemUpdate
无效。这是IOS10
错误 OSStatus -10814 在 canOpenURL:
can't find any application 时发生,可以打开此 URL(实际上,Facebook 试图找到他们的应用程序通过使用参数 "fbauth2:/" 调用 canOpenURL:
)。打印发生在函数内部,所以你不能用它做任何事情。
但是,如果您 运行 在安装了 Facebook 应用程序的设备上使用您的应用程序,您将不会看到此错误。
错误 308 发生的原因是,当存储在钥匙串中的值不等于存储在 facebook 完成参数中的值时(有关更多信息,您可以查看 -[FBSDKLoginManager completeAuthentication:expectChallenge:]
).
这是因为 Apple 在 iOS10 中更改了使用钥匙串的方式。要解决此问题,您只需转到 Targets->Capabilities 并启用钥匙串共享(它可以为您的应用程序访问钥匙串) ):
如果您正在使用 Xamarin(阅读此
Just make sure you enable the keychain access in Entitlements and select the entitlements for Simulator (Debug) builds too. By default this is not set.
就我而言,问题是 Google 分析。默认情况下,它似乎在应用程序的视图控制器之上添加了自己的视图控制器。 在 {Your app}-Info.plist 中将 "FirebaseAppDelegateProxyEnabled" 设置为 "NO" 解决了问题。
您收到以下错误的主要原因,
canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)
是您的iOS模拟器没有安装Facebook应用程序。在您将应用程序安装到 iOS 模拟器之前,您将继续收到错误消息。在安装了 Facebook 的已配置 iOS 设备上尝试 运行 您的 iOS 应用程序,您将不会再看到错误消息。希望这对您有所帮助!
同样的问题出现在我的应用程序中,我检查了很多解决方案但都不适合我。我已经使用以下方法解决了这个问题。
转到此 Link Select 您的应用程序并配置您的 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)
}
就我而言,修复是*:
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
推荐如果您使用的是 FBSDKCoreKit 或 FBSDKLoginKit 版本 4.39.0,也可能导致此错误。此版本的 SDK 中存在错误。升级到 4.39.1 或更高版本以修复它。详情 here.
附带说明一下,其他用户提到如果您没有在模拟器上安装 Facebook,就会看到此错误。没错,但 SDK 应该会在未安装应用程序时自动回退到 Web 登录方式。如果这没有发生,则可能是由其他问题引起的,例如 Info.plist 中的 missing/misconfigured 值(检查 LSApplicationQueriesSchemes)或 AppDelegate 中缺少方法。