J'essaie actuellement de mettre en œuvre la connexion à Facebook avec la version 4.0 du SDK. Cela se produit également avec la version 3. +. Lorsque j'appelle logInWithReadPermissions (version 4.0) ou openActiveSessionWithReadPermissions (version 3. +). La fermeture/le bloc est appelé immédiatement avec isCancelled (version 4.0) et ClosedFailedLogin (version 3. +) avant que l'utilisateur puisse effectuer une sélection ( annuler ou ok ). Je pensais que cela pouvait être un problème avec le schéma d'URL dans mes paramètres de pliste, mais je l'ai vérifié encore et encore et tout semble être correct. Je me demandais simplement si quelqu'un pouvait avoir des idées pour résoudre ce problème. Mon identifiant de paquet est correct, la connexion unique est activée, l'application native est activée dans la console de développement de Facebook. Voir des exemples de code et de configurations ci-dessous (version 4.0).
Login Call:
AppDélégué:
Pliste:
J'ai eu quelques problèmes mais j'ai trouvé une solution de contournement. Vous pouvez configurer le comportement de connexion du gestionnaire de connexion pour utiliser les informations de Facebook sur le téléphone. Le comportement par défaut est FBSDKLoginBehaviorSystemNative et essaie d'utiliser l'application Facebook en premier. S'il n'y est pas présent, il utilise un modal Web.
Au lieu de procéder ainsi et de contourner les URL qui ne semblent pas fonctionner, vous pouvez définir le comportement de connexion comme suit: FBSDKLoginBehaviorSystemAccount .
Longue histoire courte, essayez:
let fbLoginManager = FBSDLoginManager();
fbLoginManager.loginBehavior = FBSDKLoginBehaviorSystemAccount;
// call login method of choice here
Avec le Kit de développement logiciel (SDK) Facebook version 4, je n'avais qu'à l'ajouter à mon délégué d'application sur iOS 10 et Swift 3 pour que l'authentification fonctionne. Avant cela, je n'avais que des connexions annulées.
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
J'ai la même méthode de connexion problème toujours retourner canacelled alors j'ajoute des choses ci-dessous dans info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>akamaihd.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>facebook.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>fbcdn.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
et dans AppDelegate update didFinishLaunching et ajoutez une nouvelle méthode comme ci-dessous
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
{
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
La méthode de connexion est donnée ci-dessous:
@objc func loginButtonClicked() {
let loginManager = LoginManager()
loginManager.loginBehavior = .systemAccount
loginManager.logIn([ .publicProfile,.userFriends,.email ], viewController: self) { loginResult in
switch loginResult {
case .failed(let error):
print(error)
case .cancelled:
print("User cancelled login.")
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
print("Logged in!")
//Do further code...
}
}
}
cela fonctionne pour moi dans Swift 3.0 et SDK 4.17.0 , j'espère que cela fonctionnera pour vous Merci.
Avez-vous ajouté une fonction à AppDelegate?
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
J'ai aussi ce problème. Il s'est avéré que l'identifiant de l'ensemble d'applications (dans la configuration du projet) ne correspond pas à l'identifiant d'ensemble de l'application configuré dans le tableau de bord de l'application facebook. Après avoir corrigé l'identifiant du bundle, la connexion a bien fonctionné.
J'espère que ça aide quelqu'un.
J'ai eu un problème très similaire lors de l'ajout de LoginButton dans mon application en suivant ce tutoriel → https://developers.facebook.com/docs/Swift/login .
Après avoir cliqué sur le bouton Facebook Connect et terminé l'autorisation, il revient toujours avec le statut 'annulé'. J'ai essayé de nombreuses solutions et j'ai finalement réussi à ce qui suit:
Dans AppDelegate.Swift , ajoutez les 2 fonctions suivantes:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return SDKApplicationDelegate.shared.application(application, open: url, options: options)
}
J'ai trouvé que la méthode AppDelegate incorrecte était appelée. Il appelait
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {...
au lieu de
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {...
J'ai donc dû ajouter ceci à la première méthode AppDelegate (celle qui était appelée):
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: "com.Apple.mobilesafari", annotation: nil)
Notez que je devais passer explicitement l’ID du bundle Safari, sinon le délégué du compte FB aurait isCancelled = true
J'ai également été confronté à ce problème depuis un mois. J'intégrais Facebook Login avec Firebase dans ios 10 Swift 3. Enfin, je suis en mesure de le mettre en œuvre avec succès. Je l'ai corrigé en apportant les modifications suivantes au fichier AppDelegate.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FIRApp.configure()
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
return true
}
@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
-> Bool {
var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!,annotation: options[UIApplicationOpenURLOptionsKey.annotation])
return shouldOpen
}
// for iOS below 9.0
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,open: url as URL!,sourceApplication: sourceApplication,annotation: annotation)
return shouldOpen
}
J'espère que cela pourrait aider les autres
testé sur l'émulateur ios 10.2, iPhone 6 Plus fonctionnant avec 10.2
Mon problème a été causé par ma présentation modale d’un contrôleur de vue de chargement, qui m’a été renvoyé lorsque la vue a disparu. Étant donné que FBSDK appelle la méthode viewWillDisappear lors de la transition vers Safari ou l'application, il fermait la vue et l'écran de connexion au FB. La même chose peut arriver si vous présentez la connexion via un UIAlertController.
Dans mon cas, en utilisant React-Native, FacebookSDK et Deeplink ensemble, je n'ai besoin que d'un seul openUrl dans AppDelegate.m. Des explications plus détaillées se trouvent dans https://github.com/facebook/react-native-fbsdk/blob/master/README.md#32-ios-project
J'ai eu le même problème. Ne mélangez pas FBSDKApplicationDelegate et SDKApplicationDelegate
Résolu avec le prochain code Swift 4 dans AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let appId = SDKSettings.appId
if url.scheme != nil && url.scheme!.hasPrefix("fb\(appId)") && url.Host == "authorize" { // facebook
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
return false
}