Как использовать Facebook iOS SDK на iOS 10
Я пытаюсь использовать Xcode 8 для создания приложения с использованием Facebook с помощью Swift 3. Когда я переключаю 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
. Функция SecItemUpdate
внутри security.framework
не работает. Это проблема IOS 10
Ответы
Ответ 1
Ошибка OSStatus -10814 возникает, когда canOpenURL:
не может найти какое-либо приложение, которое может открыть этот URL-адрес (фактически, Facebook пытается найти свое приложение, вызвав canOpenURL:
с аргументом "fbauth2:/" ). Печать происходит внутри функции, поэтому вы ничего не можете с этим сделать.
Но если вы запустите приложение на устройстве с установленным приложением Facebook, вы не увидите эту ошибку.
Ошибка 308 возникает из-за ситуации, когда значение, хранящееся в цепочке ключей, не равно значению, которое хранится в параметрах завершения facebook (для получения дополнительной информации вы можете проверить -[FBSDKLoginManager completeAuthentication:expectChallenge:]
).
Это происходит из-за того, что Apple изменила способ работы с keychain в iOS 10. Чтобы исправить эту проблему, вы просто должны перейти в Targets- > Capabilities и включить совместное использование ключей (он позволяет получить доступ к цепочке ключей для вашего приложения):
![image]()
Если вы используете Xamarin (читайте эту ссылку для получения дополнительной информации, спасибо @dynamokaj):
Просто убедитесь, что вы включили доступ к keychain в разделе "Права и выберите права на сборку Simulator (Debug). По умолчанию это не задано.
Ответ 2
Та же проблема была в моем приложении, я проверил много решений, но у меня не получилось. Я исправил эту проблему, используя метод ниже.
Перейдите по этой ссылке Выберите свое приложение и настройте ваш 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, вы продолжите получать ошибку. Попробуйте запустить приложение iOS на подготовленном iOS устройстве с установленным Facebook, и вы не увидите сообщение об ошибке снова. Надеюсь, это поможет!
Ответ 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 Github
Ответ 5
Эта ошибка также может быть вызвана, если вы используете FBSDKCoreKit или FBSDKLoginKit версии 4.39.0. В этой версии SDK была ошибка. Обновление до 4.39.1 или выше, чтобы исправить это. Подробности здесь.
В качестве примечания, другие пользователи отметили, что эта ошибка видна, если на симуляторе не установлен Facebook. Это правда, но SDK должен автоматически переключаться на метод веб-входа, когда приложение не установлено. Если этого не происходит, это может быть вызвано другой проблемой, например отсутствующими/неправильно настроенными значениями в вашем Info.plist (проверьте LSApplicationQueriesSchemes) или отсутствующими методами в вашем AppDelegate.
Ответ 6
В моем случае проблема была в Google Analytics. По умолчанию кажется, что он добавляет свой собственный контроллер просмотра поверх контроллера представления приложения.
Установка "FirebaseAppDelegateProxyEnabled" на "НЕТ" в {Ваше приложение} -Info.plist решила проблему.