Як користуватися Facebook iOS SDK на iOS 10


104

Я намагаюся використовувати 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
"... чому ви б очікували, що це спрацює?" Тому що програмне забезпечення повинно працювати. Це не вина цього хлопця, це не вина Facebook. Це вина Apple. Вони отримують пропуск, тому що це "бета", але зламати брелок майже неприпустимо, навіть у бета-версії.
Джефф Холлідей

Відповіді:


201

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

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

Це відбувається тому, що Apple змінила спосіб роботи з брелоком в iOS 10. Щоб виправити цю проблему, вам просто слід перейти до Цілі-> Можливості та включити обмін брелоками (це дозволяє отримати доступ до брелка для вашого додатка): зображення

Якщо ви використовуєте Xamarin (прочитайте це посилання для отримання додаткової інформації, дякую @dynamokaj):

Просто переконайтеся, що ви включили доступ до брелоку в Entitlements і виберіть права для побудови Simulator (налагодження). За замовчуванням це не встановлено.


2
велике дякую, чи є у вас документ про цю зміну?
trquoccuong

1
Після виходу з xcode, запуску sudo xcode-select -switch /Applications/Xcode.app/Contents/Developerта спроби відновлення все ще виникає та сама проблема. Тепер я розумію, що помилка, яку я бачу, є більш подібною до цього stackoverflow.com/questions/39091841/…
Рой Колак

1
@NikitaP, здається, у вас є досвід проблеми, про яку згадує @ RoyKolak.
Роман Єрмолов

1
@NikitaP придумав це. Це бібліотека сторонніх розробників (CleverTap), яка намагалася автоматично інтегруватися в делегат програми. Я відповів stackoverflow.com/questions/39091841/… Дякую за увагу!
Рой Колак

3
@RomanErmolov Я зрозумів це, я перебуваю на Xamarin, і при побудові для налагодження файл Entitlement.plist не використовується за замовчуванням. Коли я включив Право на налагодження, він спрацював. Наступне підштовхнуло мене до правильного рішення. stackoverflow.com/a/39576798/1062572 - Можливо, ви могли б оновити свою відповідь, щоб полегшити хлопцям Ксамаріна зрозуміти, чи не вистачає вони.
динамокай

5

Та ж проблема була в моєму додатку, я перевірив багато рішень, але не працював на мене. Я вирішував цю проблему, використовуючи метод нижче.

Перейдіть до цього посилання Виберіть додаток і налаштуйте свій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)
}

4

Основна причина, чому ви отримуєте таку помилку,

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

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


Він повинен відкрити веб-інтерфейс, коли програма fb не встановлена.
Softlion

3

У моєму випадку виправлення було *:

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


0

Ця помилка також може бути спричинена, якщо ви використовуєте FBSDKCoreKit або FBSDKLoginKit версії 4.39.0. У цій версії SDK виникла помилка. Оновіть версію до 4.39.1 або вище, щоб виправити це. Деталі тут .

В якості додаткової примітки інші користувачі згадали, що ця помилка виявляється, якщо у вас на тренажері не встановлено Facebook. Це правда, але SDK повинен автоматично переходити до методу веб-входу, коли додаток не встановлено. Якщо цього не сталося, це може бути викликано іншою проблемою, наприклад відсутніми / неправильно налаштованими значеннями у вашому Info.plist (перевірте LSApplicationQueriesSchemes) або відсутніми методами у вашому AppDelegate.


-3

У моєму випадку проблема була в Google Analytics. За замовчуванням здається, що він додає власний контролер подання поверх контролера перегляду додатків. Встановлення "FirebaseAppDelegateProxyEnabled" на "НІ" в {Твій додаток} -Info.plist вирішило проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.