2016-10-08 2 views
4

以下の機能を使ってFacebookにログインしていますが、Facebookログインページを開くには、xcode 8、swift 3、LoginManagerを使用したFacebook SDKのログインは、FBログインフォームを開くために2回クリックする必要があります。

私はすでにシミュレータとデバイスでテストしました。ログインボタンを初めてクリックすると、アプリケーションはloginManager.logIn(...)関数に行きますが、2回目のクリックまで完了ハンドラに入ることはありません。

誰にでもこの問題と解決方法がありますか?私はxCode 8とSwift 3を使用しています

private func loginWithFB(){ 
    let loginManager = LoginManager() 
    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): 

     } 
    } 
} 
+0

私はボタンを追加し、この機能にリンクします。私があなたの質問に答えたかどうか分からない? –

+0

と呼ば

let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() fbLoginManager.logIn(withReadPermissions: ["email"], from: self) { (result, error) in if (error == nil){ let fbloginresult : FBSDKLoginManagerLoginResult = result! if fbloginresult.grantedPermissions != nil { if(fbloginresult.grantedPermissions.contains("email")) { self.getFBUserData() fbLoginManager.logOut() } } } } func getFBUserData(){ if((FBSDKAccessToken.current()) != nil){ FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in if (error == nil){ self.dict = result as! [String : AnyObject] print(result!) print(self.dict) } }) } } 
kenvu

答えて

2

このコードは私のために働きます。補完ハンドラは、ボタンをタップするたびに呼び出されます。

Xcodeのバージョン - 8.0

FBSDK版 - 4.15.1

@IBAction func loginTest(_ sender: UIButton) { 
     let loginManager = FBSDKLoginManager() 
     loginManager.logIn(withReadPermissions:["public_profile","user_friends","email"], from: self) { 
      loginResult,error in 
      print("completion handler called") 
     } 
    } 
+0

スイフト3を使用していますか? – kenvu

+0

はい私はswift 3を使用しています –

+0

あなたのFB SDKのバージョンは不明ですか? – kenvu

2

はあなたappDelegateでこれを入れていますか?

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

    return SDKApplicationDelegate.shared.application(app, open: url, options: options) 

} 
1

私は同じ問題に直面しています。私はdidFinishLaunchingのFacebookloginを初期化します。ここで

は私のために働いコードです:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    FBSDKLoginManager.initialize() // Initialize facebook login 
    return true 
} 
0

だけ使用:

あなたはこのloginWithFB
関連する問題