J'utilise facebook se connecter à api (SDK version Optional("4.1.0")
) dans Swift
dans mon application ios. J'ai placé le bouton de connexion de fb sur mon contrôleur de vue et quand l'utilisateur clique dessus - il ouvre le panneau de connexion de facebook dans le safari. Lorsque l'utilisateur met les informations d'identification et de clics Connectez-vous - il voit le message pop-up avec une question:"Ouvrir cette page dans APP_NAME" tout en utilisant facebook se connecter à api dans Swift
Open this page in APP_NAME?
Cancel OPEN
Je veux me débarrasser de cela et d'ouvrir l'application directement. Mon code qui gère le comportement du bouton est comme ceci:
class ViewController: UIViewController, FBSDKLoginButtonDelegate {
@IBOutlet weak var fbLoginButton: FBSDKLoginButton!
override func viewDidLoad() {
super.viewDidLoad()
fbLoginButton.readPermissions = ["public_profile", "email"]
fbLoginButton.layer.cornerRadius = 5
fbLoginButton.delegate = self
self.fbLoginButton.delegate = self
FBSDKProfile.enableUpdates(onAccessTokenChange: true)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if (FBSDKAccessToken.current() != nil){
let tokenAsAParam = [
"access_token":FBSDKAccessToken.current().tokenString!
]
let loginManager = FBSDKLoginManager()
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
let data:[String:AnyObject] = result as! [String : AnyObject]
let defaults = UserDefaults.standard
let firstName:String = data["first_name"] as! String!
defaults.set(firstName, forKey: "facebook_display_name")
defaults.synchronize()
}else {
print("fb error")
}
})
Alamofire.request("\(serverURL)/auth/facebook", method: .post, parameters: tokenAsAParam)
.validate()
.responseJSON { response in
switch(response.result) {
case .success:
self.performSegue(withIdentifier: "openMainApp", sender: self)
break
case .failure:
print(response.result.error)
loginManager.logOut()
break
}
}
}
Dans le code ci-dessus, je suis aller chercher les données de l'utilisateur de facebook et envoie le jeton à mon webservice pour valider il si l'utilisateur est réel ou non et faire des trucs backend.
Mon fichier Info.plist est:
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>fbXXXXXXXXXX</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>2XXXXXXXXXXX</string>
<key>FacebookDisplayName</key>
<string>xxxxxxxx</string>
<key>LSApplicationCategoryType</key>
<string></string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
Aussi, dans mon appDelegate j'ai les méthodes suivantes:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
print("SDK version \(FBSDKSettings .sdkVersion())")
...
return true
}
func application(_ application: UIApplication,
open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
// [END openurl]
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
mais il montre encore cette étrange Poppup au lieu d'ouvrir l'application normalement.
Est-ce que quelqu'un sait ce que je pourrais faire pour résoudre ce problème?