我正在尝试使用社交和帐户框架登录 Facebook。
Facebook通过ios中的社交框架登录
关注这个问题并将代码转换为swift但出现错误
操作无法完成。(com.apple.accounts 错误 6。)
在目标 c 中找到许多关于堆栈溢出的问题,但在 swift 中找不到。
我的代码:
import Social
import Accounts
class ViewController: UIViewController {
var facebookAccount : ACAccount!
let appIdKey : NSString = "*************"
var facebookAccount : ACAccount!
var isFacebookAvailable = Int()
var globalMailId = NSString()
var fbName = NSString()
override func viewDidLoad() {
super.viewDidLoad()
self.accountStore = ACAccountStore()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func fbLogin(sender: UIButton) {
let accountType = self.accountStore.accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierFacebook)
var dictFB = [String : AnyObject]()
dictFB[ACFacebookAppIdKey] = "*************"
dictFB[ACFacebookPermissionsKey] = ["publish_profile","email","user_friends"]
dictFB[ACFacebookAudienceKey] = ACFacebookAudienceFriends
self.accountStore.requestAccessToAccountsWithType(accountType, options: dictFB) { (granted : Bool, error : NSError?) -> Void in
if granted {
let accounts : NSArray = self.accountStore.accountsWithAccountType(accountType)
self.facebookAccount = accounts.lastObject as! ACAccount
let facebookCredentials = self.facebookAccount.credentials
} else {
print("Error getting permission : \(error!.localizedDescription)")
self.isFacebookAvailable = 0
}
}
}
}
编辑1: 我已经像这样更新了我的代码
@IBAction func fbLogin(sender: UIButton) {
if SLComposeViewController.isAvailableForServiceType(SLServiceTypeFacebook) {
let accountType = self.accountStore.accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierFacebook)
var dictFB = [String : AnyObject]()
dictFB[ACFacebookAppIdKey] = "463272290501295"
dictFB[ACFacebookPermissionsKey] = ["publish_profile","email","user_friends"]
dictFB[ACFacebookAudienceKey] = ACFacebookAudienceFriends
self.accountStore.requestAccessToAccountsWithType(accountType, options: dictFB) { (granted : Bool, error : NSError?) -> Void in
if error != nil {
print("Error getting permission : \(error)")
} else {
print("granted : \(granted)") //print false here
if granted {
let accounts : NSArray = self.accountStore.accountsWithAccountType(accountType)
self.facebookAccount = accounts.lastObject as! ACAccount
let facebookCredentials = self.facebookAccount.credentials
} else {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.showAlert(nil, message: "Permission not granted For Your Application")
})
}
}
}
} else {
self.askForSettingsChange("Please login to a Facebook", message: "Go to settings to login Facebook")
}
}
func showAlert(title : String? , message : String?) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert)
let action = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
alert.addAction(action)
self.presentViewController(alert, animated: true, completion: nil)
}
func askForSettingsChange(title : String? , message : String?) {
let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
let settingAction = UIAlertAction(title: "Settings", style: .Default) { (action : UIAlertAction) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!) // go to settings
})
}
let cancelAction = UIAlertAction(title: "Cancel", style: .Default, handler: nil)
alertController.addAction(settingAction)
alertController.addAction(cancelAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
如果 facebook 用户存在或不存在,请检查手机设置,如果存在则继续,但它不会授予权限。