J'ai essayé d'implémenter la connexion Facebook avec un bouton de connexion personnalisé, j'ai effectué toutes les étapes de configuration et lorsque je touche le bouton, la vue web s'affiche et me demande de fournir la permission.
Cependant, si j'appuie sur Done (en haut à gauche du contrôleur de vue web), le bloc d'achèvement est appelé mais lorsque j'appuie sur Annuler ou OK, le contrôleur de la vue Web se ferme mais le bloc d'achèvement n'est jamais appelé ? Voici le code que j'ai utilisé :
let fbLoginManager = FBSDKLoginManager()
fbLoginManager.loginBehavior = .Native
fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self) { (result, error) in
// put a breakpoint here but it won't stop here if I tap OK
if error != nil {
print(error.localizedFailureReason)
} else if result.isCancelled {
// dismiss view
} else {
let token = result.token.tokenString
// do something with the token
}
}
EDIT 1
Voici la méthode d'ouverture de l'url dans AppDelegate :
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
return application(app, openURL: url, sourceApplication: nil, annotation: [:])
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
if url.scheme == Key.FACEBOOK_URL_SCHEME {
let handled = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
return handled
}
let dynamicLink = FIRDynamicLinks.dynamicLinks()?.dynamicLinkFromCustomSchemeURL(url)
if let dynamicLink = dynamicLink {
if let url = dynamicLink.url {
if let paths = url.pathComponents{
if paths.count > 2 {
let slug = paths[2]
if let book = AppManager.instance.findBookBySlug(slug) {
// Open detail book
self.openDetailBook(book)
} else {
self.openDetailBookWithSlug(slug)
}
}
}
}
}
if url.scheme == Key.DEEP_LINK_URL_SCHEME {
if let paths = url.pathComponents, host = url.host {
if host == "truyen" {
if paths.count > 1 {
let slug = paths[1]
if let book = AppManager.instance.findBookBySlug(slug) {
// Open detail book
self.openDetailBook(book)
} else {
self.openDetailBookWithSlug(slug)
}
}
}
}
}
return true
}