2017-05-07 6 views
7

Ich benutze;facebook swift sdk 0.2.0 swift 3.1 Login-Seite bleibt geöffnet

  • swift sdk 0.2.0 und
  • swift 3,1

Also auf meinem viewcontroller (initial.swift) Ich habe

import UIKit 
import FacebookCore 
import FacebookLogin 
... 
override func viewDidLoad() { 
if let accessToken = AccessToken.current { 
    print("User is already logged in") 
    ... 
} 
else { 
    let loginButton = LoginButton(readPermissions: [ .publicProfile, .email ]) 
    loginButton.center = view.center 

    //AFTER ACTION 
    let loginManager = LoginManager() 
    loginManager.logIn([ .publicProfile, .email ], viewController: self) 
     { loginResult in 
      switch loginResult { 
      case .failed(let error): 
       print(error) 
       break 
      case .cancelled: 
       print("User cancelled login.") 
      case .success(let grantedPermissions, let declinedPermissions, let accessToken): 
       print("Logged in!") 
      } 
     } 
}  

Login-Button zeigt sich wie erwartet, aber nach Genehmigung Seite, weiße Seite bleibt offen, wenn ich manuell auf "fertig" klicke, denkt App, dass der Benutzer die Anmeldung abgebrochen hat.
Es gibt ähnliche Themen vorschlagen fehlende app delegate Funktionen (34734885), aber ich denke, es ist eine Lösung für FBSDKCoreKit und FBSDKLoginKit, nicht für neue facebook swift sdk. Nochmal, schätze ich. Irgendein Vorschlag?

BEARBEITEN
Ich habe auch dieses eine versucht;

let myLoginButton = UIButton() 
myLoginButton.backgroundColor = UIColor.darkGray 
myLoginButton.frame = CGRect(0, 0, 180, 40); 
myLoginButton.center = view.center; 
myLoginButton.setTitle("My Login Button", for: UIControlState.normal) 
// Add the button to the view 
view.addSubview(myLoginButton) 
// Handle clicks on the button 
myLoginButton.addTarget(self, action: #selector(self.FBloginButtonClicked), for: UIControlEvents.touchUpInside) 


@objc func FBloginButtonClicked() { 
    //AFTER ACTION 
    let loginManager = LoginManager() 
    loginManager.logIn([ .publicProfile, .email ], viewController: self) 
    { loginResult in 
     switch loginResult { 
     case .failed(let error): 
      print(error) 
      break 
     case .cancelled: 
      print("User cancelled login.") 
     case .success(let grantedPermissions, let declinedPermissions, let accessToken): 
      print("Logged in!") 
     } 
    } 
} 
+0

Haben Sie eine Methode geschrieben, um in AppDelegate zu Ihrer Anwendung zurückzukehren? –

Antwort

0

Wie ich verstehe Sie alles entsprechend facebook guide?

Einschließlich dieser Teil hat:

// Handle clicks on the button 
    myLoginButton.addTarget(self, action: @selector(self.loginButtonClicked) forControlEvents: .TouchUpInside) 

Und

// Once the button is clicked, show the login dialog 
@objc func loginButtonClicked() { 
    let loginManager = LoginManager() 
    ... 
    } 
+0

Ich habe diese auch versucht, Frage auch mit diesem Block zu aktualisieren. –

0

Per Verständnis Ihrer Frage, Sie scheint einen schreiben Methode in appdelegate. Dies wird nach erfolgreicher Anmeldung zu Ihrer Anwendung zurückkehren.

import FacebookCore // (FBSDKCore's alternative for swift) 

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { 
    let isFBOpenUrl = SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) 

    if isFBOpenUrl { return true } 
    return false 
} 

SWIFT 4:

func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey:Any] = [:]) -> Bool { 
     return SDKApplicationDelegate.shared.application(application, open: url, options: options) 
    } 

Hoffnung dieses Ding Ihnen helfen.