Сохранить учетную запись Facebook с помощью ACAccountStore

Я пытаюсь использовать iOS Social.framework для публикации в Facebook. Однако у большинства пользователей не будет настройки Facebook в «Настройки»> «Facebook», поэтому Facebook не отображается, когда вы вызываете UIActivityViewController, его просто нет в списке. (См. UIActivity без настроек для Facebook или просто погуглите "facebook не показать в UIActivityViewController", есть много людей, пытающихся решить эту проблему.)

Наше приложение уже использует Facebook SDK, поэтому я могу получить информацию об учетной записи Facebook, поэтому я решил просто получить информацию, а затем сохранить ее в «Настройки»> «Facebook». Вот мой код. (Который я получил от Когда мы используем saveAccount:(ACAccount * ) учетная запись класса ACAccountStore? и iOS requestAccessToAccountsWithType не отображается Запрос разрешения / NSAlert)

- (void)storeAccountWithAccessToken:(NSString *)token secret:(NSString *)secret {

    if (self.accountStore == nil) {
        self.accountStore = [[ACAccountStore alloc] init];
    }

    //We start creating an account by creating the credentials object
    ACAccountCredential *credential = [[ACAccountCredential alloc] initWithOAuthToken:token tokenSecret:secret];
    ACAccountType *acctType =[self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    ACAccount *newAccount = [[ACAccount alloc] initWithAccountType:acctType];
    //Here we assign credentials and now can save account
    newAccount.credential = credential;

    NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
                             [VVEnvironment stringForKey:kVVEnvironmentKeyFacebookAppID], (NSString *)ACFacebookAppIdKey,
                             [NSArray arrayWithObject:@"basic_info"], (NSString *)ACFacebookPermissionsKey,
                             ACFacebookAudienceEveryone, (NSString *)ACFacebookAudienceKey,
                             nil];


    [_accountStore requestAccessToAccountsWithType:acctType options:options completion:^(BOOL granted, NSError *error) {
        if (granted == YES) {
            [self.accountStore saveAccount:newAccount withCompletionHandler:^(BOOL success, NSError *error) {

                if (success) {
                    NSLog(@"the account was saved!");
                }
                else {
                    if ([error code] == ACErrorPermissionDenied) {
                        NSLog(@"Got a ACErrorPermissionDenied, the account was not saved!");
                    }
                    NSLog(@"the account was not saved! %d, %@", [error code], error);
                }
            }];
        }
        else {
            NSLog(@"ERR: %@ ",error);
        }
    }];
}

Я добавил туда вызов requestAccessToAccountsWithType, потому что без него я получал ACErrorPermissionDenied от saveAccount. Когда я запускаю это, я вижу, как мое приложение ненадолго отодвигается в сторону диалогового окна Facebook (если я удаляю свое приложение на веб-сайте Facebook, оно вызывает полный диалог, запрашивающий у меня разрешения, которые я даю.)

Проблема в том, что предоставлено всегда НЕТ, поэтому у меня никогда не было возможности сохранить учетную запись. Что мне здесь не хватает?

Я запускаю это на реальном устройстве, на котором установлено и настроено приложение Facebook.

Буду признателен за любую помощь в этом, спасибо!


person Paul Cezanne    schedule 05.12.2013    source источник
comment
Неужели это 1 решено? и можете ли вы сказать о том, как вы отделили токен и секрет от [FBSession activeSession] accessTokenData.accessToken] Am также в той же ситуации..   -  person Rafeek    schedule 09.01.2014
comment
Я не смог решить это.   -  person Paul Cezanne    schedule 09.01.2014
comment
Просто интересно, пробовали ли вы saveAccount перед requestAccessTo...?   -  person theLastNightTrain    schedule 27.07.2014
comment
Да, из вопроса: я добавил туда вызов requestAccessToAccountsWithType, потому что без него я получал ACErrorPermissionDenied обратно от saveAccount.   -  person Paul Cezanne    schedule 27.07.2014
comment
Так что кажется, что это работает для Twitter (согласно вопросу, на который вы ссылаетесь), но не для Facebook. Очень расстраивает — в идеале нам даже не нужно было бы использовать FacebookSDK, если нам нужны только функции регистрации/входа/совместного использования. Я надеялся, что это будет возможно только с социальной структурой.   -  person theLastNightTrain    schedule 06.08.2014
comment
И да и нет. Нет необходимости сохранять учетную запись для Twitter, так как приложение Twitter сохраняет ее для вас. Таким образом, общий вариант использования уже рассмотрен. И да, просто использовать Social было бы идеально.   -  person Paul Cezanne    schedule 06.08.2014
comment
Удалось ли вам протолкнуться с этим решением?   -  person KarenAnne    schedule 08.05.2015
comment
Нет. Я не смог решить эту проблему (и я больше не работаю в этой компании).   -  person Paul Cezanne    schedule 08.05.2015


Ответы (1)


Для этого нет доступного решения. Нативным приложениям Facebook для iOS не разрешено создавать или сохранять учетную запись в ACAccountStore. Это позволяет получить доступ к учетной записи только из ACAccountStore. iOS позволяет хранить только 1 учетную запись facebook за раз. Попробуйте сделать эти шаги, вы легко это поймете,

  1. Добавьте учетную запись facebook в настройки приложения и попробуйте получить к ней доступ. Это будет великое разрешение.

  2. Удалите учетную запись и попробуйте получить разрешение, доступ будет запрещен.

  3. Добавьте учетную запись facebook, получите доступ и попробуйте сохранить новую учетную запись в ACAccountStore. Будет сказано, что родным приложениям не разрешено сохранять учетную запись в ACAccountStore.

Предлагаемое решение: добавьте учетную запись в приложение настроек и войдите в нее, а затем поделитесь с помощью социальной среды или presentOSIntegratedDialog.

person Rafeek    schedule 21.01.2014
comment
Предлагаемое решение — это не решение для приложения, а скорее изменение поведения пользователя. - person Paul Cezanne; 21.01.2014
comment
Просто голосуйте против, чтобы не получить награду. Я поддержу еще один ваш ответ, чтобы вы не потеряли очки репутации. - person Paul Cezanne; 19.08.2014
comment
@PaulCezanne: у вас есть какое-нибудь решение для сохранения учетной записи facebook в настройках? - person Rafeek; 03.09.2014
comment
Нет, решения не нашел. - person Paul Cezanne; 03.09.2014
comment
Кто-нибудь знает, возможно ли это в OSX? Я получаю com.apple.accounts Code=7 "The application is not permitted to access Facebook accounts". Пробовал отключать режим песочницы, тоже самое. - person User; 24.09.2015