我试图使用以下代码从ACAccountStore获得一个帐户:
- (void) facebookLoginOnSuccess: (void (^)(void)) successBlock onError:(void(^)(NSError *error))errorBlock{
self.facebookPermissions = @[
@"offline_access",
@"publish_stream",
@"user_birthday",
@"user_location",
@"email"
];
NSDictionary *options = @{
@"ACFacebookAppIDKey": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"],
@"ACFacebookAppVersionKey": @"1.0",
@"ACFacebookPermissionsKey": self.facebookPermissions,
@"ACFacebookPermissionGroupKey": @"write"
};
[self accountLoginFor:ACAccountTypeIdentifierFacebook withOptions:options OnSuccess:successBlock onError:errorBlock];
}
- (void) accountLoginFor: (NSString *) accountTypeID withOptions: (NSDictionary *) options OnSuccess: (void (^)(void)) successBlock onError:(void(^)(NSError *error))errorBlock{
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:accountTypeID];
[accountStore requestAccessToAccountsWithType:accountType
options:options
completion:^(BOOL granted, NSError *error){
if (granted){
NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];
NSLog(@"%@",accountsArray);
}
else {
NSLog(@"Error accessing account: %@", [error localizedDescription]);
}
}];
}但我发现了一个错误:
Error Domain=com.apple.accounts Code=6 "The operation couldn't be completed. (com.apple.accounts error 6.)"我找不到任何相关的东西,只有这个问题。有什么不对的吗?
更新
我在Apple Developer Docs上发现了这个。
帐户框架 当请求访问Facebook帐户时,选项字典中唯一需要的键是ACFacebookAppIdKey。ACFacebookPermissionGroupKey和ACFacebookAppVersionKey现在已经过时了。 如果在ACFacebookPermissionsKey、(如publish_stream )下请求写权限,则必须为ACFacebookAudienceKey提供一个值,该值可以是ACFacebookPermissionsKey或ACFacebookAudienceOnlyMe.之一。
所以我改变了我的选择:
NSDictionary *options = @{
@"ACFacebookAppIDKey": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"],
@"ACFacebookPermissionsKey": self.facebookPermissions,
@"ACFacebookAudienceKey": ACFacebookAudienceFriends
};但我也犯了同样的错误。
发布于 2012-10-16 10:31:44
好的,如果您还没有在iOS 6中的设置中设置一个帐户,它会抛出错误代码6。如果用户只是拒绝权限,而不是抛出错误代码7。在第6种情况下,我建议您要求用户首先在设置中设置她的帐户。
NSDictionary *options = @{
ACFacebookAppIdKey: @"1234567890",
ACFacebookPermissionsKey: @[@"publish_stream"],
ACFacebookAudienceKey: ACFacebookAudienceFriends
};
[self.accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error)
{
if (granted)
{
NSArray *accounts = [self.accountStore accountsWithAccountType:facebookAccountType];
if([accounts count]>0)
self.facebookAccount = [accounts lastObject];
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
// Fail gracefully...
NSLog(@"%@",error.description);
if([error code]== ACErrorAccountNotFound)
[self throwAlertWithTitle:@"Error" message:@"Account not found. Please setup your account in settings app."];
else
[self throwAlertWithTitle:@"Error" message:@"Account access denied."];
});
}
}];发布于 2012-11-05 19:41:21
jAmi有正确的想法,但我不喜欢代码中的神奇数字。有一个枚举,它内置了数字(ACErrorCode)。
发布于 2012-10-04 20:56:37
我自己的解决方案是使用Facebook,而不是直接尝试使用库,现在它已经开始工作了。
https://stackoverflow.com/questions/12630066
复制相似问题