Facebook integration error (Accounts.framework) in iOS6

I am using the following code (shown in WWDC 2012 video):

self.accountStore = [[ACAccountStore alloc] init]; ACAccountType *facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; [self.accountStore requestAccessToAccountsWithType:facebookAccountType withCompletionHandler:^(BOOL granted, NSError *e) { if (granted) { NSArray *accounts = [self.accountStore accountsWithAccountType:facebookAccountType]; self.facebookAccount = [accounts lastObject]; } else { // Fail gracefully... } }]; 

I also added the NSDictionary file to my .plist :

enter image description here

So my problem is that I get the following exception:

  *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Access options are required for this account type.' 

I tried with this ACAccountTypeIdentifierTwitter and ACAccountTypeIdentifierSinaWeibo . I do not get any exceptions, although they always return granted == NO

+7
source share
2 answers

Well, WWDC 2012 shows one thing, but the documentation shows another ... The method they use is now deprecated:

 โ€“ requestAccessToAccountsWithType:withCompletionHandler: Deprecated in iOS 6.0 

What you should do:

 ACAccountType *facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; NSDictionary *options = @{ @"ACFacebookAppIdKey" : @"123456789", @"ACFacebookPermissionsKey" : @[@"publish_stream"], @"ACFacebookAudienceKey" : ACFacebookAudienceEveryone}; // Needed only when write permissions are requested [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error) { if (granted) { NSArray *accounts = [self.accountStore accountsWithAccountType:facebookAccountType]; self.facebookAccount = [accounts lastObject]; } else { NSLog(@"%@",error); // Fail gracefully... } }]; 
+17
source

Swift 3

 let account = ACAccountStore() let accountType = account.accountType(withAccountTypeIdentifier: ACAccountTypeIdentifierFacebook) let options: [AnyHashable : Any] = [ACFacebookAppIdKey: "Your App ID on FB", ACFacebookPermissionsKey: ["publish_stream", "publish_actions"], ACFacebookAudienceKey: ACFacebookAudienceEveryone] account.requestAccessToAccounts(with: accountType, options: options) { (success, error) in if success { if let accounts = account.accounts(with: accountType) { if accounts.isEmpty { print("No facebook account found, please add your facebook account in phone settings") } else { let facebookAccount = accounts.first as! ACAccount let message = ["status": "My first Facebook posting "] let requestURL = URL(string: "https://graph.facebook.com/me/feed") let postRequest = SLRequest(forServiceType: SLServiceTypeFacebook, requestMethod: SLRequestMethod.POST, url: requestURL, parameters: message) postRequest?.account = facebookAccount postRequest?.perform(handler: {(_, urlResponse, error) in if let err = error { print("Error : \(err.localizedDescription)") } print("Facebook HTTP response \(String(describing: urlResponse?.statusCode))") }) } } } else { print("Facebook account error: \(String(describing: error))") } } 
0
source

All Articles