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

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

Наше приложение уже использует Facebook SDK, поэтому я могу получить информацию об учетной записи Facebook, поэтому я подумал, что просто получу эту информацию и сохраню ее в меню "Настройки"> "Facebook". Вот мой код (Что я получил, когда мы используем учетную запись saveAccount:(ACAccount *) класса ACAccountStore? И запрос iOSAccessToAccountsWithType не отображает запрос разрешения / 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.

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

1 ответ

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

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

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

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

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

Другие вопросы по тегам