Я обнаружил странную проблему с настройкой учетной записи iOS. Когда я работаю над Проблема с обновлением ACAccount, я обнаружил, что если пользователи войдут в facebook в настройках устройства после установки моего приложения, мое приложение не сможет получить доступ к учетной записи facebook.
Чтобы быть точным, мое приложение не будет отображаться в разделе «РАЗРЕШИТЬ ЭТИ ПРИЛОЖЕНИЯ ИСПОЛЬЗОВАТЬ ВАШУ УЧЕТНУЮ ЗАПИСЬ». Поэтому я провел несколько тестов по этой проблеме:
(1). Вход в Facebook после установки приложения -> не отображается
(1–1). Удалите приложение и переустановите -> не отображается
(2). Повторный вход в Facebook после установки приложения -> не отображается, и все приложения, которые были предоставлены или не предоставлены, также не будут отображаться.
(3). Вход в Facebook перед установкой приложения -> показано
И, как только проблема возникла, она необратима, независимо от того, повторно войдете ли вы в facebook, переустановите приложения или перезапустите устройство, это не решит проблему. В списке останутся только собственные приложения для iOS и приложение Facebook.
Был старый вопрос о this, но ответа на этот вопрос нет. Кто-нибудь сталкивался с такой же проблемой?
Обновлено 2013.11.20, 11:38
Я сделал две ошибки при использовании ACAccount, ниже приведен пример кода для получения доступа к учетной записи facebook:
// Check if store exists
if(!_accountStore)
_accountStore = [[ACAccountStore alloc] init];
ACAccountType *facebookTypeAccount = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
// Request access, note that one should not check if the account is available until the access right is granted
[_accountStore requestAccessToAccountsWithType:facebookTypeAccount
options:@{ACFacebookAppIdKey: @"FACEBOOK_API_KEY", ACFacebookPermissionsKey: @[@"read_stream"]}
completion:^(BOOL granted, NSError *error) {
if(granted){
NSArray *accounts = [_accountStore accountsWithAccountType:facebookTypeAccount];
_facebookAccount = [accounts lastObject];
NSLog(@"Success");
}else{
// ouch
_facebookAccount = nil;
NSLog(@"Failed, Error: %@", error);
dispatch_async(dispatch_get_main_queue(), ^{
NSString *message = [NSString stringWithFormat:@"No facebook account or access denied by user. Error:%@", error];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"系統提示" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
});
}
}];
Я проверяю количество аккаунтов, прежде чем получить к нему доступ.
Я не уверен, что это ошибка APPLE SDK, если я запрашиваю доступ к «publish_stream», запрос не будет выполнен.
Затем я увидел обсуждения ошибок, связанных с requestAccessToAccountsWithType, здесь. Говорят, что мы должны запрашивать разрешения дважды: одно для чтения и одно для записи.
Поэтому я меняю право доступа с «publish_stream» на «read_stream», и тогда все работает. Мое приложение снова отображается в списке.
Хотя запрос разрешения на запись не удался, но это не влияет на возможность публикации на поведение пользователя.
Обновлено 8.12.2014 00:31
maml сообщил, что в разрешении все еще может быть отказано после выполнения описанных выше действий, но приложение действительно отображается в настройках, что делает его можно включить.