2016-03-09 4 views
1

Я пытаюсь реализовать это, но он ничего не печатает.logInWithReadPermissions (fromViewController) обработчик не вызван

loginManager.logInWithReadPermissions(["email"], fromViewController: self.parentViewController) { (result, error) -> Void in 
    print("hi") 
} 

Я могу распечатать до и после этого вызова метода, но не в обработчике. Единственная ошибка в консоли:

-canOpenURL: failed for URL: "fbauth2:/" 

Который, согласно FB, могут быть проигнорированы (https://developers.facebook.com/docs/ios/ios9)

Вот весь ViewController:

import UIKit 
import FBSDKCoreKit 
import FBSDKLoginKit 

class ViewController: UIViewController, FBSDKLoginButtonDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     if FBSDKAccessToken.currentAccessToken() != nil { 
      // User already has access token 
      logUserData() 
     } else { 
      let loginButton = FBSDKLoginButton() 
      loginButton.center = view.center 
      loginButton.readPermissions = ["email", "posts"] 
      view.addSubview(loginButton) 
      loginButton.delegate = self 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    // MARK: - FBSDKLoginButtonDelegate methods 

    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { 
     print("logged in") 
    } 

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) { 
     print("logged out") 
    } 

    private func logUserData() { 
     let loginManager = FBSDKLoginManager()   

     loginManager.logInWithReadPermissions(["email"], fromViewController: self.parentViewController) { (result, error) -> Void in 
      print("hi") 
     } 
    } 
} 

Редактировать Вот что я добавил в мой .plist:

<key>CFBundleURLTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleURLSchemes</key> 
      <array> 
       <string>fb983308525071081</string> 
      </array> 
     </dict> 
    </array> 
    <key>FacebookAppID</key> 
    <string>983308525071081</string> 
    <key>FacebookDisplayName</key> 
    <string>Demo</string> 

    <key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSExceptionDomains</key> 
     <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> 
      <key>akamaihd.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> 
+0

ли вы указали следующие ключи в вашем .plist: LSApplicationQueriesSchemes, FacebookAppID? – Terry

+0

да, см. Править, выше – Morgan

ответ

2

ОК, так что я в конечном итоге просто запрашивает разрешения на входе, при создании кнопки:

loginButton.readPermissions = ["email", "user_posts"]

Вот viewDidLoad() метод:

override func viewDidLoad() { 
    super.viewDidLoad() 

    if FBSDKAccessToken.currentAccessToken() != nil { 
     let parameters = ["fields": "id, name, email, posts{story,created_time,id,message,picture,likes}"] 
     let request = FBSDKGraphRequest(graphPath: "me", parameters: parameters) 
     request.startWithCompletionHandler({ (connection, result, error) -> Void in 
      print("request.startWithCompletionHandler") 
      if error != nil { 
       print(error) 
      } else { 
       print(result) 
      } 
     })   
    } else { 
     let loginButton = FBSDKLoginButton() 
     loginButton.center = view.center 
     loginButton.readPermissions = ["email", "user_posts"] 
     view.addSubview(loginButton) 
     loginButton.delegate = self 
    } 
} 
Смежные вопросы