Ошибка ACAccountStore 6 (ACErrorAccountNotFound) и 8
Я пытаюсь получить учетную запись из 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.)"
И я не могу найти ничего связанного, просто question. Любые идеи, что может быть неправильным?
Обновление
Я нашел это в Документах разработчика Apple.
Структура учетных записей
При запросе доступа к учетным записям Facebook единственным ключом, который требуется в вашем словаре опций, является ACFacebookAppIdKey. ACFacebookPermissionGroupKey и ACFacebookAppVersionKey теперь устарели.
Если вы запрашиваете разрешение на запись в ACFacebookPermissionsKey, , например publish_stream, вы должны указать значение для ACFacebookAudienceKey, которое может быть одним из ACFacebookAudienceEveryone, ACFacebookAudienceFriends, или ACFacebookAudienceOnlyMe.
Итак, я изменил свои параметры на:
NSDictionary *options = @{
@"ACFacebookAppIDKey": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"],
@"ACFacebookPermissionsKey": self.facebookPermissions,
@"ACFacebookAudienceKey": ACFacebookAudienceFriends
};
Но я получаю ту же ошибку.
Ответы
Ответ 1
Итак, если вы не настроили учетную запись из своих настроек в 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."];
});
}
}];
Ответ 2
jAmi имеет правильную идею, но мне не нравится идея магических чисел в коде. Существует перечисление, в которое встроены числа (ACErrorCode).
Ответ 3
Мое собственное решение состояло в том, чтобы использовать Facebook SDK вместо того, чтобы пытаться напрямую с lib и теперь он работает.