没有调用logInWithReadPermissions(fromViewController)处理程序

时间:2016-03-09 00:35:02

标签: ios swift facebook-graph-api

我正在尝试实现此功能,但它不会打印任何内容。

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>

1 个答案:

答案 0 :(得分: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
    }
}