104 votes

Comment utiliser le SDK Facebook iOS sur iOS 10

Je essaie d'utiliser Xcode 8 pour construire une application avec la connexion Facebook en utilisant Swift 3. Quand je reviens à 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 une solution pour cela ?

Note 1 :

Après le débogage, ce problème est que FBSDK ne peut pas mettre à jour expect_challange. La fonction SecItemUpdate à l'intérieur de security.framework ne fonctionne pas. C'est un problème de iOS 10

5 votes

"...pourquoi vous attendriez-vous à ce que cela fonctionne ?" Parce que le logiciel devrait fonctionner. Ce n'est pas la faute de ce gars, ce n'est pas la faute de Facebook. C'est la faute d'Apple. Ils s'en sortent parce que c'est une "version bêta", mais la rupture de Keychain est presque inacceptable, même en version bêta.

202voto

Roman Ermolov Points 61

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

Erreur 308 se produit en raison de la situation où la valeur stockée dans le trousseau n'est pas égale à la valeur stockée dans les paramètres de complétion Facebook (pour plus d'informations, vous pouvez consulter -[FBSDKLoginManager completeAuthentication:expectChallenge:]).

Cela arrive 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 de 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 les Attributs et de sélectionner les attributs pour les builds du simulateur (Debug) aussi. Par défaut, ce n'est pas défini.

2 votes

Merci beaucoup, avez-vous un document sur ce changement ?

0 votes

@trquoccuong Malheureusement, je ne trouve aucune mention de ce changement dans les notes de version / documentation.

0 votes

Pour l'erreur OSStatus -10814, je vois toujours l'erreur lorsque j'ai l'application Facebook sur mon iPhone, avec un écran blanc s'ouvrant dans mon application. Avez-vous une idée de ce qui pourrait se passer?

5voto

ZAFAR007 Points 835

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

Allez sur ce lien Sélectionnez votre application et configurez votre info.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)
}

4voto

umarqattan Points 377

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

canOpenURL: failed for URL: "fbauth2:/" - error: "L'opération n'a pas pu être terminée. (erreur OSStatus -10814.)

est que votre simulateur iOS n'a pas l'application Facebook installée. Jusqu'à ce que vous installiez l'application sur votre simulateur iOS, vous continuerez à recevoir 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 vous aidera!

0 votes

Il devrait ouvrir l'interface Web lorsque l'application fb n'est pas installée.

3voto

Rubén E. Marín Points 1208

Dans mon cas, la solution était* :

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 

  // Tout d'abord, traiter la demande d'ouverture d'URL Facebook
  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 
  } 

  // Ensuite, traiter toute autre réponse (par exemple, les liens profonds)
  handlerOtherUrls(url: url) 
  return true 
}

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

-3voto

da1 Points 41

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. En définissant "FirebaseAppDelegateProxyEnabled" sur "NON" dans {Votre app}-Info.plist, le problème a été résolu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X