Подтвердить что ты не робот

Ошибка 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
    };

Но я получаю ту же ошибку.

4b9b3361

Ответ 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 и теперь он работает.