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

5 101

5 ответов:

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

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

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

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

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

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

на этот ссылке выберите приложение и настройте его info.plist

import и добавьте этот код в свой AppDelegate

импорт FBSDKCoreKit импорт 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)
}

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

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

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

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

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 at страница GitHub в Facebook SDK

в моем случае, проблема была Google Analytics. По умолчанию кажется, что он добавляет свой собственный контроллер вида поверх контроллера вида приложения. Установка " FirebaseAppDelegateProxyEnabled "на" нет " в {your app}-Info.плист решил проблему.