Как использовать 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

 Jeff Holliday04 авг. 2016 г., 17:20
"... почему вы ожидаете, что это сработает?" Потому что софт должен работать. Это не вина этого парня, это не вина Facebook. Это вина Apple. Они получают пропуск, потому что это «бета», но взлом брелка практически недопустим даже в бета-версии.

Ответы на вопрос(6)

Эта ошибка также может быть вызвана, если вы используете FBSDKCoreKit или FBSDKLoginKit версии 4.39.0. В этой версии SDK произошла ошибка. Обновление до 4.39.1 или выше, чтобы исправить это. подробностиВот.

В качестве примечания, другие пользователи отметили, что эта ошибка видна, если на симуляторе не установлен Facebook. Это правда, но SDK должен автоматически возвращаться к методу веб-входа, когда приложение не установлено. Если этого не происходит, это может быть вызвано другой проблемой, например отсутствующими / неправильно настроенными значениями в вашем Info.plist (проверьте LSApplicationQueriesSchemes) или отсутствующими методами в вашем AppDelegate.

В моем случае исправление было *:

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 наСтраница Github в Facebook SDK

В моем случае проблема была в Google Analytics. По умолчанию кажется, что он добавляет свой собственный контроллер представления поверх контроллера представления приложения. Установка «FirebaseAppDelegateProxyEnabled» на «НЕТ» в {Your app} -Info.plist решила проблему.

Та же проблема была в моем приложении, я проверил много решений, но у меня не получилось. Я исправил эту проблему, используя метод ниже.

Перейти к этомуСсылка на сайт Выберите приложение и настройте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)
}
Решение Вопроса

Ошибка OSStatus -10814 происходит, когдаcanOpenURL: не могу найти приложение, который может открыть этот URL (на самом деле, Facebook пытается найти свое приложение, позвонивcanOpenURL: с аргументом "fbauth2: /"). Печать происходит внутри функции, поэтому с этим ничего не поделаешь. Но если вы запустите приложение на устройстве с установленным приложением Facebook, вы не увидите эту ошибку.

Ошибка 308 происходит из-за ситуации, когда значение, хранящееся в цепочке для ключей, не равно значению, которое хранится в параметрах завершения Facebook (дополнительную информацию вы можете проверить-[FBSDKLoginManager completeAuthentication:expectChallenge:]).

Это происходит потому, что Apple изменила способ работы с цепочкой для ключей в iOS 10. Чтобы решить эту проблему, вам просто нужно перейти в Targets-> Capabilities и включить совместное использование цепочки для ключей (это разрешает доступ к связке ключей для вашего приложения):

Если вы используетеXamarin (прочитай этоссылка на сайт за дополнительную информацию спасибо @dynamokaj):

Просто убедитесь, что вы включили доступ к цепочке для ключей в Entitlements и выберите разрешения для сборок Simulator (Debug). По умолчанию это не установлено.

 Ashish Verma19 дек. 2016 г., 13:01
Работал на меня, спасибо
 Roman Ermolov19 сент. 2016 г., 21:05
@dynamokaj Конечно, спасибо!
 JiteshW18 сент. 2016 г., 08:38
@RomanErmolov, у меня включено совместное использование цепочки для ключей с iOS 9, но все еще появляется ошибка -10814. Любая идея
 Rohit Tigga30 сент. 2016 г., 21:17
Как добавить общий доступ к связке ключей к идентификатору приложения, если у вас нет устройства iOS?
 Roman Ermolov18 сент. 2016 г., 09:44
@JiteshW ошибка -10814 не связана с совместным использованием брелка, перечитайте мой ответ.
 Adnan07 авг. 2016 г., 18:41
Вы такой спаситель, потратили 4 дня на эту проблему, пытаясь найти случайное решение.
 Alex Brown16 сент. 2016 г., 18:20
Вы абсолютный герой 💪
 trquoccuong06 авг. 2016 г., 03:58
Большое спасибо, У вас есть документ об этом изменении?
 Roman Ermolov15 сент. 2016 г., 16:38
@aznxfrost Не могли бы вы предоставить тестовый образец, который воспроизводит вашу проблему? Я не могу воспроизвести поведение, о котором вы говорите.
 Roman Ermolov18 сент. 2016 г., 22:55
@dynamokaj Нет, он должен работать как на симуляторе, так и на устройстве. Да, я не могу найти "Обмен ключами" в MemberCenter. Как вы управляете подписью приложения - автоматически с помощью Xcode или вручную?
 Renato Bezerra15 сент. 2016 г., 18:03
Tks. У меня была проблема при входе в систему с помощью cordova и cordova-plugin-facebook4, и этот ответ помог мне решить ее.
 Roman Ermolov09 сент. 2016 г., 18:16
@NikitaP, похоже, у вас есть опыт решения проблемы, о которой @ RoyKolak упоминает выше.
 Roman Ermolov30 авг. 2016 г., 22:15
@ NikitaP когда появляется пустой экран? Вы уверены, что это вызвано Facebook SDK?
 dynamokaj19 сент. 2016 г., 19:11
@RomanErmolov Я понял это, я на Xamarin и при сборке для отладки файл Entitlement.plist по умолчанию не используется. Когда я включил Право на отладку, это сработало. Следующее дало мне последний толчок к правильному решению.stackoverflow.com/a/39576798/1062572  - Может быть, вы могли бы обновить свой ответ, чтобы парням из Ксамарина было легче понять, что они пропали.
 Roman Ermolov09 сент. 2016 г., 17:19
@RoyKolak Только что проверил с Xcode 8 GM + FBSDKCoreKit 4.15.0 - он работает, когда включено совместное использование цепочки для ключей. Вы устанавливаете путь к новому Xcode сxcode-select?
 rayVenues21 сент. 2016 г., 14:43
Прекрасная работа! Я тянул за это волосы!
 Roy Kolak09 сент. 2016 г., 22:37
@NikitaP понял это. Это была сторонняя библиотека (CleverTap), которая пыталась автоматически интегрироваться в делегат приложения. Я ответил вstackoverflow.com/questions/39091841/... Спасибо за внимание!
 Roman Ermolov01 окт. 2016 г., 10:02
@RohitTigga что ты имеешь ввиду? Вам не нужно устройство, чтобы разрешить совместное использование цепочки для ключей.
 Pak Ho Cheung17 сент. 2016 г., 07:01
Вы спасли мою жизнь
 valheru12 нояб. 2016 г., 20:23
идеальный ответ, спасибо !!!!
 Hirbod15 сент. 2016 г., 14:27
Я мин Google, нашел этот ответ, он работает. Я люблю тебя!
 Jeremy15 сент. 2016 г., 15:54
Я все еще вижу 308 проблем в SDK 4.15.1 даже с включенными цепочками ключей. Наше приложение было отклонено, потому что команда разработчиков не смогла войти в новую тестовую среду iOS 10. Это не было проблемой в iOS 9. Ошибка возникает, только если на устройстве не установлено нативное приложение Facebook.
 Roman Ermolov30 авг. 2016 г., 22:13
@NikitaP SDK также проверяет, установлено ли приложение мессенджера Facebook, расширение для общего доступа или еще одно нераспознанное для меня (fbapi: //).
 Purushottam Padhya18 дек. 2018 г., 05:48
У меня похожая проблема com.facebook.sdk.login ошибка 308, и включение доступа к цепочке для ключей не решило проблему. Любое решение?
 Roman Ermolov09 сент. 2016 г., 17:50
@ RoyKolak Кажется, что проблема в способе представленияSFSafariViewController, Apple добавила некоторые условия в iOS 10, которые блокируют запрос на загрузку после представления контроллера. Я не знаком с этим делом, но я посмотрю, смогу ли я его воспроизвести и у меня будет достаточно свободного времени.
 Whitecat22 мар. 2018 г., 22:58
Как вы добираетесь до целей? Я запускаю приложение через ionic. Я не могу найти цели в XCode, он хочет, чтобы я начал новуюproject или жеworkspace
 dynamokaj19 сент. 2016 г., 18:58
@RomanErmolov Я установил симулятор iOS 9.3 в XCode 8, и я могу без проблем использовать вход в Facebook. Теперь я подожду, пока Facebook выпустит новый SDK с улучшенной поддержкой iOS 10.
 code_ada07 мая 2017 г., 14:02
Спасибо за объяснения, это действительно полезно @RomanErmolov. Что я не понимаю, так это то, почему пользователи должны иметь установленное приложение, они также не могут войти без приложения, кроме учетной записи Facebook?
 Roman Romanenko31 мая 2017 г., 09:21
@RomanErmolov, действительно полезный ответ! Но, скажите мне, пожалуйста, как я могу уловить ошибку в случае, если у пользователя нет установленного приложения Facebook, и обработать его. Причина теперь, обработчик ошибок не запускается, и у меня есть исключение в классе SDKSharingDelegateBridge в методе didFailWithError, и я получаю ту же ошибку 10814
 Nikita P09 сент. 2016 г., 23:22
@RoyKolak спасибо, но ничего такого для меня. Я думаю, что ссылка, которую вы предоставили, упоминает предупреждение о неправильном способе добавления контроллера subview / view. Вот в чем моя проблема.
 Kevin21 сент. 2016 г., 14:54
Отличное решение, это исправило мою [Error]: PFKeychainStore не удалось установить объект для ключа 'currentUser' с ошибкой: -34018 проблема.
 Roman Ermolov06 авг. 2016 г., 13:09
@trquoccuong К сожалению, я не могу найти упоминания об этом изменении в заметках к выпуску / документации.
 dynamokaj19 сент. 2016 г., 10:11
Подписание приложения @RomanErmolov выполняется в XCode при создании отладки для устройства. Однако, когда я строю для симулятора, я не думаю, что он вызывает какую-либо подпись?
 Roy Kolak09 сент. 2016 г., 16:47
У нас все еще есть эта проблема после попытки переключить «Общий доступ к брелкам». Между тем, мы видим, что такая же проблема возникает и для Google Sign. Запуск Xcode 8 GM с последними FBSDKCoreKit и FBSDKLoginKit, и я до сих пор вижу эту проблему.
 dynamokaj18 сент. 2016 г., 21:40
@RomanErmolov - Ваш ответ связан только с устройством? Я использую симулятор iOS 10 и устройство. Я могу работать на устройстве без проблем, но в симуляторе я получаю ошибку 308, даже если я включил общий доступ к связке ключей. Также я сомневаюсь, что совместное использование цепочки для ключей должно быть включено также в App MemberCenter? Я не вижу записи в их.
 Nikita P30 авг. 2016 г., 21:42
для ошибки OSStatus -10814, я все еще вижу ошибку, когда у меня есть приложение facebook на моем iPhone, с пустым экраном, открывающимся в моем приложении. Вы имеете представление о том, что может происходить?
 Rohit Tigga01 окт. 2016 г., 19:29
@RomanErmolov есть красная рамка, в которой написано, что у меня нет общего брелка с идентификатором приложения. как решить это?
 Nikita P09 сент. 2016 г., 00:24
@RomanErmolov так всякий раз, когда вызовFBSDKLoginManager«slogInWithReadPermissions:fromViewController:handler: вызывается, пользовательский интерфейс переходит на пустой экран + нет никакого обратного вызова обработчику, будь то ошибка или успех, пока я не нажму на готово, но для неявной отмены.
 Rohit Tigga14 окт. 2016 г., 00:59
Я перепробовал все, и не повезло: / у кого-нибудь есть понимание этого?stackoverflow.com/questions/40032147/...
 Roy Kolak09 сент. 2016 г., 17:38
После выхода из xcode, запустив,sudo xcode-select -switch /Applications/Xcode.app/Contents/Developerи пытается восстановить, все еще получая ту же проблему. Теперь я понимаю, что ошибка, которую я вижу, больше похожа на этуstackoverflow.com/questions/39091841/...

Основная причина, почему вы получаете следующую ошибку,

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

в том, что на вашем симуляторе iOS не установлено приложение Facebook. Пока вы не установите приложение на симуляторе iOS, вы продолжите получать сообщение об ошибке. Попробуйте запустить приложение iOS на подготовленном устройстве iOS с установленным Facebook, и вы больше не увидите сообщение об ошибке. Надеюсь это поможет!

Ваш ответ на вопрос