Comment utiliser le SDK Facebook iOS sur iOS 10

104

J'essaie d'utiliser Xcode 8 pour créer une application avec connexion Facebook en utilisant Swift 3. Lorsque je repasse iOS Simulator 9.3, cela fonctionne. Dans iOS 10, je reçois cette erreur:

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

et

Optional(Error Domain=com.facebook.sdk.login Code=308 "(null)")

Quelqu'un a-t-il une solution pour cela?

Note 1 :

Après le débogage, ce problème est FBSDK ne peut pas être mis à jour expect_challange. La fonction à l' SecItemUpdateintérieur security.frameworkne fonctionne pas. C'est un problème d'IOS 10

trquoccuong
la source
5
«... pourquoi vous attendez-vous à ce que cela fonctionne? Parce que le logiciel doit fonctionner. Ce n'est pas la faute de ce type, ce n'est pas la faute de Facebook. C'est la faute d'Apple. Ils obtiennent un laissez-passer parce que c'est "bêta", mais casser le trousseau est presque inacceptable, même en version bêta.
Jeff Holliday

Réponses:

201

L'erreur OSStatus -10814 se produit lorsque canOpenURL: vous ne trouvez aucune application pouvant ouvrir cette URL (en fait, Facebook essaie de trouver son application en appelant canOpenURL:avec l'argument "fbauth2: /"). L'impression se produit à l'intérieur de la fonction, vous ne pouvez donc rien faire avec cela. Mais si vous exécutez votre application sur un appareil avec l'application Facebook installée, vous ne verrez pas cette erreur.

L'erreur 308 se produit en raison de la situation, lorsque la valeur, stockée dans le trousseau, n'est pas égale à la valeur, qui est stockée dans les paramètres d'achèvement de Facebook (pour plus d'informations, vous pouvez vérifier -[FBSDKLoginManager completeAuthentication:expectChallenge:]).

Cela se produit parce qu'Apple a changé la façon de travailler avec le trousseau dans iOS 10. Pour résoudre ce problème, vous devez simplement aller dans Cibles-> Capacités et activer le partage du trousseau (cela permet d'accéder au trousseau pour votre application): image

Si vous utilisez Xamarin (lisez ce lien pour plus d'informations, merci @dynamokaj):

Assurez-vous simplement d'activer l'accès au trousseau dans Droits et sélectionnez également les droits pour les builds Simulator (Debug). Par défaut, ce n'est pas défini.

Roman Ermolov
la source
2
merci beaucoup, avez-vous un document sur ce changement?
trquoccuong
1
Après avoir quitté xcode, exécuté sudo xcode-select -switch /Applications/Xcode.app/Contents/Developeret essayé de reconstruire, vous rencontrez toujours le même problème. Je me rends compte maintenant que l'erreur que je vois est plus similaire à ce stackoverflow.com/questions/39091841/...
Roy Kolak
1
@NikitaP, il semble que vous ayez de l'expérience avec le problème mentionné ci-dessus par @ RoyKolak.
Roman Ermolov
1
@NikitaP l'a compris. C'était une bibliothèque tierce (CleverTap) qui essayait de s'intégrer automatiquement dans le délégué d'application. J'ai répondu dans stackoverflow.com/questions/39091841/ ... Merci pour votre attention!
Roy Kolak le
3
@RomanErmolov Je l'ai compris, je suis sur Xamarin et lors de la construction pour le débogage, le fichier Entitlement.plist n'est pas utilisé par défaut. Lorsque j'ai inclus le droit au débogage, cela a fonctionné. Ce qui suit m'a donné la dernière impulsion vers une solution appropriée. stackoverflow.com/a/39576798/1062572 - Vous pourriez peut-être mettre à jour votre réponse pour permettre aux mecs Xamarin de déterminer plus facilement s'ils manquent.
dynamokaj
5

Le même problème était dans mon application, j'ai vérifié de nombreuses solutions mais cela ne fonctionne pas pour moi. J'ai résolu ce problème en utilisant la méthode ci-dessous.

Accédez à ce lien Sélectionnez votre application et configurez votreinfo.plist

import et ajoutez ce code dans votre 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)
}
ZAFAR007
la source
4

La principale raison pour laquelle vous obtenez l'erreur suivante,

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

est que l'application Facebook n'est pas installée sur votre simulateur iOS. Jusqu'à ce que vous installiez l'application sur votre simulateur iOS, vous continuerez à obtenir l'erreur. Essayez d'exécuter votre application iOS sur un appareil iOS provisionné avec Facebook installé et vous ne verrez plus le message d'erreur. J'espère que cela t'aides!

umarqattan
la source
Il devrait ouvrir l'interface utilisateur Web lorsque l'application fb n'est pas installée.
Softlion
3

Dans mon cas, le correctif était *:

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 
}

* Comme recommandé par @MoridinBG sur la page Github de Facebook SDK

Ruben Marin
la source
0

Cette erreur peut également être provoquée si vous utilisez FBSDKCoreKit ou FBSDKLoginKit version 4.39.0. Il y avait un bogue dans cette version du SDK. Passez à la version 4.39.1 ou supérieure pour résoudre ce problème. Détails ici .

En remarque, d'autres utilisateurs ont mentionné que cette erreur se produit si Facebook n'est pas installé sur le simulateur. C'est vrai, mais le SDK est censé revenir automatiquement à la méthode de connexion Web lorsque l'application n'est pas installée. Si cela ne se produit pas, cela peut être dû à un autre problème tel que des valeurs manquantes / mal configurées dans votre Info.plist (vérifiez LSApplicationQueriesSchemes) ou des méthodes manquantes sur votre AppDelegate.

Commandant du code
la source
-3

Dans mon cas, le problème était Google Analytics. Par défaut, il semble qu'il ajoute son propre contrôleur de vue au-dessus du contrôleur de vue de l'application. La définition de "FirebaseAppDelegateProxyEnabled" sur "NO" dans {Votre application} -Info.plist a résolu le problème.

da1
la source