我正在尝试实现此功能,但它不会打印任何内容。
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 :(得分: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
}
}